phpmailer и php5.6 не работают с office365

У меня есть сайт, размещенный на RackSpace, и я обновил технологию своего сайта с php5.4 до php5.6. Теперь я больше не могу отправлять электронные письма с сайта. Хуже всего то, что я даже не получаю никаких ошибок, и журналы ничего не показывают. Я использую phpmailer 5.2.14.

Вот мой почтовый скрипт

require 'phpmailer/PHPMailerAutoload.php';
if (isset($_POST['contactForm'])) {
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$body = '
<html>
<body>
<div style="float:left; width:100%; margin:0 0 25px 0; padding:20px; background:#222; text-align:center;">
<div style="display:inline-block; vertical-align:top;">
<a href="http://website.com"><img src="img/logoEmail.png" alt="waesf"></a>
</div>
</div>
<main style="float:left; width:100%; padding:20px;">
<p style="font-family:Arial; font-size:18px;">'.$message.'</p>
</main>
</body>
</html>';
$mail = new PHPMailer;

$mail->SMTPDebug = 3;                                                         // Enable verbose debug output

$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isSMTP();                                                                // Set mailer to use SMTP
$mail->Host = 'smtp.office365.com';                                             // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                                                         // Enable SMTP authentication
$mail->Username = '[email protected]';                                 // SMTP username
$mail->Password = 'secret';                                                // SMTP password
$mail->SMTPSecure = 'tls';                                                      // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                                              // TCP port to connect to

$mail->SetFrom('[email protected]', 'Ballpoint Machinist');
$mail->AddAddress('[email protected]', "BPM");                         // Add a recipient
$mail->addReplyTo('[email protected]', 'Information');
// $mail->addCC('[email protected]');
// $mail->addBCC('[email protected]');

// $mail->addAttachment('/var/tmp/file.tar.gz');                                // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');                           // Optional name
$mail->isHTML(true);                                                            // Set email format to HTML

$mail->Subject = $subject;
$mail->Body    = $body;
$mail->AltBody = $body;

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

Когда скрипт запускает сайт, затем на некоторое время зависает, а затем выдает тайм-аут серверу говорит и больше ничего. Нет ошибок php кодов ничего и при проверке журналов нет ошибок, связанных с моим почтовым кодом. Однако это случается только с Office 365, когда я изменяю настройки SMTP на Gmail, тогда я по крайней мере получаю ошибки php на странице.

Я уже прочитал несколько тем на эту тему, но я не понимаю. Я также прошел https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting и добавил SMTPOptions для исключения ssl, но это не помогло.

Я озадачен тем, что я не получаю никаких ошибок. У меня SMTPDebug = 3 и error_reporting (E_ALL).

редактировать с предложением Вилли Пт. По-прежнему не работает, когда сценарий запускает время ожидания сервера.

if (isset($_POST['contactForm'])) {
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$body = '
<html>
<body>
<div style="float:left; width:100%; margin:0 0 25px 0; padding:20px; background:#222; text-align:center;">
<div style="display:inline-block; vertical-align:top;">
<a href="http://website.com"><img src="img/logoEmail.png" alt="Ballpoint Machinist"></a>
</div>
</div>
<main style="float:left; width:100%; padding:20px;">
<p style="font-family:Arial; font-size:18px;">'.$message.'</p>
</main>
</body>
</html>';
$mail = new PHPMailer(true);

// $mail->SMTPDebug = 4;                                                         // Enable verbose debug output

try {

$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isSMTP();                                                                // Set mailer to use SMTP
$mail->Host = 'smtp.office365.com';                                             // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                                                         // Enable SMTP authentication
$mail->Username = '[email protected]';                                 // SMTP username
$mail->Password = 'test';                                                // SMTP password
$mail->SMTPSecure = 'tls';                                                      // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                                              // TCP port to connect to

$mail->SetFrom('[email protected]', 'Ballpoint Machinist');
$mail->AddAddress('[email protected]', "BPM");                         // Add a recipient
$mail->addReplyTo('[email protected]', 'Information');
// $mail->addCC('[email protected]');
// $mail->addBCC('[email protected]');

// $mail->addAttachment('/var/tmp/file.tar.gz');                                // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');                           // Optional name
$mail->isHTML(true);                                                            // Set email format to HTML

$mail->Subject = $subject;
$mail->Body    = $body;
$mail->AltBody = $body;
$mail->send();
echo "Message Sent OK\n";
/*if (!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}*/} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
}
}

Кто-нибудь может помочь?

0

Решение

Не знаю, считается ли это ответом, но я смог заставить это работать с gmail. точно такой же код, просто используйте учетные данные Gmail и SMTP-хост вместо Office365. Мне нужно было настроить gmail, чтобы использовать менее безопасные приложения.

0

Другие решения

Проблема с PHP5.6 и самозаверяющей проверкой сертификата.
В PHP5.6 проверка сертификата включена по умолчанию, и сертификат не может быть самоподписанным.

Правильным решением проблемы является замена недействительного, неправильно настроенного или самозаверяющего сертификата на хороший.

Или настройте его на использование неподписанного сертификата:

$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);

Вы также можете изменить эти настройки глобально в вашем php.ini, но это действительно плохая идея; PHP 5.6 сделал это изменение по очень веским причинам.

Иногда это поведение не так очевидно; иногда сбои шифрования могут появиться как клиент, выдающий QUIT сразу после попытки сделать STARTTLS. Если вы видите, что это произошло, вы должны проверить состояние ваших сертификатов или настройки проверки.

0

По вопросам рекламы [email protected]