PHPMailer 可在本地运行,但不能在生产环境(Azure 主机)上运行

问题描述 投票:0回答:4

我正在尝试使用 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/故障排除

有人知道如何解决这个问题吗?

php azure phpmailer
4个回答
0
投票

经过大量工作和网上搜索,我建议那些使用Azure的人使用第三方服务(例如SendGrid)来发送电子邮件。


0
投票

为我工作。

如果使用 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';

0
投票

2021 年更新

我发现我的主机阻止了端口 465 和 587 上的流量。从而阻止了 SSL 或 TLS 上的 SMPT。

幸运的是,我使用的主机允许我启用此端口。并非所有主机都允许(Go Daddy)。它确实需要我联系支持人员并请求他们为我打开端口。如果系统确实有重大更新,它可能会再次被禁用。

进一步阅读的链接


0
投票

使用最新版本的phpmailer 它的工作原理

© www.soinside.com 2019 - 2024. All rights reserved.