Як відправляти пошту за допомогою gmail у Laravel?


80

Я намагаюся знову і знову перевірити надсилання електронного листа з localhost, але все ще не можу. Я вже не знаю, як це зробити. Я намагаюся шукати рішення, але не можу знайти його. Я відредагував config / mail.php:

<?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,

];
`

і я вже редагував такий .envфайл:

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

Це все одно викликало помилку, як це введіть тут опис зображення


вам потрібно створити пароль програми для цього .. чи ввімкнули ви двоетапну перевірку для свого облікового запису Gmail?
Сід

Вибачте, я не знаю. Отже, нам потрібно спочатку увімкнути свій акаунт gmail?
SRENG Khorn

@SRENGKhorn iam також отримує ту ж помилку. Ви отримали рішення для цього?
prudhvi259

@ prudhvi259 перевірити це за допомогою поштового пістолета mailgun.com
SRENG Khorn

Відповіді:


142

спочатку увійдіть у свій обліковий запис gmail і під My account > Sign In And Security > Sign In to google, увімкніть two step verification, потім ви зможете згенерувати app passwordі можете використовувати цей пароль програми у .envфайлі.

.envТоді ваш файл виглядатиме приблизно так

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

Не забудьте запустити php artisan config:cacheпісля внесення змін у .envфайл.


Після дотримання вашої поради це сталося: Не вдалося встановити з'єднання з хостом smtp.gmail.com [Була зроблена спроба отримати доступ до сокета способом, забороненим його правами доступу. # 10013]
SRENG Khorn

1
Ви використовуєте пароль програми або власний пароль Gmail? або якщо у вас є будь-яке програмне забезпечення для захисту Інтернету, наприклад norton, kasperskyтощо, вимкніть його та перевірте, чи працює надсилання електронного листа чи ні.
Сід

Так, я використовую пароль програми від Google, і я вимкнув McAfee, але нічого не сталося.
SRENG Khorn

2
У мене є рішення для цього. Сподіваюся, це спрацює. Вам все ще потрібно? Дай мені знати.
Вільям Френсіс Гомес

1
не забудьте дозволити gmail надсилати повідомлення електронної пошти за межами google.com/settings/security/lesssecureapps
Фаріс Райхан


17

Все, що вам потрібно зробити, це просто відредагувати у файлі you.env, і все.

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

для пароля програми перейдіть до https://support.google.com/accounts/answer/185833?hl=uk

і згенеруйте пароль програми та збережіть для подальшого використання. тому що, як тільки ви згенеруєте пароль програми, ви не зможете змінити пароль або змінити той самий пароль програми (ви можете створити кілька паролів програми)


чим відрізняється ssl від tls?
Ray Coder

Я виявив, що ssl спрямовує електронну пошту на спам, але tls ні
Ray Coder

15

Це робочий зразок, який я спробував:

Відкрийте папку mail.phpunder, configа потім заповніть цю опцію:

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

Відкрийте .envфайл у rootпроекті. Також відредагуйте цей файл, дотримуючись наведеного вище параметра

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

Після цього очистіть конфігурацію, запустивши цю команду

php artisan config:cache

Перезапустіть локальний сервер

Спробуйте відвідати свій маршрут із контролером, що містить функцію пошти, спочатку це все ще помилка Authentication Required. Вам потрібно ввійти через свій обліковий запис gmail, щоб авторизувати ненадійне з’єднання. Перейдіть за цим посиланням, щоб авторизуватися


7

якщо ви все ще зможете надсилати пошту після правильного налаштування всіх налаштувань і отримувати заборонені або помилки очікування, ви можете встановити allow less secure apps to access your accountв gmail. Ви можете стежити, як тут


Так, це найкраще рішення. У мене були всі попередні налаштування, але раптом я більше не міг увійти. Дозвіл менш безпечним програмам отримувати доступ до облікового запису спрацював для мене.
Пітер

Я отримував ім’я користувача та пароль 535-5.7.8, які не приймаються, і це вирішило мою проблему
Mauricio Trajano

3

Примітка: Laravel 7 замінив MAIL_DRIVER на MAIL_MAILER

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

Дозволити менш безпечні програми з "Облікового запису Google" - https://myaccount.google.com/ - Налаштування - Менш безпечний доступ до додатків (увімкнути)

Конфігурація кеш-пам’яті:

php artisan config:cache

Для апачів:

sudo service apache2 restart

1

вам потрібно спочатку увімкнути пароль програми для вашого облікового запису Google -> посилання розділу безпеки

тоді пароль програми, який буде створений, скопіюйте його та вставте у файл .env

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

0

ваш MAIL_PASSWORD=must a APPpasword після того, як змінити .env зупинити сервер потім очистити configuratios cahce PHP майстрових конфігурації: cahce і знову запустити сервер

посилання Не вдається надіслати повідомлення без адреси відправника в laravel 5.2. Я встановив і .env, і mail.php


0

Якщо ви розробляєте XAMPP, вам знадобиться служба SMTP для надсилання електронного листа. Спробуйте скористатися обліковим записом MailGun. Він безкоштовний і простий у використанні.


0

Проблема для мене полягає в тому, що з якихось причин ім'я користувача / пароль надійшло NULL із поштової конфігурації. Щоб перевірити, що перед надсиланням електронного листа перевірте наступний код:

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

Якщо ваше ім’я користувача / пароль було обнулено, просто встановіть:

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


0

Якщо ви використовуєте пароль електронної пошти, вам слід замінити його паролем програми. Для встановлення пароля додатка потрібно ввімкнути двоетапну автентифікацію перед встановленням пароля, який можна буде відключити пізніше.

Також переконайтеся, що ви дозволили менш безпечний додаток у розділі налаштувань. Для отримання додаткової інформації ви можете дізнатися, як тут


0

Працюючи на мене після випробування різних комбінацій.

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

Потрібно згенерувати пароль програми https://myaccount.google.com/security та використовувати його як MAIL_PASSWORDзмінну середовища.

Я дізнався про це, перевіривши код помилки із сервера Google, який був повноцінним, і привів мене до цієї веб-сторінки.


0

Ви також можете спробувати додати до laravel ці 2 рядки:

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

Після цього запустіть цей команд, щоб очистити конфігурацію кешу пошти:

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'

дозволити менш безпечним програмам отримувати доступ до вашого облікового запису в налаштуваннях безпеки Gmail.


0

Використання облікового запису G Suite

Якщо ви використовуєте обліковий запис G Suite, все, що ви спробуєте, не вдасться. Принаймні в цей час цю відповідь набирають. Ви повинні використовувати @gmail.comакаунт, все інше, наприклад @example.com, не буде працювати.

Після використання gmail.comадреси. Вам просто потрібно оновити, .envяк і більшість людей, про яких уже згадувалося.

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}"

Не забудьте створити пароль програми , якщо ви не бачите опції, можливо, ваша 2-факторна автентифікація не ввімкнена. І немає необхідності дозволяти менш безпечні програми, якщо ви дотримуєтесь цього підходу.


-1

Просто змініть MAIL_ENCRYPTION = null на MAIL_ENCRYPTION = tls

І запустіть цю команду "php artisan config: cache"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.