如何使用deliver_later(sidekiq)检索邮件的message_id

时间:2018-02-05 13:50:31

标签: ruby-on-rails smtp actionmailer sidekiq messageid

我想使用deliver_later(sidekiq)邮件的SMTP message_id。

我能够在deliver_now的return obj中获取id,但不能传递deliver_later。

my_action_mailer

中mail()函数的返回值中也缺少Message_id
  • 当我使用 -
  • 发送邮件时

sent_mail = some_mail().deliver_later

响应是一个sidekiq作业对象,看起来像这样 -

#<ActionMailer::DeliveryJob:0x007fefa1454780 @arguments=["xxxxxxx", "xxxxxxx", "deliver_now", xxxxxxx], @job_id="69b13253-55f9-4db9-a10a-0e8e4b998584", @queue_name="mailers", @priority=nil, @executions=0, @provider_job_id="6f75131d0c485534322cd728">
  • 当我使用 -
  • 发送邮件时

sent_mail = some_mail().deliver_now

响应是一个对象对象,看起来像这样 -

<Mail::Message:xx, Multipart: true, Headers: <Date: xx>, <From: "xx" <xx@xx.com>>, <Reply-To: "xx" <xx@xx.com>>, <To: ["xx@xx.com"]>, <Message-ID: <5a7863381167a_ba183fdfebc3f928907cb@xx-xx-xx.xx.mail>>, <Subject: xx>, <Mime-Version: 1.0>, <Content-Type: multipart/mixed; boundary="--==_mimepart_xx"; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>>

如果你仔细查看上面的输出,返回类是 Mail :: Message ,它包含&#34; 消息ID &# 34;,这就是我需要的。

  • 此外,当我们在我的邮件程序类中调用mail()函数时,它还会返回 Mail :: Message 对象,但此对象不包含从SMTP服务器返回的Message-ID。

我是否可以使用 deliver_later

获取消息ID

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但是我决定改用Mailgun HTTPS API,但要使用Sidekiq作业。

因此我将工作称为MailgunJob.perform_later(stuff_to_send)

在工作中

response = RestClient.post "https://mailgun_path", data
result = JSON.parse(response.body)
message_id = result['id']

您是否可以使用工作,并且在工作中内部使用deliver_now

如果您找到了更好的解决方案,可以在这里写出来吗?