我在PHP 5.6上使用PHPMailer,在PHP 5.6中获得认证的增加的安全性当然很有趣.
我正在尝试向dreamhost上托管的域发送测试消息,PHPMailer返回的错误是:无法连接到SMTP主机.
这个错误不对,我已启用日志记录,这里是实际发生的事情.
连接:打开到mx1.sub4.homie.mail.dreamhost.com:25,timeout = 30,options = array()连接:打开S:220 homiemail-mx32.g.dreamhost.com ESMTP
C:EHLO s81a.ikbb.com
S:250-homiemail-mx32.g.dreamhost.com 250-PIPELINING 250-SIZE 40960000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250 8BITMIME
C:STARTTLS
S:220 2.0.0准备启动TLS
C:退出
S:SMTP错误:QUIT命令失败:连接:已关闭
我无法理解为什么PHPMailer只是放弃,在应该开始发送消息时发出QUIT命令.我从另一个日志中获得了另一条线索:
PHP警告:stream_socket_enable_crypto():对等证书CN = *.mail.dreamhost.com' did not match expected CN=mx1.sub4.homie.mail.dreamhost.com'在/home/ikbb/domains/dev.ikbb.com/public_html/includes/phpmailer/5.2.10/class.smtp .PHP
如果我使用一些自定义选项来阻止验证他们正在使用的证书,我可以让它继续.这是我有的:
$mail->SMTPOptions = array (
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true));
Run Code Online (Sandbox Code Playgroud)
如果我将SMTPOptions放在那里并跳过对等验证,则消息正常 - 在PHP中根本没有警告.
我如何捕获该错误,所以我知道存在问题但仍然发送消息?
我在使用phpmailer发送电子邮件时遇到问题.
发送电子邮件的代码是:
$mail_User = "site@xxxxxxx.com";
$mail_Password = "My Password";
$mail_address = "site@xxxxxxx.com";
$mail_Name = "MyName";
$mail_Server = "222.222.222.222";
$mail_Port = 25;
function SendHTMLMail($to, $cc, $bcc, $subject, $body)
{
global $mail_User, $mail_Password, $mail_address, $mail_Name, $mail_Server, $mail_Port;
$correo = new PHPMailer;
$correo->SMTPDebug = 3; // Enable verbose debug output
$correo->SetLanguage("es", "/phpmailer/language/");
$correo->IsSMTP();
$correo->IsHTML(true);
$correo->Host = $mail_Server;
$correo->Port = $mail_Port;
$correo->SMTPAuth =true;
//$correo->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$correo->Username = $mail_User;
$correo->Password = $mail_Password;
$correo->From = $mail_address;
$correo->FromName = …Run Code Online (Sandbox Code Playgroud)