Phpmailer使用smtp与Gmail无法正常工作 - 连接超时

时间:2013-10-07 02:43:18

标签: php email ssl gmail phpmailer

我查看了以下链接:

phpmailer send gmail smtp timeout

send email using Gmail SMTP server through PHP Mailer

http://uly.me/phpmailer-and-gmail-smtp/

...并试图为自己实现这些的组合......但大多数时候它发送此消息......

  

无法发送消息。

     

邮件程序错误:SMTP连接()失败。

然而,有一次我在“tls”和“ssl”之间进行实验时发送了这个...

  

SMTP错误:无法连接到服务器:连接超时(110)SMTP连接()失败。   无法发送消息。

     

邮件程序错误:SMTP连接()失败。

我的代码已附上......我不知道错过了什么?我问网络托管服务是否阻止并给他们一个我的代码模板 - 他们说服务器允许连接到Gmail的SMTP。

    require_once("class.phpmailer.php");
    $mail = new PHPMailer();
    $mail -> IsSMTP();
    $mail -> SMTPDebug = 2;
    $mail -> SMTPAuth = 'true';
    $mail -> SMTPSecure = 'tls';
    $mail -> SMTPKeepAlive = true;
    $mail -> Host = 'smtp.gmail.com';
    $mail -> Port = 587;
    $mail -> IsHTML(true); 

    $mail -> Username = "myemail@gmail.com";
    $mail -> Password = "mypassword";
    $mail -> SingleTo = true; 

    $to = xxx;                           
    $from = xxx;
    $fromname = xxx;
    $subject = xxx;
    $message = xxx
    $headers = "From: $from\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";

    $mail -> From = $from;
    $mail -> FromName = $fromname;
    $mail -> AddAddress($to);

    $mail -> Subject = $subject;
    $mail -> Body    = $message;

    if(!$mail -> Send()){
        echo "Message could not be sent. <p>";
        echo "Mailer Error: " . $mail-> ErrorInfo;
        exit;
    }

8 个答案:

答案 0 :(得分:8)

我挖了进去。使用PHP本机的fsocketopen来测试连接并消除大多数潜在问题。用这个写一个简单的php页面:

    $host = "smtp.gmail.com";
    $port = "587";
    $checkconn = fsockopen($host, $port, $errno, $errstr, 5);
    if(!$checkconn){
        echo "($errno) $errstr";
    } else {
        echo 'ok';
    }

你应该回来“好”。如果不是,您知道您的连接问题与Phpmailer无关。如果是这样的话,它可能是托管公司。如果没有,那么你的本地主机和托管公司之间的区别就像不同版本的php一样简单。

我怀疑这个脚本不会建立连接

答案 1 :(得分:2)

我有同样的问题并解决了它:

首先,打开phpmailer中的smtp错误记录:

    $mail->SMTPDebug  = 2;       // enables SMTP debug information (for testing)

然后重试您的phpmailer电子邮件发送。您将在标准错误输出上看到整个SMTP会话。如果您使用的是Web服务器,请查看Web服务器日志文件。

然后我可以看到来自gmail的错误响应。 Gmail不接受登录。

smtp对话中的错误是指article。它提供了一些提示:

  1. Allow less secure apps to use your account
  2. 从网络浏览器登录gmail。
  3. 确认gmail login captcha。 (它实际上可能不会向您显示验证码,但这是突然允许我的电子邮件通过的额外步骤。)

答案 2 :(得分:1)

使用ssl

$mail -> SMTPSecure = 'ssl';

端口应为465

$mail -> Port = 465;

将您的主机更改为:

$mail -> Host = 'ssl://smtp.gmail.com';

希望它有效

答案 3 :(得分:1)

检查以确保您可以从您的虚拟主机访问gmail。我假设它是linux。在命令行类型中输入SSH

telnet smtp.gmail.com 587

你应该回来

Connected to smtp.something 

必须是localhost和您的提供商之间的配置差异

答案 4 :(得分:1)

这个问题有很多重复,所以这里有一个罐头答案:

  1. 将您的代码基于the gmail example provided with PHPMailer
  2. 查看the troubleshooting docs
  3. 请注意{Large K所说的this issue。{/ li>

答案 5 :(得分:0)

Gmail可能阻止您访问。

转到您的安全配置,看看它是否阻止任何访问..

或尝试更改密码,然后重试。

答案 6 :(得分:0)

添加

date_default_timezone_set('Etc/UTC');

包括自动加载器之前。 SMTP需要设置时区,这是我的问题。

答案 7 :(得分:-2)

从Windows下载sendmail for Windows http://www.glob.com.au/sendmail/sendmail.zip 将sendmail.exe和sendmail.ini复制到C:/ usr / lib /

编辑sendmail.ini并输入您的邮件帐户凭据。

您可能也想要配置这两个字段(或者发送可能不起作用) force_sender=you-sender@yourdomain.com force_recipient=you@yourdomain.com 顺便说一句,我取消注释了debug_logfile,这样我就可以看到哪些数据被发送到我的SMTP服务器了。

编辑c:\ php \ php.ini

sendmail_from = you@yourdomain.com

仅适用于Unix。您也可以提供参数(默认值:“sendmail -t -i”)。 sendmail_path = C:/usr/lib/sendmail.exe -t -i

重启apache 从[开始]&gt;启动sendmail.exe运行&gt; C:/usr/lib/sendmail.exe或在Windows资源管理器中转到C:/ usr / lib,然后在exe文件上转到DoubleClick。

此解决方案显示在Sendmail Wamp Php

我现在在Windows 10上尝试过它并使用gmail帐户运行

添加了:

使用

打开CMD并将sendmail作为守护程序/服务
sc create SendMail binpath= "C:\usr\lib\sendmail.exe"

现在,请确保您的系统上安装了OpenSSL,您可以从此处下载:https://slproweb.com/products/Win32OpenSSL.html

安装版本你需要什么,不记得安装“文件到Windows文件夹”。重新启动并重试,您将解决它。