使用PHP发送邮件失败

时间:2010-12-21 01:08:14

标签: php sendmail

我使用的是我一直用来尝试通过电子邮件发送表单的相同php代码,我收到此消息:

  

警告:mail()[function.mail]:   无法连接到邮件服务器   “localhost”端口25,验证你的   “SMTP”和“smtp_port”设置   php.ini或使用ini_set()   第44行的sendMailSuscribete.php

这是第40-54行:

$header .= "From: $email" . "\r\n";
$header .= "Reply-To: $email" . "\r\n";
$header .= "Return-Path: $email" . "\r\n";

if(mail($to, $subject, $msg, $header)){
    //Message sent!
    redirect("http://www.domain.com/suscribete.html");
}else{
    // Display error message if the message failed to send
    echo "
    <div class=\"MsgError\">
        <h1>Error&hellip;</h1>
        <p>Disculpa <b><?=$name;?></b>, tu mensaje fall&oacute; en ser enviado. Por favor vuelve a intentar.</p>
</div>";
}

我已经使用phpinfo()进行了检查,我知道smtp设置为localhost,它使用的端口是25,所以我真的不知道错误是什么。

更新 我忘了说它是在Windows服务器上运行的,这个php文件是我一直用于Unix服务器的文件,它是否包含不同的东西?

3 个答案:

答案 0 :(得分:3)

mail无法直接发送电子邮件(至少不能在Windows上发送),它需要一个SMTP服务器。在正在执行PHP脚本的主机上没有运行SMTP服务器。解决方案是:

  1. 使用可以使用SMTP直接发送电子邮件的库,例如PHPMailerSwiftmailergithub repo)。
  2. 编辑php.ini指令以指向接受您的电子邮件的SMTP服务器。如果您不知道使用哪一个,请询问您的托管服务提供商。
  3. 在localhost上设置SMTP服务器。
  4. 第1点是一个好主意,因为这些库提供了抽象,使得不必处理低级别的东西,比如正确地将MIME消息放在一起。第2点可能是最不麻烦的。我建议不要使用Point 3.除非你真的想要自己管理一个电子邮件服务器。

答案 1 :(得分:3)

您可以尝试使用外部SMTP邮件服务器,例如Gmail吗?如果您有Gmail帐户,可以尝试在邮件命令之前添加:

ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");
ini_set("username","<myaccount.gmail.com>"); # You need to change this
ini_set("password","YOUR_PASSWORD"); # You need to change this

我没有测试过这些设置,但它应该向您发送正确的方向。

答案 2 :(得分:0)

你有哪个邮件服务器?有些人表现得有些不同...... http://www.php.net/manual/en/function.mail.php(只需向下滚动)