Вы должны использовать события Laravel Mail для сбора любых данных в базе данных.Это было бы общим местом для всех писем.Кроме того, он гарантирует, что вы будете срабатывать, когда почта находится в состоянии sending
или sent
.
Вот пример для сбора данных по отправленной электронной почте.
1.Создайте класс Listener с именем CaptureMailData
Like:
<?php
namespace App\Listeners;
Illuminate\Mail\Events\MessageSent;
class CaptureMailData
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param \Illuminate\Mail\Events\MessageSent $event
* @return void
*/
public function handle(MessageSent $event)
{
// Log the message
Log::info($event->message);
// Add your save functionality here.
}
}
2.Зарегистрируйте прослушиватель для получения события получения почты.
EventServiceProvider.php
protected $listen = [
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\CaptureMailData'
]
];
Отправка дополнительных данных:
Если вы хотите отправитьДополнение данных для захвата.Вы можете использовать withSwiftMessage()
для установки дополнительных данных с атрибутом сообщения.Как:
$user = User::first(); //any kind of data.
$this->withSwiftMessage(function ($message) use ($user) {
$message->user = $user;
});
И может получить доступ к дополнительным данным внутри CaptureMailData
слушателя как:
public function handle(MessageSending $mailEvent)
{
$user = $mailEvent->message->user;
Log::info($user); // just to log.
}
Вот ссылка для отправки дополнительных данных:
https://laracasts.com/discuss/channels/laravel/accessing-the-mailable-properties-from-the-messagesending-event-that-is-triggered-when-sending-mail-through-the-mail-facade