Можно ли получить ответ Mail в Laravel после вызова метода Mail: to? Где лучше всего это сделать?
Mail::to($order->email)
->send(new ThankYouMail($order->fresh()));
Я использую Sendgrid в качестве драйвера Laravel Mail и хочу получить идентификатор сообщения, чтобы использовать его для последующих перехватчиков Sendgrid (получить статус доставки электронной почты и т. д.).
public function build()
{
$from = '[email protected]';
$subject = 'Thank You for Ordering';
$name = 'Name XYZ';
$order_id = (string)$this->order->id;
$headerData = [
'category' => 'Order',
'unique_args' => [
'OrderID' => $order_id
]
];
$header = $this->asString($headerData);
$this->withSwiftMessage(function ($message) use ($header) {
$message->getHeaders()
->addTextHeader('X-SMTPAPI', $header);
});
return $this->view('mails.thank-you')
->from($from, $name)
->replyTo($from, $name)
->subject($subject);
}
ОБНОВЛЕНИЕ: 25.06.2019
Если кто-то хочет получать и хранить почтовые статусы, лучшим решением будет использование Sendgrid Event Webhook.
ОБНОВЛЕНИЕ № 2: 21 января 2021 г.
Для получения данных из Sendgrid необходимо создать некоторую логику:
Маршрут:
Route::post('sendgrid/events','SendgridOrderEventController@store');
Контроллер:
/**
* Store a sendgrid event in database.
* @param App\Http\Requests\API\CreateSendgridOrderEventRequest $request
* @return Response
*/
public function store(CreateSendgridOrderEventRequest $request)
{
$sendgrid_request = $request->all()[0];
if ($sendgrid_request['OrderID']) {
$sendgrid_request['order_id'] = $sendgrid_request['OrderID'];
$sendgrid_request['sendgrid_timestamp'] = $sendgrid_request['timestamp'];
$sendgrid_request['sendgrid_message_id'] = $sendgrid_request['sg_message_id'];
$sendgridOrderEvent = SendgridOrderEvent::create($sendgrid_request);
}
return $this->sendResponse($sendgridOrderEvent, 'SendGrid Order Event created successfully');
}
На панели управления Sendgrid найдите настройки веб-перехватчиков и разместите конечную точку API POST: api.yourdomain.com/sendgrid/events после этого Sendgrid сможет генерировать события и отправлять запрос POST на конечную точку API, где ваша логика может получать и обрабатывать входящие данные.
Подробнее: https://sendgrid.com/docs/for-developers/tracking-events/event/
Эй, @Bill, проверь обновления моего вопроса;)






Прикрепите прослушиватель к ответу API sendgrid, а не к сборке.
Illuminate\Mail\Events\MessageSent отправляется после отправки почты [1]
Это событие отправляется с экземпляром экземпляра быстрого сообщения. [2]
Вы можете прослушать это событие и получить идентификатор сообщения.
На это событие можно подписаться, зарегистрировавшись в методе загрузки EventServiceProvider прослушивателя событий. [3]
protected $listen = [
'Illuminate\Mail\Events\MessageSent' => [
'App\Handlers\Events\MessageIdTranscript',
],
];
MessageIdTranscript — это простой класс PHP с методом handle, который вызывается вместе с событием. Экземпляры Swift_Message предоставляют идентификатор сообщения через общедоступный метод получения с именем getId.
namespace App\Handlers\Events;
use Illuminate\Mail\Events\MessageSent;
class MessageIdTranscript {
/**
* Handle the event.
*
* @param MessageSent $event
* @return void
*/
public function handle(MessageSent $event)
{
$messageId = $event->message->getId();
// continue handling...
}
}
Привет @SlavisaPetkovic Можете ли вы рассказать нам, как вы использовали веб-книгу событий SendGrid, чтобы получить больше информации об отправленном электронном письме? Я не нахожу примеров использования этого с Laravel/PHP. Спасибо