Stageпочты Исключение на сервере
У меня есть веб-приложение, которое я развернутую в последнее время. Приложение должно отправлять электронные письма по нескольким причинам.
Я использую почтовый сервис yandex для своего домена, имею много учетных записей электронной почты для своего домена, и я могу без проблем использовать эти адреса электронной почты.
Я написал код для отправки электронной почты на мое приложение Laravel, используя Laravel's Mail::send
. См. Ниже: # 2. И вы можете увидеть мои настройки config/mail.php
на # 1 ниже.
Я тестирую свое приложение на своем компьютере с Windows с WAMP-сервером.
Мой производственный сервер - это сервер VPS под управлением Linux. PHP версия 5.5.29.
Проблема
Все отлично работает на моем локальном тестовой среде; Я могу отправить почту, и они будут доставлены в hotmail, gmail или электронные письма моего домена без каких-либо проблем.
На сервере, однако, я получаю сообщение об ошибке при попытке отправить электронное письмо. См. # 3 за ошибки.
На том же сервере я могу отправлять электронные письма с помощью PHPMailer с теми же учетными записями электронной почты, настройками электронной почты и учетными данными и без каких-либо проблем.
Вопросы и мысли
Все работает на моей местной окружающей среды, как и ожидалось, и это заставляет меня думать, что это проблема с моей конфигурации сервера, PHP версии, конфигурации или расширений, но я не имею знания судите об этом.
Что есть я пытался и не работал
комментируемые эти строки для отправки электронной почты по умолчанию от почты. А также изменил мой адрес электронной почты по умолчанию на другой, который также работает везде, кроме производственного сервера этого проекта;
//$transport = Mail::getSwiftMailer()->getTransport();
//$transport->setUsername($username);
//$transport->setPassword($password);
Отключено шифрование почты. Задавать;
'encryption' => '',
Пробный другой драйвер;
'driver' => 'mail',
1) Моя конфигурация/почта.PHP
'driver' => 'smtp',
'host' => 'smtp.yandex.com',
'port' => 587,
'from' => ['address' => '[email protected]', 'name' => 'name'],
'encryption' => 'tls',
'username' => '[email protected]',
'password' => 'password',
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
2) Код я использую
Mail::send($message, $data, function ($message) use ($account, $to, $subject)
{
$acc = config("mail.accounts.$account");
$senderAddress = array_get($acc, 'address');
$username = array_get($acc, 'username', $senderAddress);
$password = array_get($acc, 'password', '');
$senderName = array_get($acc, 'name', $acc['address'], $senderAddress);
$replyToAddress = array_get($acc, 'replyTo.0', $senderAddress);
$replyToName = array_get($acc, 'replyTo.1', $senderName);
$message->from($senderAddress, $senderName)
->replyTo($replyToAddress, $replyToName)
->subject($subject)
->to($to);
$transport = Mail::getSwiftMailer()->getTransport();
$transport->setUsername($username);
$transport->setPassword($password);
});
Объяснения для кода выше: Этого код в основном позволяет мне отправлять электронную почту на любую учетную запись электронной почты, и от многих учетных записей электронной почты У меня есть. И, как я уже сказал, это отлично работает на моей локальной тестовой среде.
3) Ошибка
Swift_TransportException в AuthHandler.php линии 181: Не удалось выполнить аутентификацию на сервере SMTP с именем "[email protected]" с использованием 2 возможных аутентификаторы
4) Рабочий скрипт PHPMailer
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = "smtp.yandex.com";
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->Username = $sender; // SMTP account username
$mail->Password = $password; // SMTP account password
$mail->SetFrom($sender, 'Name');
$mail->AddReplyTo($sender, 'Name');
$mail->Subject = $subject;
$mail->MsgHTML($message);
$mail->AddAddress($to, $to);
$mail->Send();
порт 465 с SSL дает мне эту ошибку; 'Swift_TransportException в строке StreamBuffer.php 265: Невозможно установить соединение с узлом smtp.yandex.com [Невозможно найти перенос сокетов« SSL »- вы забыли включить его при настройке PHP? # 19362400] ' Порт 465 с TLS дает мне ошибку тайм-аута; 'Swift_TransportException в строке AbstractSmtpTransport.php 404: Подключение к tcp: //smtp.yandex.com: 465 Timed Out' –
Я только что добавил свой рабочий код PHPMailer к вопросу. Посмотрите на ** # 4 ** –