Подтвердить что ты не робот

Laravel не отправляет электронную почту и не дает ошибок

Я работаю над проектом в течение последних четырех месяцев, и я действительно злюсь на то, с чем сейчас сталкиваюсь с Laravel. Это не отправка писем; Я настроил его на использование почтового драйвера и установил правильный код, но, похоже, он вообще не работает. Кроме того, не работает, это даже не дает мне ошибку!

Вот моя конфигурация:

return array(

/*
|--------------------------------------------------------------------------
| Mail Driver
|--------------------------------------------------------------------------
|
| Laravel supports both SMTP and PHP "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"
|
*/

'driver' => 'mail',

/*
|--------------------------------------------------------------------------
| 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 Postmark mail service, which will provide reliable delivery.
|
*/

'host' => 'smtp.mailgun.org',

/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to delivery e-mails to
| users of your application. Like the host we have set this value to
| stay compatible with the Postmark e-mail application by default.
|
*/

'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' => array('address' => null, 'name' => null),

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

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

/*
|--------------------------------------------------------------------------
| 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 logs files so
| you may inspect the message. This is great for local development.
|
*/

'pretend' => false,

);

Вот мой PHP-код для отправки электронной почты:

$data["mail_message"] = "Hello!";

    Mail::send('emails.welcome', $data, function($message)
    {
        $message
            ->to('[email protected]')
            ->from('[email protected]')
            ->subject('TEST');
    });
4b9b3361

Ответ 1

Прежде всего, перейдите в приложение /config/mail.php и измените драйвер на "mail". Также поставьте хост как пустой.

Ответ 2

В моем сценарии электронная почта была поставлена в очередь, поэтому я ничего не получила. Я забыл установить электронную почту в очередь по умолчанию. Я заглянул в таблицу Джобса и увидел все мои сообщения, ожидающие там. Я запустил php artisan queue:work, чтобы запустить/отправить очередь.

Ответ 3

Перейдите в файл .env и установите

MAIL_DRIVER=smtp

Или вы можете установить драйвер из файлов конфигурации. Перейти к файлу Laravel 4: приложение /config/mail.php Laravel 5: config/mail.php и установите

'driver' => 'smtp',

Вы можете использовать SMTP. Надеюсь, это поможет.

Ответ 4

Это может быть потому, что у вас есть файл ".env" в корне проекта Laravel с конфигурацией почтового сервера следующим образом:

...
MAIL_DRIVER=mail
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Кажется, что файл ".env" просто переопределяет файл "config/mail.php". Вы можете просто удалить те же строки из файла ".env" для использования параметров конфигурации "config/mail.php".

Ответ 5

Исправление, которое работало для меня

  1. В вашем файле .env измените APP_URL=127.0.01 на APP_URL=http://localhost
  2. Правильно настройте данные SMTP и выполните config:cache, затем перезапустите сервер.

После этого моя почта начала отправлять!

Как я прибыл на это исправление

Я ранее задал свои SMTP-данные правильно, но даже после настройки config: cache config: очистить и перезагрузить мой сервер, электронные письма не отправлялись. После этого я сравнил его с моим рабочим приложением Laravel, и единственное отличие было 127.0.0.1 → http://localhost, поэтому я изменил это как последнюю попытку канава, и это сработало.

Ответ 6

Решение для уведомлений, не отправленных по почте,

https://laravel.com/docs/5.7/notifications#customizing-the-recipient

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * Route notifications for the mail channel.
     *
     * @param  \Illuminate\Notifications\Notification  $notification
     * @return string
     */
    public function routeNotificationForMail($notification)
    {
        return $this->email_address;
    }
}

Ответ 7

Файл конфигурации:

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.gmail.com 
MAIL_PORT=587 
[email protected] 
MAIL_PASSWORD=xxxxxxxxxx 
MAIL_ENCRYPTION=tls

Затем выполните команду make:mail :

public function build(Request $request)
{
    return $this->view('mail['variable'=>$request->message])->to($request->to);
}

Маршруты:

Route::post('send', '[email protected]');
Route::get('email', '[email protected]');

Контроллер:

public function send()
{
    Mail::send(new name());
}

public function email()
{
    return view('email');
}

Вид:

<body><br><h1>Send Mail</h1><form method="post" action="send">to:<input type="text" name="to">message: <input type="text"  name="message" cols="30" rows="10"></input><input type="submit" name="submit" value="send"></form></body>

Mail:

<body><h1>Welcome, to this mail system, </h1>{!! $variable !!}</body>

Важно помнить: переменная message является встроенной переменной и генерирует ошибку, поэтому используйте любую другую переменную вместо message.

Больше деталей:

Ответ 8

Измените драйвер в вашем файле конфигурации на "smtp" с "mail". Думаю, это должно сработать.

Ответ 9

Наконец-то я получил его на работу. Если вы используете mailgun, добавьте эту информацию ниже в свой .env файл

MAILGUN_DOMAIN=your.mailgundomain.com
MAILGUN_SECRET=key-yourmailgunkey

а затем запустите

php artisan config:clear

Ответ 10

бежать как

Mail::raw( 'mail_content' , function ($message) {
            $message->to(...)
            ->subject('Hi, welcome user!');
        });

Ответ 11

Не технический ответ, но он решил мою проблему.

Если вы используете GMAIL для проверки входящей почты, просто проверьте папку СПАМ.