我想,而在PHP中使用SMTP验证来Gmail发送HTML邮件。 下面是我使用的脚本:
require_once "Mail.php";
require_once 'Mail/mime.php';
$from = "Some Name <myemail@gmail.com>";
$to = "Other Name <otheremail@gmail.com>";
$subject = "This is a test";
$crlf = "\n";
$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "myemail@gmail.com";
$password = "mypass";
$headers = array ('From' => $from,
'Return-Path' => $from,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mime = new Mail_mime($crlf);
$mime->setTXTBody("This is a test email message");
$mime->setHTMLBody($body);
$body = $mime->get();
$headers = $mime->headers($headers);
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
注: $body
是一个HTML表,图像和其他信息。
当我执行该脚本失败,出现以下错误:
无法设置发件人:一些名称[SMTP:从服务器接收到的响应无效代码(代码:555,响应:5.5.2语法错误c6sm20541406obd.22)]
这是我一直想看看是怎么回事错误:1.使用使用“邮件”,而不是相同的脚本“SMTP”即
$smtp = Mail::factory('Mail');
这一切正常。 2.使用相同的脚本W / O的mime.php,这也适用,但不允许一个发送HTML电子邮件。
有谁知道,这样我仍然使用SMTP验证我如何能够将二者结合起来,并发送HTML邮件?
编辑:这是转储$mime->headers()
[MIME-Version] => 1.0
[From] => Some Name
[Return-Path] => Some Name
[Subject] => This is a test
[Content-Type] => multipart/alternative;
boundary="=_8662996a1f586248545d9f01f48e916d"
请参见下面的网址,我认为这是非常全面帮助你。
如何在PHP中使用SMTP发送HTML电子邮件
在Gmail的SMTP服务器地址是SMTP.GOOGLEMAIL.COM不SMTP.GMAIL.COM。
因此,你的设置应该是:
// ...
$smtp=array();
$smtp['host']='ssl://smtp.googlemail.com';
看到另一个例子: -
发送HTML和纯文本电子邮件使用SMTP服务器使用PHP和PEAR
http://tonyvirelli.com/slider/php-html-email-using-smtp/
尝试在双引号拥抱的名字,就像这样:
$from = '"Some Name" <myemail@gmail.com>';
$to = '"Other Name" <otheremail@gmail.com>';
尝试一下,告诉我们。
更新 :
好了,上面没有工作,所以我会告诉你它的工作,我在我的PHP页面通过SMTP的Gmail发送电子邮件。
- 我用http://phpmailer.sourceforge.net/
- SMTP服务器设置为smtp.gmail.com
- 它使用TLS协议在端口587
所以基于这样你可以尝试改变你的配置到:
$host = "tls://smtp.gmail.com";
$port = "587";
你可以看到这里如何通过Gmail用的PHPMailer发送邮件。
想通了自己最后。
由于阿比德·侯赛因在这里提供的链接,例如: http://tonyvirelli.com/slider/php-html-email-using-smtp/
解:
- 卸下
'Return-Path' => $from
来自头阵列。 - 添加
To => $to
的标头阵列(没有这个,To头中接收到的电子邮件的是未披露的收件人 )
我有这个问题,并通过调试成功地获得各种不同的错误(下图)。 奇怪的是,它完全停止关于2017年11月2日的工作。 我没有做任何更新。 以前它会随机工作,所以我把重试,它总能成功地<5次尝试,直到第二。 奇怪。
Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Invalid response code received from server (code: -1, response: )]
fsockopen(): Failed to enable crypto
fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error)
SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
(等等)
另一种用于发布此故障排除步骤,帮助我获得更多的错误,所以我可以谷歌更可能是什么原因:
$result = fsockopen('ssl://smtp.gmail.com', 465, $error_no,
$error_message, 5);
if($result === false) {
echo "error no:
$error_no error message: $error_message"; echo print_r($result,true);
}else{
echo 'success\n\n';
}
我的修复是添加CA捆绑文件,因为apparantly PHP无法验证谷歌的证书:
- 下载CA捆绑https://curl.haxx.se/docs/caextract.html和解压到C:\ Program Files文件\ PHP \ SSL \ cacert.pem
- 在php.ini中指定的位置:openssl.cafile = C:\ Program Files文件\ PHP \ SSL \ cacert.pem
文章来源: Sending HTML message through PEAR while using SMTP authentication returns an error