我正在使用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";
}
答案 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证书。