Laravel 5メールを機能させる


154

URLを入力して特定のユーザーにメールを送信しようとしていますが、次のエラーが発生します。

AbstractSmtpTransport.php行383のSwift_TransportException:応答コード250が必要ですが、メッセージ "530 5.7.1認証が必要ですが、コード" 530 "を取得しました

これまでのところ、Gmailで使用できるようにしています。これを機能させるにはどうすればよいですか?

これは私がこれまでに持っているものです:mail.php

<?php
    return [
        'driver' => env('MAIL_DRIVER',' smtp'),
        'host' => env('MAIL_HOST', 'smtp.gmail.com'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' =>"MyUsername@gmail.com" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('MyUsername@gmail.com'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

これは私がルートに持っているものです:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('example@gmail.com', 'HisName')->subject('Welcome!');
    });
});

これは私が私のコントローラーに持っているものです:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}

そして、これは私の.envファイルにあるものです:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

4
テストにはmailtrap.ioを使用してください
ロール

mailtrap.io @rollのヒント
Ben Everard

mailtrap.ioを使用するとまったく同じエラーが発生しました
luisfer

回答:


243

私はそれが今あなたのために働いていることを知っています@ Vantheman6しかし、これは誰かのためにそれが同じである場合のために私のために働いたものです。

使用しているメールサービスの詳細を.envファイルに追加しました。したがって、次の詳細を確認してください

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

.envファイル内は正確です。

注:.envファイルを編集した後にサーバーを再起動することを忘れないでください。サーバーは、そこに配置した新しいデータを選択します。

サーバーを再起動しない場合、このエラーの原因となる変更を加えても、.envファイルは引き続き古いメールデータをアプリに提示します。


59
うわー、その「メモ」は私を救った。ENV変数が起動時にキャッシュされることを知りませんでした!
Gerben Jacobs

回答を更新して、構成ファイルの代わりに再起動サーバーを強調表示できますか?
mrwaim

2
@mrwaim、私はあなたが示唆しているものを取得していない限り、サーバーの再起動はノートで指定したものとまったく同じだと思いました。
Osei-Bonsu Christian

1
「メモ:」の前にすべてを削除することをお勧めします-以前のことではなく、メモの助けとなったもの。他のパーツを残しておきたい場合は、メモの後に付けてください。3人々は「ノート」のコメントに賛成したので、ノートもおそらく彼らを助けました。
mrwaim

22
以前に構成をキャッシュしている場合 php artisan config:cache、サーバーを再起動しても更新された構成は反映されません。もう一度実行php artisan config:cacheしてみてください
darronz

53

私の.envファイル構成は、laravel 5.1の場合は次のようになります

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls

ここで最も重要なことは、Gmailアプリケーション固有のパスワード(16桁)を作成したことです。

いずれの構成も運がないので、もう1つ明らかにする必要があります。つまり、.envファイルを変更したときはいつでも、このコマンドを実行する必要があります

php artisan config:cache

そして、これは最も重要です。このコマンドがないと、laravelはキャッシュから以前の設定を実行するからです。理解するのに10時間以上かかった。


1
php artisan cache:clearいつphp artisan config:cache私がそれを解決したのかを使い続けました。ありがとうございました!
timgavin、2015年

4
あなたのメモのために賛成票を投じましたphp artisan config:cache
darronz

35

設定ファイルのユーザー名とパスワードが正しく設定されていないため、認証エラーが発生しています。

これを変える:

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),

これに:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

このenvメソッドは、.envファイルをチェックします。.envファイルでこれらを呼び出すMAIL_USERNAMEので、envメソッドに渡す必要があります。

トラブルシューティングのヒント:実際に生成された構成をdd(Config::get('mail'));確認できるように追加します。これは、このような問題を特定し、Laravelが使用しようとする情報を正確に把握するのに役立ちます。そのため、テストルートで一時的に停止して、所有しているものを調べることができます。

Route::get('test', function()
{
    dd(Config::get('mail'));
});

だから私はあなたの提案を反映するように私のmail.phpファイルを変更しました `'username' => env( 'MAIL_USERNAME')`、そして'password' => env('MAIL_PASSWORD'), どこにでもあなたのメールアドレスとパスワードを入力するように指示するので私は興味深いと思います。まだエラーが発生しますSwift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required. I'm sorry but where do i actually place the " dd(Config::get('mail'));。Configディレクトリには多くのファイルが含まれています
Vantheman6

あなたの設定を調べる方法の例とともに、私の最新の回答を見てください。
jszobody 2015年

まだエラーが発生していますが、実際に何が行われているのかはわかります。何らかの理由で、メールphpで私が言っているにもかかわらず、 `" host "=>" mailtrap.io "`をenvに'host' => env('MAIL_HOST', 'smtp.gmail.com'),
渡そ

MAIL_HOST.envファイルを確認してください
jszobody '17年

それは正確です。 MAIL_HOST=smtp.gmail.com 最終的に私が行ったのは、mail.phpファイルの各部分からすべてのenvを削除することでした。そして今、正しい情報が通過しています。OMGありがとうございます。あなたは男です
Vantheman6 2015年

