SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败
Posted
技术标签:
【中文标题】SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败【英文标题】:SMTP Connect() failed. Message was not sent.Mailer error: SMTP Connect() failed 【发布时间】:2013-09-01 01:02:03 【问题描述】:我正在尝试向 gmail 地址发送邮件,但它不断收到此错误“SMTP -> 错误:无法连接到服务器:连接超时 (110)SMTP Connect() 失败。邮件未发送。邮件程序错误: SMTP Connect() 失败。”可能是什么问题?
require 'class.phpmailer.php'; // path to the PHPMailer class
require 'class.smtp.php';
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug = 2;
$mail->Mailer = "smtp";
$mail->Host = "ssl://smtp.gmail.com";
$mail->Port = 587;
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "myemail@gmail.com"; // SMTP username
$mail->Password = "mypasswword"; // SMTP password
$Mail->Priority = 1;
$mail->AddAddress("myemail@gmail.com","Name");
$mail->SetFrom($visitor_email, $name);
$mail->AddReplyTo($visitor_email,$name);
$mail->Subject = "Message from Contact form";
$mail->Body = $user_message;
$mail->WordWrap = 50;
if(!$mail->Send())
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
else
echo 'Message has been sent.';
【问题讨论】:
可能同样的问题 > ***.com/questions/6168882/… ? 或***.com/questions/16048347/… 某些网络主机不允许您连接到外部 smtp 服务器。您可以从localhost
连接吗?
@matic : 你是怎么解决这个错误的??我也面临同样的错误
【参考方案1】:
<?php
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer();
$mail->SMTPDebug = 0; // Enable verbose debug output
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->IsSMTP();
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'mail@gmail.com'; // SMTP username
$mail->Password = 'your pass'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->setFrom('mail@gmail.com');
$mail->addAddress('mail@gmail.com'); // Name is optional
$mail->ishtml(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send())
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
else
echo 'Message has been sent';
?>
当你想测试时,这对我有用 不要使用 IDE 进行测试,因为如果您在本地主机中使用 localhost/yourfile.php 可能无法正常工作
【讨论】:
【参考方案2】:Mailjet
SMTP 设置
端口:25 或 587(一些提供商阻止端口 25)
我在将应用部署到服务器后更改端口来工作。
在调试中它对我有用:$mail->Port = 25;
在发布时它对我有用:$mail->Port = 587;
GL
【讨论】:
【参考方案3】:如果它在您的本地主机上运行,但在您的网络主机上运行:
一些托管网站block certain outbound SMTP ports。如已接受的答案中所述,注释掉 $mail->IsSMTP();
行可能会使其工作,但它只是禁用您的 SMTP 配置,并使用托管站点的电子邮件配置。
如果您使用 GoDaddy,则无法使用其他 SMTP 发送邮件。我使用的是 SiteGround,发现他们只允许使用 SSL 加密类型从端口 25 和 465 进行 SMTP 访问,所以我会查找您的主机的文档并从那里开始。
【讨论】:
【参考方案4】:要使其正常工作,我必须转到 myaccount.google.com ->“连接的应用和网站”,然后将“允许不太安全的应用”设置为“开启”(靠近页面底部)。
【讨论】:
【参考方案5】:你做得很好。只是您必须检查不同的 SMTP 端口,例如 465 和其他在您的系统上工作的端口。 要记住的另一件事是允许通过 google 帐户访问 less secure apps,否则会引发相同的错误。 我已经经历了一整天,唯一做错的是端口号,我只是更改了端口号。并且有效。
【讨论】:
【参考方案6】:最近谷歌推出了一个叫做应用密码的东西。通过为我的邮件实例创建一个应用密码,为我解决了这个问题。
https://support.google.com/accounts/answer/185833?p=InvalidSecondFactor&visit_id=1-636228492770322608-2743677043&rd=1
【讨论】:
您能否添加更多细节或提出您认为这是问题的原因?【参考方案7】:在 myaccount.google.com/security 登录您的 Google 帐户,转到“登录”,然后转到“安全”,滚动到底部,然后启用“允许安全性较低的应用”选项。
【讨论】:
【参考方案8】:我遇到了这个问题,告诉我从谷歌收到一封电子邮件,告诉我有人试图登录你的帐户是你吗,我回答是,然后它开始工作,所以如果你是这种情况,请查看你的电子邮件并允许服务器
【讨论】:
抱歉我的英语不好,好吧,我说的是我试图使用 phpmailer 发送电子邮件,但我一直收到相同的错误“SMTP -> 错误:无法连接到服务器:连接计时out (110)..." 1 分钟后,谷歌向我发送了一个电子邮件收件箱(与我在 phpmailer 中使用的电子邮件相同),他们说有人试图从不知道的设备访问我的电子邮件,并问我如果是我,我回答是并且问题已解决,其他可能有用的信息在您的 gmail 中使用像 Pa$wword 这样的硬密码 您可以编辑您的原始帖子。你的英语很好,但你的标点符号不行:-)【参考方案9】:解决方案是配置 gmail 首选项,访问不安全的应用程序
【讨论】:
【参考方案10】:我知道这个问题已经有一段时间了,但我遇到了确切的问题并通过禁用 csf.conf 上的 SMTP_BLOCK 解决了它(我们使用 CSF 作为防火墙)。
要禁用,只需编辑 csf.conf 并禁用 SMTP_BLOCK,如下所示:
###############################################################################
# SECTION:SMTP Settings
###############################################################################
# Block outgoing SMTP except for root, exim and mailman (forces scripts/users
# to use the exim/sendmail binary instead of sockets access). This replaces the
# protection as WHM > Tweak Settings > SMTP Tweaks
#
# This option uses the iptables ipt_owner/xt_owner module and must be loaded
# for it to work. It may not be available on some VPS platforms
#
# Note: Run /etc/csf/csftest.pl to check whether this option will function on
# this server
# SMTP_BLOCK = "1" --> this will cause phpmailer Connection timed out (110)
SMTP_BLOCK = "0"
【讨论】:
谢谢。原来这是我的 cPanel 安装中的真正罪魁祸首,而不是 WHM 中“SMTP 限制”配置页面上的开关。【参考方案11】:删除或注释掉该行-
$mail->IsSMTP();
它会为你工作。
我已经检查并尝试了来自不同站点的许多答案,但除了上述解决方案之外没有任何解决方案。
【讨论】:
这对我有用,因为它在本地工作,但不适用于我的主机,我尝试了这个,它出于某种奇怪的原因工作。还是不知道为什么 不知道为什么会这样,但它适用于某些服务器设置。谢谢 这通过不尝试连接到gmail来“解决”无法连接到gmail的问题。它可能只是解决了问题 - 而不是立即收到错误,您很可能稍后会收到反弹,您可能从未听说过,但您的脚本将“成功”。 这对我有用 +10。请接受它作为答案 如果我删除该行,我会收到另一个错误:邮件程序错误:无法实例化邮件功能。【参考方案12】:以下是您在处理 PHPMailer 时应该查看的列表:
-
通过在 PHP.ini 中取消注释
extension=php_openssl.dll
来启用 openSSL
使用$mail->SMTPSecure = 'tls';
和$mail->Port = 587;
如果您在其他地方出错(例如用户名和密码不正确等),请启用调试。
【讨论】:
【参考方案13】:你必须已经安装了 php_openssl.dll,如果你使用 wampserver 很简单,搜索并应用 PHP 的扩展。
在示例中更改:
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 465 ssl
$mail->Port = 465;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'ssl';
然后您收到一封来自 gmail 的电子邮件,谈到启用“不太安全的访问应用程序”选项 这里https://www.google.com/settings/security/lesssecureapps
我建议你更改密码并不断加密
【讨论】:
谢谢你,这正是我所需要的 非常感谢!您的回答是最有帮助的,不那么令人困惑,而且直截了当!我把头发拉了好几个小时!对我有用的是在这里google.com/settings/u/1/security/lesssecureapps 选择“打开”选项。我正在使用 Mac 和 Xampp。谢谢一百万【参考方案14】:你在本地主机上运行吗?你有编辑php.ini
吗?
如果还没有,试试这个:
1.打开xampp->php->php.ini
2. 搜索extension=php_openssl.dll
3. 首字母看起来像这样;extension=php_openssl.dll
4.删除';'它看起来像这样extension=php_openssl.dll
5.如果找不到extension=php_openssl.dll
,添加此行extension=php_openssl.dll
。
6. 然后重启你的 Xampp。
祝你好运;)
【讨论】:
老兄在我的php.init
只有我找到extension=openssl
但不是extension=php_openssl.dll
【参考方案15】:
您没有 SMTPSecure 设置来定义正在使用的身份验证类型,并且您正在使用不必要的 'ssl://' 运行主机设置(PS - 如果需要,ssl 位于端口 465 上改为通过 ssl 运行它,请参阅 accepted answer here。这是要添加/更改的行:
+ $mail->SMTPSecure = 'tls';
- $mail->Host = "ssl://smtp.gmail.com";
+ $mail->Host = "smtp.gmail.com";
【讨论】:
仍然无法工作.. 生成的错误是这个“错误:无法连接到服务器:连接超时(110)SMTP Connect()失败。消息未发送。邮件程序错误:SMTP Connect( ) 失败。” 尝试使用您在此之前尝试更改的代码编辑您的原始帖子,这样我们就可以非常清楚地了解它现在的样子?似乎仍然可以在那里修复一些东西...... 我遇到了类似的问题。您需要指定 SMTPSecure 设置。如果您使用 tls,则需要使用 587 端口。如果您使用的是 ssl,则组合为 465。是的,去掉 smtp.gmail.com 前面的 ssl:// 将Host
设置为tls://smtp.gmail.com
与将Host
设置为smtp.gmail.com
和SMTPSecure 设置为tls
完全相同;它只是同一事物的另一种语法。您也可以附加一个类似:587
的端口来设置Port
属性。以上是关于SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败的主要内容,如果未能解决你的问题,请参考以下文章
发送 AUTH LOGIN 命令失败。错误:无法使用 PHP SMTP 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件