2015-10-06 5 views
0

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(); 

ответ

0

Трудно сказать, в чем проблема. Или почему это работает в вашей среде разработки. Но быстрый поиск в Google дал мне следующие настройки для smpt.yandex.com:

  • адрес почтового сервера - smtp.yandex.com;
  • безопасность соединения - SSL;
  • порт - 465.

Таким образом, он не должен работать на среде Dev. Почему это работает, для меня это загадка.

см: https://yandex.com/support/mail/mail-clients.xml

+0

порт 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' –

+0

Я только что добавил свой рабочий код PHPMailer к вопросу. Посмотрите на ** # 4 ** –

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