舞臺郵件異常的服務器
我有我最近部署了一個Web應用程序。應用程序需要發送電子郵件的原因有幾個。
我使用yandex業務電子郵件服務爲我的域名,有許多電子郵件帳戶爲我的域名,我可以使用這些電子郵件地址沒有任何問題。
我寫了一些代碼,用Laravel的Mail::send
在我的Laravel應用程序上發送電子郵件。請參閱下面的#2。你可以看到我的config/mail.php
設置在#1下面。
我正在使用WAMP服務器在Windows計算機上測試我的應用程序。
我的生產服務器是運行Linux的VPS服務器。 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: 無法與用戶名 「[email protected]」 使用SMTP服務器上進行驗證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();
帶SSL的端口465給了我這個錯誤; StreamBuffer.php中的Swift_TransportException行265: 無法與主機建立連接smtp.yandex.com [無法找到套接字傳輸「SSL」 - 您是否忘記在配置PHP時啓用它? #19362400]' 帶有TLS的端口465給我超時錯誤; 'AbstractSmtpTransport.php中的Swift_TransportException行404: 連接到tcp://smtp.yandex.com:465超時' –
我剛剛添加了我的工作PHPMailer代碼來提問。在**#4看到** –