web-dev-qa-db-ja.com

Laravel + Swift Mailer:エラー:有効な受信者がいません

注:これは悲しいことに 重複 ではありません。私はすでにそこに記載されているすべてを試しました。

Laravel/Swiftmailerを使用してメールサーバーへの接続を設定しようとしました。私の.envのMailingセクションは次のようになります。

MAIL_DRIVER=smtp
MAIL_Host=<THE MAILHOST>
MAIL_PORT=465
MAIL_USERNAME=<THE USERNAME>
MAIL_PASSWORD=<THE PASSWORD>
MAIL_ENCRYPTION=ssl

個人情報は明らかな理由で検閲されますが、構成は機能します。私はThunderbirdでこの構成のサーバーに接続してテストしましたが、それは魅力のように機能します。

これが私がメイラブルと呼ぶ場所です:

   public function from_id(string $id): User
   {
         .
         .
         .
        Mail::to(<WORKING EMAIL ADRESS>)->send(new OrderShipped());
    }

これは、メイラブルがどのように見えるかです(基本的にはlaravel docsからの例です):

   public function build()
   {
      return $this->view('email_templates.simple_test');
   }

私はコードをデバッグしましたが、実際には2つの例外がスローされています。後者のみを示します。

応答コード250/251/252が必要ですが、メッセージ "554 5.7.1:拒否された受信者アドレス:アクセスが拒否されました"とともにコード "554"を取得しました

応答コード354が予期されていましたが、メッセージ「554 5.5.1エラー:有効な受信者がありません」とともにコード「554」を受け取りました

完全に機能するメールサーバーからThunderbird経由で<WORKING EMAIL ADRESS>にメールを送信しようとしましたが、メールはほんの一瞬で送受信され、問題やエラーは発生しませんでした。基本的に、まったく同じシナリオを別のツールで再現しようとしました。したがって、私の見解では、エラーはコードベースにあるはずです。

前もって感謝します

2
mapawa

私の設定は少し奇妙に見えます。以下の構文で試してください(ここで私は$_orderObject注文の詳細を表すプレースホルダーとしての変数):

app/Mail/OrderShipped.php

<?php

namespace App\Mail;

use Illuminate\Mail\Mailable;

class OrderShipped extends Mailable
{
    protected $_name;
    protected $_orderObject;

    public function __construct($name, $order)
    {
        $this->_name = $name;
        $this->_orderObject = $order
    }

    public function build ()
    {
        return $this->to (<CONFIRMED WORKING EMAIL>)
                    ->subject ('New Order!')
                    ->view ('email_templates.simple_test')
                    ->with ([
                       'name' => $this->_name,
                       'order' => $this->_orderObject
                    ]);
    }
}

//それを呼び出す

   public function from_id(string $id): User
   {
        $name = << $this->getUserNameById ($id) >> // fake method
        $orderObject = << $this->getLatestOrderByUserId($id) >> // fake method

        Mail::send(new OrderShipped($name, $orderObject));
    }
0
UUake Up

STARTTLSが必要か、TLSだけが必要かをシステム管理者に確認する必要があります。

STARTTLSはプレーンな接続を開始してからセキュアなTLS「チャネル」に切り替えます。TLSはセキュアな接続に直接接続しますが、互換性は低くなります。

答えがSTARTTLSの場合はポート587を使用します。それ以外の場合はポートを保持しますが、システム管理者に確認します

別の理由としては、アカウントが禁止されたか、IPがブロックされたことが考えられます

0
Emiliano