Stream_socket_enable_crypto():对等证书CN =`* .webhostbox.net'与使用PHPMailer的预期CN =`mail.maydomain.com'不匹配

时间:2017-07-29 02:23:20

标签: php email phpmailer

我正在使用PHPMailer发送电子邮件但我收到错误。我的域名不是SSL。如果我使用带有我的Gmail ID的smtp.gmail.com,那么电子邮件将进入收件箱,但当我使用我的托管详细信息时,我收到错误

 Warning: stream_socket_enable_crypto(): Peer certificate CN=`*.webhostbox.net' did not match expected CN=`mail.mydomain.com' in C:\xampp\htdocs\sendmail\mail\class.smtp.php on line 337
 Mailer Error: SMTP connect() failed.

如果我将$mail->SMTPSecure = 'tls';设置为$ mail-> SMTPSecure ='false';然后没有收到错误,但电子邮件将发送垃圾邮件。 我甚至试过下面的代码。

$mail->SMTPOptions = array (
        'ssl' => array(
            'verify_peer'  => false,
            'verify_peer_name'  => false,
            'allow_self_signed' => true));

你能帮助我吗?

谢谢

require 'mail/PHPMailerAutoload.php';
function sendMail($subject, $content, $email){
    $phpMailerSubject = $subject;
    $phpMailerText = $content;
    $phpMailerTo = $email; 
    include 'mail/PHPMailerConfig.php';
}

PHPMailerConfig.php

<?php 
//Create a new PHPMailer instance
$mail = new PHPMailer;

$mail->IsSMTP(); 
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = 'mail.mydomain.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "abc@mydomain.com";
$mail->Password = "Pass#@123";
$mail->setFrom('abc@mydomain.com', 'naren');
$mail->addReplyTo('abc@mydomain.com', 'naren');
$mail->addAddress($phpMailerTo, 'Customer');
$mail->Subject = $phpMailerSubject;
$mail->msgHTML($phpMailerText);
$mail->AltBody = ' ';

//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');

//send the message, check for errors
if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo;
} else { 
echo "sucessfully"; 
}

3 个答案:

答案 0 :(得分:1)

Read the PHPMailer docs错误指向你;它解释了如何诊断这个问题。

您要求连接到smtp.gmail.com,但您实际上已连接到mail.webhostbox.net(我收集了您发布的内容)。毫不奇怪,TLS证书与gmail的域名不匹配,因此失败了。您尝试通过禁用验证来强制它工作,因为您现在正在伪造来自地址,导致SPF失败,因此最终会被拒绝或垃圾邮件,因此您将无法进行验证。重看。

您需要更改您的发件人地址以匹配您的ISP提供的SPF,让他们让您正确使用SMTP,或者切换到更加开明的ISP。

答案 1 :(得分:1)

由于我花了大量时间尝试解决此问题,因此我将发布答案。

我在GoDaddy中托管了Laravel Web应用程序

因此,我将电子邮件设置添加到.env并将MAIL_ENCRYPTION留空

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=user@mail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

另外,在config / mail.php中,我将加密保留为下一个,其中MAIL_ENCRYPTION再次为空

'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
        'port' => env('MAIL_PORT', 587),
        'encryption' => env('MAIL_ENCRYPTION', ''),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],

保存更改后,我只运行php artisan config:cache,然后运行php artisan config:clear和voila,它现在可以正常工作

希望对某人有用

答案 2 :(得分:0)

将其发布以方便参考。

许多升级到PHP 5.6+的人遇到以下错误:

ErrorException:发送至[电子邮件地址]的电子邮件失败:stream_socket_enable_crypto():对等证书CN = [hostname]' did not match expected CN= [目标主机名]'-库/Zend/Mail/Protocol/Smtp.php:206

从PHP 5.6开始,默认情况下启用对等验证(http://php.net/manual/en/migration56.openssl.php)。

如果您正在运行WHM或Plesk,我发现此问题可以通过以下方式解决:

WHM:将“将传出SMTP限制为root,exim和mailman(FKA SMTP Tweak)”从“打开”更改为“关闭”。

Plesk:创建一个新的预订,并将URL设置为服务器主机地址,然后通过let加密插件为其分配SSL证书。