【问题标题】:How retrieve Mailgun Delivered Message in Laravel如何在 Laravel 中检索 Mailgun 传递的消息
【发布时间】:2020-04-03 19:02:06
【问题描述】:

在我的 Node.js 应用程序中,我按照 Mailgun 文档 https://documentation.mailgun.com/en/latest/quickstart-sending.html#send-with-smtp-or-api 发送类似于以下内容的电子邮件:

mailgun.messages().send(data, (error, body) => {
  console.log(body);

// body is {id: some_mailgun_built_id, message: 'Queued. Thank You'}
// which I store the body.id in my database

});

我面临的问题是,当我使用 Laravel 发送电子邮件时,如何访问相同的 Mailgun 响应? Mailgun 文档没有提供任何示例来说明如何检索该数据。

这就是我使用 Laravel 发送电子邮件的方式:

\Mail::to($recipients)->send(
  // this just renders my blade file which formats my email
  new SendEmail($email);
);
// ?? How to get Message was sent object here

如果有人知道任何解决方案,将不胜感激!

【问题讨论】:

    标签: php laravel mailgun


    【解决方案1】:

    您好,欢迎来到 SO!

    Laravel 有两个电子邮件事件,如 official documentation 中所述:MessageSendingMessageSent

    您可以关注events official documentation 以监听这些特定事件:

    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'Illuminate\Mail\Events\MessageSending' => [
            'My\Email\Listener',
        ],
        'Illuminate\Mail\Events\MessageSent' => [
            'My\Other\Listener',
        ],
    ];
    

    您将收到 Swift_message 作为输入,其中包含一个标题,即您正在寻找的 Mailgun ID。让我们看一下MailgunTransport@send 源代码,以了解幕后发生的事情:

    /**
     * {@inheritdoc}
     */
    public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null)
    {
         // [...]
    
         $response = $this->client->request(
             'POST',
             "https://{$this->endpoint}/v3/{$this->domain}/messages.mime",
             $this->payload($message, $to)
         );
    
         $message->getHeaders()->addTextHeader(
             'X-Mailgun-Message-ID', $this->getMessageId($response) // <-- HERE LARAVEL SETS THE MESSAGE ID
         );
    
         // [...]
    }
    

    在您的侦听器中寻找相同的键,您可以恢复 mailgun 分配给您的电子邮件的消息 ID。不幸的是,您无法访问整个 Mailgun 响应,但使用 API,您可以轻松检索您的消息。

    【讨论】:

    • 谢谢,我会试一试!
    • $this->payload 方法是指什么?那是 Guzzle 的一部分吗?
    • 它指的是MailgunTransport类的this method。它只是“美化”了响应。
    • 好的,我明白了。这似乎是一个愚蠢的问题,但我如何使用 MailgunTransport 类,并更改我的应用程序以使用它。由于目前我的应用程序使用 Mail Facade,然后调用 Illuminate\Mail\Mailer 来发送电子邮件,我不知道如何更改它。
    • 我只是将它注入到我的事件侦听器类中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多