我有一个带有邮件域的主机,mail.aniproject.ru
这是它的设置
这是我尝试发送电子邮件的代码
<?php
namespace project;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require __DIR__ . '/../vendor/autoload.php';
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->Host = 'mail.aniproject.ru';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->setFrom('[email protected]', 'First Last');
$mail->addAddress('[email protected]', 'John Doe');
$mail->Subject = 'Проверка работы почты хостинга';
$mail->Body = 'Привет Рей';
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message sent!';
}
SSL 处理也已启用
这是我尝试运行脚本时得到的结果
2024-04-27 19:37:12 SMTP ERROR: Failed to connect to server: (0)
2024-04-27 19:37:12 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/TroubleshootingSMTP server error: Failed to connect to server
需要做什么才能发送消息?
一般来说,如果您使用邮箱设置中指定的发送邮件服务器的名称登录,请仔细查看错误。
例如我有
从错误中可以看出,我为连接指定的域名与-certificate
mail.aniproject.ru
中指定的域名不匹配。SSL
*.hosting.reg.ru
您可以在同一错误消息中或在输出的开头找到该名称,在我的例子中,它是
server109.hosting.reg.ru
. 例如:2024-04-28 09:48:39 SERVER -> CLIENT: 220 server109.hosting.reg.ru ESMTP Exim 4.97.1 Sun, 28 Apr 2024 12:48:39 +0300
2024-04-28 09:48:39 SERVER -> CLIENT: 250-server109.hosting.reg.ru Hello reiji-Legion-5-15IMH6 [85.26.176.81]
2024-04-28 09:48:41 SMTP ERROR: QUIT command failed: ՠc<���D[�+�7<TMS�Jr�221 server109.hosting.reg.ru closing connection
一般来说,适合我的情况的工作脚本是
PS我无法通过465端口连接到服务器,所以我给托管技术支持留了一封信,并通过587连接。相应地,
$mail->SMTPDebug
我不得不将其更改为PHPMailer::ENCRYPTION_STARTTLS
. 您还可以使用 手动检查与所需服务器的连接openssl s_client -starttls smtp -tls1_2 -crlf -connect server109.hosting.reg.ru:587
。只是不要忘记指定所需的端口,如果您需要特定类型的加密,那么也可以。