パスワードリセットメールを送信しようとすると、Laravel 5.1 Homesteadの標準メール設定でこのエラーが発生します。
Swift_TransportException in AbstractSmtpTransport.php line 162:Cannot send message without a sender address
アドレスはapp/config/mail.phpに入力されます:
'from' => array('address' => '[email protected]', 'name' => 'hawle'),
.env
ファイルで、メールアカウントのメールアドレスとパスワードを設定する必要があります。また、使用しているメールサーバーのホストとポートを設定する必要があります。
MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=25
MAIL_USERNAME= ***USER NAME***
MAIL_PASSWORD= ***PASSWORD***
MAIL_ENCRYPTION=tls
または、mail.php
ファイルですべてが完了していることを確認してください(下記の注を参照)。
'Host' => env('MAIL_Host', 'smtp.gmail.com'),
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the Host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'port' => env('MAIL_PORT', 25),
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => ['address' => '[email protected]', 'name' => 'hawle'],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
注:.env
ファイルを使用することをお勧めします。実稼働環境では異なる構成になる可能性が高いためです。
すべてが完了しても動作しない場合は、キャッシュにある可能性があります。これで設定キャッシュをクリアできます:
php artisan config:cache
また注意してください:
mail.php
ファイルは/app/config/mail.php
にあります(OPによると)。.env
ファイルはプロジェクトのルートにあります。Viktorminatorが述べたように:アプリのパスワードを作成し、このニーズに通常のパスを使用しないことを考慮してください。パスワードを作成するためのリンク myaccount.google.com/apppasswords
App/config/mail.phpに「from」が設定されていることを確認してください
'from' => ['address' => '[email protected]', 'name' => 'myname']
問題が解決します。
.envファイルにアクセスできない場合、次のようにapp/config/mail.phpのenv呼び出しにデフォルト値を追加できます。
'from' => ['address' => env('MAIL_FROM_EMAIL','[email protected]'), 'name' => env('MAIL_FROM_NAME','SpongeBob')],
このアプローチでは、.envファイルからデータを取得しようとします。何も存在しない場合は、デフォルトで設定したものが使用されます。
エラーは引き続き発生しました。設定後およびコマンドの実行
php artisan view:clear;
php artisan config:cache;
php artisan cache:clear;
php artisan route:cache;
コードを確認してください
\Illuminate\Support\Facades\Mail::send('layouts.mail', [ 'content' => 'testmail'], function ($m) use ($msg2){
$m->from('[email protected]', 'ABC');
// this line was env('MAIL_FROM_ADDRESS') ; cant read from .env
$m->to('[email protected]', 'XYZ')->subject('TestMailSubject!');
...