无法使PhpMailer使用Office 365

无法使PhpMailer使用Office 365,php,office365,phpmailer,Php,Office365,Phpmailer,我希望这一天你一切都好 我正在一个现有的PHP站点上做一些工作(应该注意的是,我远非PHP专家),该站点的web表单目前不起作用。此表单只需接收用户输入,将其转换为电子邮件并将该电子邮件发送到用户办公室帐户。当他们切换到Office 365作为电子邮件提供商时,它停止工作。表单使用PhpMailer库来处理发送,因此我将其修改为使用Office 365设置。当它发送时,我收到以下错误: 2017-02-01 21:50:17 Connection: opening to smtp.office3

我希望这一天你一切都好

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

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';
我已经浏览了整个网络,看看我在这里可能做错了什么。托管该网站的ISP说他们没有阻止任何东西,而微软说是因为我没有正确配置SSL。现在我承认,我不是这个系统的专家,我没有直接访问服务器的权限,而且站点本身的构建也很奇怪,我无法让它在本地服务器上正常运行。尽管如此,我还是很难想象连接超时可能是由SSL问题引起的。有人知道还有什么可能导致这个问题吗


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

不要只是虚构值,希望它能工作。Office365配置是bog标准配置,与gmail相同,不同于
Host
值,因此您的代码基于PHPMailer提供的


至于您在这里遇到的具体问题,我怀疑是
SMTPSecure='ssl'
无法与
Port=587
一起工作;对于端口587(显式TLS),您需要
SMTPSecure='TLS'

除了设置
TLS
而不是前面提到的
ssl
作为加密层之外,
$mail->From
需要显式指定,并且它应该与
$mail->Username
属性相同

下面是一个修改后的示例:


端口2525很奇怪,它似乎没有使用你设置的端口是的,那是我的错。我剪切并粘贴了以前的代码,然后使用不同的端口号尝试以确保安全,并从运行中捕获了错误。从您的服务器运行
telnet smtp.office365.com 587
查看您是否获得了连接您没有ssh访问服务器的权限。有点半盲。你在这方面运气好吗?我很感谢你的投入,我一直在使用你链接的例子。我也尝试过这两种协议,但仍然没有成功。在这种情况下,我猜您的ISP正在阻止出站SMTP。这很常见。在《故障排除指南》中有一些测试可供检查。感谢您的建议,但仍然没有成功。我仍然收到相同的“连接超时”错误。
$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';
}