Laravel Mail関数を使用してメールを送信しています。以下は私のapp/config/mail.php
ファイルの設定です。
'driver' => 'sendmail',
'Host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => '[email protected]', 'name' => 'MyName'),
'encryption' => 'tls',
'username' => 'myUsername',
'password' => "password",
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
コントローラーメール方式
//Send Mail
Mail::send('sendMail', array('key' => 'value'), function($message)
{
$message->to('[email protected]', 'Sender Name')->subject('Welcome!');
});
コードを実行すると、次のエラーメッセージが表示されます。
Swift_TransportException
応答コード220を予期していましたが、メッセージ「」を含むコード「」を取得しました
ビューにいくつかのデータを含むSendMail.php
ファイルを作成しました。
このエラーメッセージを解決するにはどうすればよいですか?
通常、この問題は、gmail
アカウントの2段階認証を有効にしない場合に発生する可能性があります(email
の送信に使用している(これは here で実行できます)。したがって、最初にtwo step verification
を有効にすると、2段階認証を有効にするための多くのリソースを見つけることができます。有効にしたら、app password
を作成する必要があります。 app password
ファイルで.env
を使用します。完了したら、.env
ファイルは次のようになります。
MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls
あなたのmail.php
<?php
return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'Host' => env('MAIL_Host', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => '<<your email>>', 'name' => '<<any name>>'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
];
その後、php artisan config:cache
およびphp artisan config:clear
を実行し、メールが機能することを確認してください。
私の場合、私は
MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=465 <<<<<<<------------------------- (FOCUS THIS)
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION= ssl <<<<<<<------------------------- (FOCUS THIS)
動作するように。コードの残りは@Sidが言ったものと同じでした。
そして、環境ファイルとapp/config/mail.phpの両方を編集する必要はないと思います。 1つの方法を使用してください。
@ Zanのコメントに従って編集
tls保護を有効にする必要がある場合は、次の設定を使用します。
MAIL_PORT=587
MAIL_ENCRYPTION= tls
他のGmail設定については here をご覧ください
助けたのは... sendmailパラメータを-bsから-tに変更したことです。
'sendmail' => '/your/sendmail/path -t',
Swift Mailerを使用している場合:行ったテストに基づいて、$ transport変数が以下のようになっていることを確認してください。このエラーは、sslとポートの設定ミスが原因です。 注:トランスポート変数に「ssl」または「tls」を含める必要があります。
サンプルコード:
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
->setUsername([email protected])
->setPassword(password)
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = (new Swift_Message('News Letter Subscription'))
->setFrom(['[email protected]' => 'A Name'])
->setTo(['[email protected]' => 'A Name'])
->setBody('your message body')
;
// Send the message
$result = $mailer->send($message);
私にとって問題はポートでした。最初に誤ってポート465を使用しました。これはSSL
では機能しますが、TLS
では機能しません。そのため、重要なことはポートを587に変更することでした。
更新後の環境は
MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<mygmailaddress>
MAIL_PASSWORD=<gmailpassword>
MAIL_ENCRYPTION=tls
これは2段階の検証なしで機能しました。 2段階認証を有効にすると、うまくいきませんでした。
このエラーメッセージは、応答がなかったORサーバーが接続できなかったことを意味します。
次の設定が私の目的で機能しました:
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
私のSMTP設定は次のとおりです。
MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=[full gmail address]
MAIL_PASSWORD=[App Password obtained after two step verification]
MAIL_ENCRYPTION=ssl