无法让PhpMailer使用Office 365

时间:2017-02-01 22:15:04

标签: php office365 phpmailer

我希望那一天能找到你。

我在现有的PHP网站上做了一些工作(应该注意我远非PHP专家),其网页表单目前无法正常工作。此表单只需要用户输入,将其转换为电子邮件并将该电子邮件发送到用户办公室帐户。当他们切换到Office 365作为他们的电子邮件提供商时,它停止工作。表单使用PhpMailer库来处理发送,因此我已将其修改为使用Office 365设置here。当它发送时我收到以下错误:

2017-02-01 21:50:17 Connection: opening to smtp.office365.com:2525, 
timeout=10, options=array ( ) 2017-02-01 21:50:28   Connection: Failed to 
connect to server. Error number 2. "Error notice: stream_socket_client() 
[function.stream-socket-client]: unable to connect to smtp.office365.com:587
(Connection timed out) 2017-02-01 21:50:28  SMTP ERROR: Failed to connect to 
server: Connection timed out (110)
Message delivery failed...RFI1

由于它的设置方式,这会直接输出到网页。这是我投入的PhpMailer设置:

$mail = new PHPMailer(true);
$mail-> IsSMTP();
$mail->Host       = "smtp.office365.com";
$mail->SMTPAuth   = true;
$mail->Username   = 'username';
$mail->Password   = 'pass';
$mail->SMTPSecure = 'ssl';
$mail->Port       = 587;
$mail->SMTPDebug  = 2;

$mail->From       = $from;
$mail->Mailer     = "smtp";
$mail->FromName   = 'Generic message';

我已经在网上看了一下,看看我在这里做错了什么。托管该网站的互联网服务提供商表示他们并未阻止任何内容,微软表示,我没有正确配置SSL。现在已经授予,我不是这个系统的专家,我不能直接访问服务器,网站本身也很奇怪,我无法在本地服务器上正常运行。尽管如此,我仍然很难想到SSL问题可能导致连接超时。有没有人知道还有什么可能导致这个问题呢?

编辑:正如所指出的,错误消息中的端口与代码中的端口不匹配。我根据我读过的内容尝试了几个端口,并在不同时间从每个端口抓取文本。

2 个答案:

答案 0 :(得分:0)

不要仅仅弥补价值并希望它有效。 Office365配置是bog标准的,与Host值以外的gmail相同,因此将代码基于PHPMailer提供的the gmail example

至于你在这里遇到的具体问题,我怀疑SMTPSecure = 'ssl'不能与Port = 587一起使用;对于端口587(显式TLS),您需要SMTPSecure = 'tls'

答案 1 :(得分:0)

除了将tls而不是ssl设置为前面提到的加密层之外,还需要明确指定$mail->From,它应该与$mail->Username属性相同。< / p>

以下是已修改的示例:

$mail = new PHPMailer(true);
$mail-> IsSMTP();
$mail->Host       = "smtp.office365.com";
$mail->SMTPAuth   = true;
$mail->Username   = "jondoe@contoso.onmicrosoft.com";
$mail->Password   = 'P@ssw0rd';
$mail->SMTPSecure = 'tls'; //TLS
$mail->Port       = 587;

$mail->From       = $mail->Username;  //mandatory and identical to Username property 

$mail->Subject = "Hello message";
$mail->Body = "Body goes here...";
$mail->addAddress('janedoe@contoso.onmicrosoft.com');


if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}