Ili*_*eev 45 php email phpmailer
我在几个项目中使用过PHPMailer,但现在我卡住了.它给我错误:
SMTP错误:无法连接到SMTP主机.
我试过从Thunderbird发送电子邮件,它确实有效!但不是通过PHPMailer ......以下是Thunderbird的设置:
服务器名称:mail.exampleserver.com
端口:587
用户名:user@exampleserver.com
安全身份验证:无
连接安全性:STARTTLS
我在上一个使用PHPMailer的项目中将这些与服务器进行了比较,它们是:
服务器名称:mail.exampleserver2.com
端口:465
用户名:user@exampleserver2.com
安全认证:无
连接安全性:SSL/TLS
我的PHP代码是:
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = SMTP_HOST; // SMTP servers
$mail->Port = SMTP_PORT; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = SMTP_USER; // SMTP username
$mail->Password = SMTP_PASSWORD; // SMTP password
$mail->From = MAIL_SYSTEM;
$mail->FromName = MAIL_SYSTEM_NAME;
$mail->AddAddress($aSecuredGetRequest['email']);
$mail->IsHTML(true); // send as HTML
Run Code Online (Sandbox Code Playgroud)
哪里错了?
Mar*_*ier 92
由于这些问题在谷歌中显得很高,我想在这里分享我的解决方案,其中PHP刚刚升级到5.6版本(具有更严格的SSL行为).
PHPMailer维基有一个关于此的部分:
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure
建议的解决方法包括以下代码:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
Run Code Online (Sandbox Code Playgroud)
这适用于PHPMailer 5.2.10(及以上版本).
注意:显然,并且在wiki中也是如此,这应该是一个临时解决方案!
正确的解决方法是用一个好的证书替换无效,配置错误或自签名的证书.
wes*_*sel 48
在我的情况下,PHP中缺少SSL支持,这给出了这个错误.
所以我启用了extension = php_openssl.dll
$mail->SMTPDebug = 1;
也暗示了这个解决方案.
2017年更新
$mail->SMTPDebug = 2;
,请参阅:https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output
Vip*_*_Sb 12
你的问题很可能就是这个问题
连接安全性:STARTTLS连接安全性:SSL/TLS
这是两个不同的协议,你使用正确的协议,无论你在Thunderbird中使用的是什么,都需要使用.
尝试设置变量:
// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
Run Code Online (Sandbox Code Playgroud)
我有一个类似的问题,并且发现需要设置openssl.cafile
配置指令php.ini
以允许验证安全对等体.您只需将其设置为证书颁发机构文件的位置,就像您可以在http://curl.haxx.se/docs/caextract.html获取的那样.
从PHP 5.6开始,这个指令是新的,所以当从PHP 5.5升级时,这让我措手不及.
我有同样的问题,因为PHPMailer意识到服务器支持STARTTLS所以它试图自动升级连接到加密连接.我的邮件服务器与我网络中的Web服务器在同一子网上,这完全在我们的域防火墙后面,所以我不太担心使用加密(加上生成的电子邮件不包含敏感数据).
所以我要做的就是在class.phpmailer.php文件中将SMTPAutoTLS更改为false.
/**
* Whether to enable TLS encryption automatically if a server supports it,
* even if `SMTPSecure` is not set to 'tls'.
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
* @var boolean
*/
public $SMTPAutoTLS = false;
Run Code Online (Sandbox Code Playgroud)
mail.exampleserver.com 存在吗???,如果没有尝试以下代码(您必须有gmail帐户)
$mail->SMTPSecure = "ssl";
$mail->Host='smtp.gmail.com';
$mail->Port='465';
$mail->Username = 'you@gmail.com'; // SMTP account username
$mail->Password = 'your gmail password';
$mail->SMTPKeepAlive = true;
$mail->Mailer = "smtp";
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->CharSet = 'utf-8';
$mail->SMTPDebug = 0;
Run Code Online (Sandbox Code Playgroud)
小智 5
以下代码对我有用:
$mail = new PHPMailer(true);
$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted
$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isHTML(true);// Set email format to HTML
$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password
$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email
$mail->send();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
317225 次 |
最近记录: |