【发布时间】:2018-09-24 14:00:53
【问题描述】:
我正在尝试使用 Plesk SMTP 在我的 VPS 上设置 PHP 邮件程序。
PHP 代码
require("path_to_phpmailer");
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
//Server settings
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->CharSet = 'UTF-8';
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->SMTPSecure = 'tls';
$mail->SMTPOptions = array (
'ssl' => array(
'verify_peer' => true,
'verify_depth' => 3,
'allow_self_signed' => true,
'peer_name' => 'Plesk',
)
);
$mail->SMTPAuth = true;
$mail->Username = 'support@mywebsite.com';
$mail->Password = 'somepassword';
$mail->setFrom('support@mywebsite.com', 'Name Surname');
$mail->addAddress('someadress@web.de', 'Name Surname');
$mail->Subject = 'Email subject';
$mail->msgHTML('Email content with <strong>html</strong>');
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
support@mywebsite.com 是我在 ples 仪表板中创建的电子邮件,而 somepassword 是它的密码。但是运行脚本会得到以下输出:
2018-04-14 09:27:10 SERVER -> CLIENT: 220 myserver.net ESMTP
Postfix (Ubuntu)
2018-04-14 09:27:10 CLIENT -> SERVER: EHLO mywebsite.com
2018-04-14 09:27:10 SERVER -> CLIENT: 250-myserver.net250-
PIPELINING250-SIZE 10240000250-ETRN250-STARTTLS250-AUTH DIGEST-MD5 CRAM-MD5
PLAIN LOGIN250-XFORWARD NAME ADDR PROTO HELO SOURCE PORT IDENT250-
ENHANCEDSTATUSCODES250-8BITMIME250 DSN
2018-04-14 09:27:10 CLIENT -> SERVER: STARTTLS
2018-04-14 09:27:10 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
2018-04-14 09:27:10 CLIENT -> SERVER: QUIT
2018-04-14 09:27:10 SERVER -> CLIENT:
2018-04-14 09:27:10 SMTP ERROR: QUIT command failed:
SMTP connect() failed.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed.
https://github.com/PHPMailer/PHPMailer/wiki/TroubleshootingMessage has been
sent
我理解错了吗?
提前谢谢你!
【问题讨论】:
-
您正在使用 TLS 到 localhost - 并且邮件服务器发布的证书永远不会匹配该名称,这就是您收到该错误的原因。由于它是本地主机,因此无论如何加密都没有意义,但如果您因为 autotls 而自动获取它,您可以禁用它或使用 确实 出现在邮件服务器证书上的名称,这大概会映射到同一位置。
-
谢谢!我找到了使用邮件 api 的解决方法。不使用加密,我可以毫无错误地调用 phpmailer 函数,但由于某种原因,邮件仍然没有发送。
标签: php wordpress email phpmailer plesk