15

キャッシュをクリアすることで問題は解決します

php artisan config:cache

13

やっと得た!共有するだけで、.envだけではなく、より多くの構成があります。

これは.envです

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config / mail.phpも機能するためにアドレスと名前を入力する必要があります。

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

11

同じ問題が発生し、すべてをオンラインで試しても機能しない場合は、おそらく間違った情報を送信しているのは、設定キャッシュファイルです。これは、bootstrap / cache / config.phpにあります。そこに資格情報があることを確認してください。それを理解するのに一週間かかりました。これが誰かの役に立つことを願っています。


あなたは素晴らしいボルドーに値する、あなたに感謝します!そのファイルでユーザー名とパスワードが空であることに気づきましたが、2つの適切なファイルにそれらを入力した場合でも、そこから何をすべきかがわかりました!メルシー!
Gregordy

ありがとうございました!真剣に私は1時間デバッグしていましたが、これは何の問題もありませんでした!!! これ
Ahmad Alfy 2016

11

開発目的のために、https: //mailtrap.io/は、.envファイルに追加する必要があるすべての設定を提供します。例えば:

Host:   mailtrap.io
Port:   25 or 465 or 2525
Username:   cb1d1475bc6cce
Password:   7a330479c15f99
Auth:   PLAIN, LOGIN and CRAM-MD5
TLS:    Optional

それ以外の場合は、実装目的で、メールから.envファイルに追加されるsmtp資格情報を取得できます(gmail n allなど)。

追加後、必ずサーバーを再起動してください


追加後、必ずサーバーを再起動してください。この文で問題が解決しました。
ホスマーキュリー

8

それも私に起こります。

これは、.envファイルを編集するときにサーバーを再起動する必要があるためです。ただ電流php artisan serveを止めて、もう一度それを始めてください。これは確かに機能します。

それでもうまくいかない場合は、やってみてください php artisan config:cache


5

ここに来る人々への将来の参考のために。ここで3番目の回答で与えられたコマンドを実行した後(私は今Laravel 5.3を使用しています)。

php artisan config:cache

この問題が発生する可能性があります。

[ReflectionException]
Class view does not exist

その場合は、app.phpファイルの下のプロバイダーリストに手動で追加し直す必要があります。GO-TO:次の app->config->app.php->'providers[]'ように追加します。

Illuminate\View\ViewServiceProvider::class,

それが誰かを助けることを願っています。


4

同じ問題がありました。私MAIL_ENCRYPTIONtlsオンmail.phpでしたがnull.envファイルされていました。
だから私はに変えnulltlsそれがうまくいった!


これが事実でした!
夏期劇場

3

上記の解決策はどれも、localhostでは機能しませんでした。安全性の低いアプリからのアクセスを許可し、ディスプレイロック解除キャプチャを介してアクセスを許可し、SSLの検証ピアと検証ピア名をfalseに設定しました。

最終的に、私はMailHogのオープンソースSMTPテストソリューションを使用しました。手順は次のとおりです。

  1. お使いのOS用の最新バージョンのMailHogをダウンロード
  2. .envファイルで次の設定を指定します

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. MailHogのダウンロードしたファイルを実行します
  2. メールを送る
  3. localhost:8025に移動して、送信されたメールを確認します

3

これは単に、サーバーがSMTPサーバーにアクセスできないことを意味します。

これをテストするには、次のようにします。

telnet <smtpServer> <smtpPort>

アクセス拒否エラーが発生するはずです。

解決策は、サーバーからアクセスできる別のSMTPサーバーを使用することです。


2

サーバーを再起動して、次のコマンドを実行する必要があります。

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache

うまくいくはずです。


0

の結果dd(Config::get('mail'));がnullの場合は、次のコマンドを使用します

php artisan config:clear

0

.envファイルに変更を加えた後の私の意見では、サーバーを再起動してアプリを再度提供します。実際のエラーを確認するだけです。php artisanのクリアとキャッシュはその後かなりうまくいきます。


-1

私はあなたと同じ問題を抱えていました、私はそれを働かせました。

まず、.env設定が正しく設定されていることを再確認する必要があります。これが私の設定です:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls

パスワードが引用符で囲まれていないことを確認してください:)。

そして、config / mail.phpには、コメントなしで以下が含まれています。

<?php

return [

'driver' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', '587'),
'from' => ['address' => 'yourusername', 'name' => 'yourname'],
'encryption' => env('MAIL_ENCRYPTION','tls'),
'username' => env('MAIL_USERNAME', 'username@gmail.com'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

それがあなたのために働くことを願っています:)



-2
  1. あなたはMailgunに行きます
  2. [承認された受信者]をクリックします
  3. メールを送信するメールアドレスを追加します。
  4. メールに送信されたメッセージを確認します。
  5. ブラボー!...あなたは行ってもいいです。

2
私の無知を許してください。上記の答えは、質問のLaravel5 Eメール問題をどのように解決しますか?
jww 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.