Используя драйвер Laravel Mailgun, как вы (изящно) отправляете свои данные и теги с помощью своей электронной почты?
Поэтому я использую Laravel 5.1 и пытаюсь интегрироваться с Mailgun. Ну, это легко, но теперь я пытаюсь отправить пользовательские переменные из моего приложения вместе с моими сообщениями.
Я фактически пересылаю наше приложение из Mandrill из-за их "нового направления" и т.д. С ними я могу предоставить переменные и теги через заголовки электронной почты, но с Mailgun, который работает только при отправке через SMTP. В Laravel Mail::send()
используется вызов API, поэтому теоретически я бы добавил туда метаданные с "v:my-custom-data" => "{"this_id": 123}"
, но я бы хотел избежать изменения таких основных классов.
Я также рассмотрел использование Bogardo/Mailgun, но тогда мне пришлось бы заменить все Mail::send()
на Mailgun::send()
, а затем Я не мог отправлять электронные письма локально (драйвер электронной почты, основанный на среде), а затем приложение будет "выходить замуж" за Mailgun.
Кто-нибудь сделал это раньше? Пожалуйста, дайте мне знать, если я не понимаю здесь.
Ответы
Ответ 1
Я исправил свою проблему. Я был неправ, ВЫ МОЖЕТЕ добавить пользовательские переменные с помощью метода SMTP:
// Send email with custom variables and tags in Laravel
Mail::send('emails.blank',
['html' => 'This is a test of Mailgun. <strong>How did it work out?</strong>'],
function($message) {
$message->to('[email protected]');
$message->subject('Mailgun API Test');
$headers = $message->getHeaders();
$headers->addTextHeader('X-Mailgun-Variables', '{"msg_id": "666", "my_campaign_id": 1313}');
$headers->addTextHeader('X-Mailgun-Tag', 'test-tag');
});
Мое тестирование было просто неадекватным. Очень полезно знать, однако я считаю, что это недокументированная функция, поэтому я предлагаю использовать с осторожностью.
Ответ 2
Вы можете просто сделать это в Laravel 5:
Mail::send(['text' => 'my_template'], $data, function ($message) {
..
$message->getSwiftMessage()->getHeaders()->addTextHeader('X-Mailgun-Tag', 'my-tag');
});
Ответ 3
Обновление для Laravel 5. 4+
Как вы можете прочитать в официальных документах:
withSwiftMessage
метод Mailable
к Mailable
по Mailable
базового класса позволяет зарегистрировать функцию обратного вызова, которая будет вызываться с экземпляром сообщения сырого SwiftMailer перед отправкой сообщения. Это дает вам возможность настроить сообщение до его доставки:
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$this->view('emails.orders.shipped');
$this->withSwiftMessage(function ($message) {
$message->getHeaders()
->addTextHeader('Custom-Header', 'HeaderValue');
});
}
Ответ 4
Реализация драйвера Mailgun в Laravel не поддерживает опции/параметры.
Вот Gist, который добавляет поддержку родного драйвера: https://gist.github.com/j0um/27df29e165a1c1e0634a8dee2122db99