2015-10-06 22 views
0

舞臺郵件異常的服務器

我有我最近部署了一個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(); 

回答

0

很難說出什麼問題。或者爲什麼它適用於您的開發環境。但快速谷歌搜索給了我smpt.yandex.com以下設置:

  • 郵件服務器地址 - smtp.yandex.com;
  • 連接安全 - SSL;
  • 端口 - 465

所以,它不應該在你的開發環境中工作。爲什麼它工作對我來說是個謎。

請參閱:https://yandex.com/support/mail/mail-clients.xml

+0

帶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超時' –

+0

我剛剛添加了我的工作PHPMailer代碼來提問。在**#4看到** –