邮件不使用PHPMailer和SSL发送

时间:2014-12-08 16:47:16

标签: php

我按照以下指南配置了我的邮件服务器: 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;
    }

}

1 个答案:

答案 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连接错误”。