2017-02-01 12 views
2

Надеюсь, этот день вас хорошо поймет.Невозможно получить PhpMailer, работающий с Office 365

Я работаю над существующим 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'; 

Я посмотрел по всей сети, чтобы посмотреть, что я могу делать неправильно здесь. ISP-хостинг сайта говорит, что они ничего не блокируют, и Microsoft говорит, что я не настроил SSL правильно. Теперь предоставлено, я не эксперт в этой системе, у меня нет прямого доступа к серверу, и сам сайт необычно построен, и я не могу заставить его нормально работать на локальном сервере. Тем не менее, мне трудно думать, что таймаут соединения может быть вызван проблемой SSL. Есть ли у кого-нибудь идеи о том, что еще может вызвать эту проблему?

Редактировать: Как указывалось, порт в сообщении об ошибке не соответствует тому, что было в коде. Я пробовал несколько портов на основе того, что я читал, и каждый раз хватал текст из каждого раза.

+2

порт странным не кажется, 2525 есть, чтобы использовать порт, который вы установите – nogad

+0

Да, это был мой плохой. Я вырезал и вставил код с более раннего времени, а затем попробовал его с другим номером порта, чтобы быть уверенным, и схватил ошибку от этого прогона. –

+0

с вашего сервера запустите 'telnet smtp.office365.com 587', видите ли вы соединение – nogad

ответ

0

Не просто составляйте ценности и надейтесь, что это сработает. Конфигурация Office365 является болотным стандартом и идентична gmail, отличной от значения Host, поэтому укажите свой код на the gmail example с помощью PHPMailer.

Что касается конкретной проблемы, возникшей у вас здесь, я подозреваю, что SMTPSecure = 'ssl' не будет работать с Port = 587; для порта 587 (явный TLS) вам нужно SMTPSecure = 'tls'.

+0

Я ценю ввод, и я использовал пример, с которым вы связались. Также я пробовал оба протокола и до сих пор не повезло. –

+0

В этом случае я предполагаю, что ваш интернет-провайдер блокирует исходящий SMTP. Это очень распространено. Есть несколько тестов, которые вы можете сделать в руководстве по устранению неполадок, чтобы проверить это. – Synchro

0

В дополнение к установке tls вместо ssl в качестве шифрования слоя, как было упомянуто ранее, $mail->From должен явно указано, и она должна быть идентична $mail->Username собственности.

Вот модифицированный пример:

$mail = new PHPMailer(true); 
$mail-> IsSMTP(); 
$mail->Host  = "smtp.office365.com"; 
$mail->SMTPAuth = true; 
$mail->Username = "[email protected]"; 
$mail->Password = '[email protected]'; 
$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('[email protected]'); 


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

Спасибо за ваше предложение, но все равно не повезло. Я все равно получаю ту же ошибку «Connection timed out». –