Wie versende ich E-Mails mit Google Mail in Laravel?


76

Ich versuche immer wieder, das Senden einer E-Mail von localhost zu testen, kann es aber immer noch nicht. Ich weiß nicht mehr, wie es geht. Ich versuche zu suchen, um eine Lösung zu finden, aber ich kann keine finden. Ich habe config / mail.php bearbeitet:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "ses", "log"
    |
    */

    'driver' => env('MAIL_DRIVER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    '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', 587),

    /*
    |--------------------------------------------------------------------------
    | 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' => 'myemail@gmail.com', 'name' => 'Do not Reply'],

    /*
    |--------------------------------------------------------------------------
    | 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'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

    /*
    |--------------------------------------------------------------------------
    | Mail "Pretend"
    |--------------------------------------------------------------------------
    |
    | When this option is enabled, e-mail will not actually be sent over the
    | web and will instead be written to your application's logs files so
    | you may inspect the message. This is great for local development.
    |
    */

    'pretend' => false,

];
`

und ich habe die .envDatei schon so bearbeitet :

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myemail@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=null

Es wurde immer noch ein Fehler wie folgt erzeugt: Geben Sie hier die Bildbeschreibung ein


Sie müssen hierfür ein App-Passwort erstellen. Haben Sie die Bestätigung in zwei Schritten für Ihr Google Mail-Konto aktiviert?
Sid

Entschuldigung, ich weiß es nicht. Also muss ich zuerst in meinem Google Mail-Konto aktivieren?
SRENG Khorn

@SRENGKhorn Ich bekomme auch den gleichen Fehler. Hast du eine Lösung dafür?
prudhvi259

@ prudhvi259 teste es mit mail gun mailgun.com
SRENG Khorn

Antworten:


138

Melden Sie sich zuerst bei Ihrem Google Mail-Konto an und klicken Sie unter " My account > Sign In And Security > Sign In to googleAktivieren" auf two step verification. Anschließend können app passwordSie das App-Kennwort in der .envDatei generieren und verwenden .

Ihre .envDatei sieht dann ungefähr so ​​aus

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myemail@gmail.com
MAIL_PASSWORD=apppassword
MAIL_ENCRYPTION=tls

Vergessen Sie nicht, php artisan config:cachedie .envDatei auszuführen, nachdem Sie Änderungen an Ihrer Datei vorgenommen haben.


Nachdem Sie Ihren Rat befolgt haben, ist Folgendes aufgetreten: Es konnte keine Verbindung mit dem Host smtp.gmail.com hergestellt werden. [Es wurde versucht, auf einen Socket auf eine Weise zuzugreifen, die durch seine Zugriffsberechtigungen verboten ist. # 10013]
SRENG Khorn

1
Verwenden Sie ein App-Passwort oder ein eigenes Google Mail-Passwort? oder wenn Sie eine Internet-Sicherheitssoftware wie norton, kasperskyusw. haben, deaktivieren Sie diese und testen Sie, ob das Senden einer E-Mail funktioniert oder nicht.
Sid

Ja, ich verwende das App-Passwort von Google und habe McAfee deaktiviert, aber es passiert nichts.
SRENG Khorn

2
Ich habe eine Lösung dafür. Ich hoffe, dass es funktionieren wird. Du brauchst immernoch? Gib mir Bescheid.
William Francis Gomes

1
Vergessen Sie nicht, Google Mail das Senden von E-Mails außerhalb von google.com/settings/security/lesssecureapps
Faris Rayhan


16

Alles was Sie tun müssen, ist nur in der Datei you.env zu bearbeiten, fertig.

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=<your_email_address>
MAIL_PASSWORD=<your_gmail_app_password_>
MAIL_ENCRYPTION=ssl

Für das App-Passwort gehen Sie zu https://support.google.com/accounts/answer/185833?hl=de

und erstellen Sie Ihr App-Passwort und speichern Sie es für die zukünftige Verwendung. Denn sobald Sie ein App-Passwort generiert haben, können Sie das Passwort nicht erneut bearbeiten oder dasselbe App-Passwort ändern (Sie können mehrere App-Passwörter erstellen).


13

Dies ist ein Arbeitsprobe, das ich ausprobiert habe:

Öffnen Sie den mail.phpunter configOrdner dann mit dieser Option füllen:

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

Öffnen Sie Ihre .envDatei unter rootProjekt. Bearbeiten Sie diese Datei auch wie oben beschrieben

MAIL_DRIVER=smtp    
MAIL_HOST=smtp.gmail.com   
MAIL_PORT=587      
MAIL_USERNAME=youremailusername
MAIL_PASSWORD=youremailpassword
MAIL_ENCRYPTION=tls

Danach löschen Sie Ihre Konfiguration, indem Sie diesen Befehl ausführen

php artisan config:cache

Starten Sie Ihren lokalen Server neu

Versuchen Sie, Ihre Route mit Controller zu besuchen, der beim ersten Mal eine Mail-Funktion enthält, die immer noch fehlerhaft ist Authentication Required. Sie müssen sich über Ihr Google Mail-Konto anmelden, um eine nicht vertrauenswürdige Verbindung zu autorisieren. Besuchen Sie diesen Link , um zu autorisieren


7

Wenn Sie nach dem Einstellen aller Konfigurationen immer noch E-Mails senden können und verbotene oder Timeout-Fehler erhalten, können Sie dies allow less secure apps to access your accountin Google Mail festlegen. Hier erfahren Sie, wie es geht


Ja, das ist die beste Lösung. Ich hatte alle vorherigen Einstellungen, konnte mich aber plötzlich nicht mehr anmelden. Es hat bei mir funktioniert, weniger sicheren Apps den Zugriff auf das Konto zu ermöglichen.
Peter

Ich bekam einen 535-5.7.8 Benutzernamen und Passwort nicht akzeptiert und dies löste mein Problem
Mauricio Trajano

3

Hinweis: Laravel 7 hat MAIL_DRIVER durch MAIL_MAILER ersetzt

MAIL_MAILER=smtp    
MAIL_HOST=smtp.gmail.com   
MAIL_PORT=587      
MAIL_USERNAME=yourgmailaddress
MAIL_PASSWORD=yourgmailpassword
MAIL_ENCRYPTION=tls

Zulassen weniger sicherer Apps über "Google-Konto" - https://myaccount.google.com/ - Einstellungen - Weniger sicherer App-Zugriff (Aktivieren)

Cache-Konfiguration leeren:

php artisan config:cache

Für Apache:

sudo service apache2 restart

1

Sie müssen zuerst das App-Passwort Ihres Google-Kontos -> Link zum Sicherheitsbereich aktivieren

Kopieren Sie dann das zu generierende App-Passwort und fügen Sie es in die ENV-Datei ein

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=account@gmail.com
MAIL_PASSWORD=app_password
MAIL_ENCRYPTION=ssl


0

Wenn Sie auf einem XAMPP entwickeln, benötigen Sie einen SMTP-Dienst, um die E-Mail zu senden. Versuchen Sie es mit einem MailGun-Konto. Es ist kostenlos und einfach zu bedienen.


0

Das Problem für mich ist, dass aus irgendeinem Grund der Benutzername / das Passwort von der Mail-Konfiguration NULL kam. So überprüfen Sie dies vor dem Senden einer E-Mail mit dem folgenden Code:

dd(Config::get('mail'));

Wenn Ihr Benutzername / Passwort auf Null gesetzt wurde, setzen Sie einfach Folgendes:

Config::set('mail.username', 'yourusername');
Config::set('mail.password', 'yourpassword');


0

Wenn Sie ein E-Mail-Passwort verwenden, sollten Sie es durch ein App-Passwort ersetzen. Um das APP-Passwort festzulegen, müssen Sie die zweistufige Authentifizierung aktivieren, bevor Sie ein Passwort festlegen, das später deaktiviert werden kann.

Stellen Sie außerdem sicher, dass Sie im Einstellungsbereich eine weniger sichere App zugelassen haben. Weitere Informationen finden Sie hier


0

Ich arbeite für mich, nachdem ich verschiedene Kombinationen ausprobiert habe.

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=mail@gmail.com
MAIL_PASSWORD=passowrd
MAIL_ENCRYPTION=ssl

Es ist erforderlich, das Anwendungskennwort https://myaccount.google.com/security und uns als MAIL_PASSWORDUmgebungsvariable zu generieren .

Ich habe dies herausgefunden, indem ich den Fehlercode von Google Server überprüft habe, der voll genutzt wurde und mich zu dieser Webseite geführt hat.


0

Sie können auch versuchen, diese beiden Zeilen zu laravel hinzuzufügen:

MAIL_FROM_ADDRESS=you@email.com
MAIL_FROM_NAME="you@email.com"

Führen Sie danach diesen Befehl aus, um die Mail-Cache-Konfiguration zu leeren:

php artisan config:cache

0

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourmail@gmail.com
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME='Name'

Ermöglichen Sie weniger sicheren Apps den Zugriff auf Ihr Konto in der Google Mail-Sicherheitseinstellung.


0

Verwenden eines G Suite-Kontos

Wenn Sie ein G Suite-Konto verwenden, schlägt alles fehl, was Sie versuchen. Zumindest zur Zeit wird diese Antwort getippt. Sie müssen @gmail.comKonto verwenden, alles andere @example.comwird nicht funktionieren.

Nachdem Sie die gmail.comAdresse verwendet haben. Sie müssen nur aktualisieren, .envda die meisten der bereits erwähnten Personen.

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=****@gmail.com
MAIL_PASSWORD=16digitapppassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=****@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

Vergessen Sie nicht, ein App-Passwort zu erstellen . Wenn Sie die Option nicht sehen, ist Ihre 2-Faktor-Authentifizierung wahrscheinlich nicht aktiviert. Wenn Sie diesem Ansatz folgen, müssen Sie keine weniger sicheren Apps zulassen.


-1

Ändern Sie einfach MAIL_ENCRYPTION = null in MAIL_ENCRYPTION = tls

Und führen Sie diesen Befehl "php artisan config: cache" aus

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.