我希望那一天能找到你。
我在现有的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问题可能导致连接超时。有没有人知道还有什么可能导致这个问题呢?
编辑:正如所指出的,错误消息中的端口与代码中的端口不匹配。我根据我读过的内容尝试了几个端口,并在不同时间从每个端口抓取文本。
答案 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';
}