0

Я пытаюсь отправить электронное письмо через почтовый ящик PHP, и я терплю неудачу. Сообщение об ошибке, которое я получаю, выглядит следующим образом:PHP Mailer терпит неудачу на MS Exchange

2014-08-12 12:21:40 SMTP ERROR: Failed to connect to server: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. (10060) 2014-08-12 12:21:40 SMTP connect() failed. Mailer Error: SMTP connect() failed. 

Мой код выглядит следующим образом. Я не знаю, где я ошибаюсь. Я уверен, что вся информация верна, за исключением порта. Учитывая, что это использование обмена Майкрософт, я использую порт 587 - это, где я ошибаюсь?

<?php 
include("phpmailer/class.phpmailer.php"); 

$mail    = new PHPMailer();  
$body    = "HellooooO"; 

$mail->IsSMTP(); // telling the class to use SMTP 
$mail->SMTPSecure = "tls"; 
$mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
              // 1 = errors and messages 
              // 2 = messages only 
$mail->SMTPAuth = true;     
$mail->Host  = "My server name"; 
$mail->Port  = 587;      
$mail->Username = "My MS exchange email address"; 
$mail->Password = "Password";   

$mail->SetFrom('My MS exchange email address', 'First Last'); 

$mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication"; 

$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test 

$mail->MsgHTML($body); 

$address = "test email address"; 
$mail->AddAddress($address, "John Doe"); 



if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 

?> 

----------- EDIT -------------------

После замечания Synchro, что я не использую последней версии PHP Mailer, я внесла поправки в код следующим образом. Я по-прежнему не могу отправлять электронные письма, и сообщение об ошибке одно и то же ... Как проверить, открыт ли порт TLS и работает ли он?

<?php 
require 'phpmailer/PHPMailerAutoload.php'; 

$mail = new PHPMailer; 
$mail ->SMTPDebug = 1; 


$mail->isSMTP();          
$mail->Host = 'My Server'; 
$mail->Port = 587;  
$mail->SMTPAuth = true;        
$mail->Username = 'My email address';     
$mail->Password = 'My Password';       
$mail->SMTPSecure = 'tls';        

$mail->From = 'My email address'; 
$mail->FromName = 'Mailer'; 
$mail->addAddress('My Test Email address', 'Joe User');  


$mail->WordWrap = 50;         
$mail->isHTML(true);         
$mail->Subject = 'Here is the subject'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

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

С уважением и спасибо, Г.

+0

Убедитесь, что Порт правильно, обычно порт TLS - 465. – user3806621

+0

Благодарим вас за сообщение. Я изменил порт на 465, и это не решило проблему. – Noobster

+0

Порт TLS IS 587, а не 465. Это порт SSL, который был устаревшим, по крайней мере, с 1999 года. Вы используете старую версию PHPMailer. Вы вызываете 'msgHTML' * после * установки' AltBody', поэтому 'AltBody' будет перезаписан. Ошибка, которую вы видите, скорее всего, вызвана сбоем DNS, блокировкой брандмауэра или другой сетевой проблемой. – Synchro

ответ

0

Не уверен, если это было вылечить, однако это типичное поведение брандмауэра. Вы можете использовать что-то вроде Wireshark, чтобы узнать, получает ли сервер запрос.

Смежные вопросы