使用SMTP时“无法连接到邮件服务器”

时间:2011-07-25 14:14:40

标签: php email smtp port ini

我正在尝试发送一封包含以下功能的电子邮件作为测试功能:

function SendEmail($to, $subject, $body, $headers)
{
    ini_set("SMTP", "smtp.myexistingdomain.com");
    mail($to, $subject, $body, $headers);
}

我收到此错误:

  

警告:mail()[function.mail]:无法连接到mailserver   “smtp.myexistingdomain.com”端口25,验证您的“SMTP”和   php.ini中的“smtp_port”设置或使用ini_set()

3 个答案:

答案 0 :(得分:3)

PHP不实现SMTP协议。 PHP的mail() - 围绕着sendmail二进制文件。在unix / linux上运行正常。 但是在Windows上(来自PHP.net手册):

  

mail()的Windows实现在很多方面与   Unix实现。首先,它不使用本地二进制文件   编写消息但只能在直接套接字上运行,这意味着一个   需要MTA监听网络套接字(可以在网络套接字上)   localhost或远程机器。)

所以 - 故事的寓意 - 你需要安装邮件服务器。

如果您希望在不安装自己的邮件服务器的情况下发送电子邮件(这可能是* ss的痛苦) - 您必须使用实际实现SMTP协议的库,从而允许您连接到其他SMTP服务器。 这些现在最受欢迎:

  1. PHPmailer(download
  2. Swiftmailer
  3. 的Zend_Mail
  4. 使用这些库可以轻松构建文本或html消息。添加文件也很容易。

    /*******************************************************************
      Example of sending email using gmail.com SMTP server and phpmailer
    *******************************************************************/
    $mail = new PHPMailer();  // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 0;  // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true;  // authentication enabled
    $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 465; 
    $mail->Username = GUSER;  
    $mail->Password = GPWD;           
    $mail->SetFrom($from, $from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;
    $mail->AddAddress($to);
    if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo; 
        return false;
    } else {
        $error = 'Message sent!';
        return true;
    }
    

答案 1 :(得分:0)

你确定这个域工作,并且smtp服务器在端口25上是活动的吗? 安全smtp traffice使用不同的端口,谷歌可以告诉你哪一秒:)

如果你的电脑上安装了telnet,你可以试试这个:

打开命令提示符,键入:telnet smtp.myexistingdomain.com 25 当它连接时,你可以确定域工作,并有一个监听smtp服务器。 如果失败,smtp服务器可能无法访问或使用不同的端口。

您可以检查的另一件事是,是否在php.ini文件中设置了正确的凭据, 大多数smtp服务器都需要身份验证。

答案 2 :(得分:0)

SMTP设置仅适用于Windows。您是否可以通过telnet直接连接到该主机/端口?如果PHP外部但在主机上运行的东西也无法连接,那么这不是正确的主机名,它不是在端口25上侦听,和/或存在防火墙问题。