Используя драйвер 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');
    });
}