我正在尝试使用 PHPMailer 发送电子邮件,它在开发环境(本地 - 我的私人 leptop)上工作得很好,但在生产环境(Azure 主机)上根本不起作用。
这是我正在使用的代码:
require 'PHPMailer-master/PHPMailerAutoload.php';
$mail = new PHPMailer(true); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // 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; // or 587 465-for gmail
$mail->CharSet = 'UTF-8';
$mail->IsHTML(false);
$mail->Username = '***@gmail.com';
$mail->Password = '*****';
$mail->SetFrom('****@gmail.com');
$mail->Subject = 'test phpmailer';
$mail->Body = 'body without html';
$mail->AddAddress('****@gmail.com');
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
我试图在他们的网站以及一般在线上检查解决方案,但我发现没有任何帮助:解决 PHPMailer 问题
我尝试过的和我看到的:
在 CMD 上:
ping smtp.gmail.com
Pinging gmail-smtp-msa.l.google.com [108.177.126.108] with 32 bytes of data:
Reply from 108.177.126.108: bytes=32 time=5ms TTL=40
Reply from 108.177.126.108: bytes=32 time=5ms TTL=40
Reply from 108.177.126.108: bytes=32 time=5ms TTL=40
Reply from 108.177.126.108: bytes=32 time=5ms TTL=40
Ping statistics for 108.177.126.108:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 5ms, Maximum = 5ms, Average = 5ms
在 CMD 2 上:
telnet smtp.gmail.com 587
220 smtp.gmail.com ESMTP b11sm6804305edc.8 - gsmtp
这些结果并没有指出问题,所以我不知道如何解决它,而且我现在陷入了困境。
当我在生产环境中运行代码时,我得到的是:
2018-02-25 11:51:48 SMTP 错误:无法连接到服务器:(0) 2018-02-25 11:51:48 SMTP connect() 失败。 https://github.com/PHPMailer/PHPMailer/wiki/故障排除
有人知道如何解决这个问题吗?
经过大量工作和网上搜索,我建议那些使用Azure的人使用第三方服务(例如SendGrid)来发送电子邮件。
为我工作。
如果使用 SSL 保护域名
添加
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
完整代码
$mail = new PHPMailer();
$mail->isSMTP();
$mail->CharSet = "utf-8";
$mail->SMTPAuth = true;
$mail->Host = "smtp.gmail.com";
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom('[email protected]', 'xxx');
$mail->addReplyTo('[email protected]', 'yyy');
$mail->addAddress('[email protected]', 'addressName');
$mail->Subject = 'Subject Test';
$mail->msgHTML("Welcome to bamossza.");
$mail->AltBody = 'bamossza.com';
2021 年更新
我发现我的主机阻止了端口 465 和 587 上的流量。从而阻止了 SSL 或 TLS 上的 SMPT。
幸运的是,我使用的主机允许我启用此端口。并非所有主机都允许(Go Daddy)。它确实需要我联系支持人员并请求他们为我打开端口。如果系统确实有重大更新,它可能会再次被禁用。
使用最新版本的phpmailer 它的工作原理