[5.4] Dispatch Illuminate\Mail\Events\MessageSent event #18744
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related to proposal laravel/ideas#505. This PR dispatches a new
Illuminate\Mail\Events\MessageSent
event AFTER the message is actually sent (to the contrary ofMessageSending
which is dispatched BEFORE the message is sent).Pros:
MessageSent
is dispatched only if the message is successfully sent. It is not dispatched if the message isn't successfully sent (ie the Mailer throws an exception).$message
variable contains the message id (SES) / transmission id (SparkPost) that's set into the swift message's headers after the message is sent.I think the use case in the example from the official doc is a bit clumsy (https://laravel.com/docs/5.4/mail#events), because the listener for logging the message is executed whether the email is actually sent or not. There could be an error while actually sending the email (ex: network issue, temporary API error from Mandrill / SparkPost etc...) and
MessageSending
would still be triggered.MessageSent
would be a better fit for this use case, because when it's triggered it's guaranteed the message was actually sent.