我按照以下指南配置了我的邮件服务器: https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassasin 现在我正在尝试使用此库通过PHP发送邮件: https://github.com/PHPMailer/PHPMailer
但问题似乎是SSL(证书)。我不确定脚本是否无法建立连接,或者问题是否是未经验证的SSL证书。 你们有什么想法吗? 我应该在脚本中使用startssl oder starttsl吗?
SSLaccept error from x.com[x.x.x.x]: 0
Dec 8 17:45:23 x postfix/submission/smtpd[13479]: warning: TLS library problem: 13479:error:14094418:SSL routines:SSL3READBYTES:tlsv1 alert unknown ca:s3pkt.c:1258:SSL alert number 48:
到目前为止我的代码:
function send_mail($ from,$ from_name,$ to,$ to_name,$ subject,$ content) { 要求'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'mail.x.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'noreply@x.com'; // SMTP username
$mail->Password = 'so secret'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->From = $from;
$mail->FromName = $from_name;
$mail->addAddress($to, $to_name); // Add a recipient
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $content;
$mail->AltBody = 'Please use an html compatible Client to view this mail!';
if(!$mail->send()) {
return false;
} else {
return true;
}
}
答案 0 :(得分:0)
我有同样的错误,最后发现phpmailer想要使用正常的smtp连接,然后STARTTLS或STARTSSL来初始化加密。换句话说:它想要连接到提交服务而不是smtps服务。提交在端口587(通常)上,smtps在端口465上。事实上,smtps协议很久以前就被弃用了。还有很多ISP使用smtps,但显然他们不应该这样做。
如果您的邮件提供商允许您使用提交(端口586)而不是465,那么请在配置中更改您的端口号,它将起作用!如果您恰好是smtp服务器上的sysadmin,那么只需启动提交服务,监听端口587.如果您的ISP仅支持smtps,那么可能您被卡住了。似乎phpmailer不处理从一开始就加密的SMTPS连接。它仅支持可以切换为加密的连接(使用STARTTLS)。
这两者之间的区别也在这里描述:
What is the difference between ports 465 and 587?
更新:在您尝试发送任何电子邮件之前,请更新到最新版本的phpmailer。从github(https://github.com/PHPMailer/PHPMailer)下载最新版本。不要尝试使用任何其他版本!有时,次要版本中的一个小变化将决定成功发送的电子邮件和“smtp连接错误”。