简述
如何跟踪由deliver_later
入队的邮件以及它们的投递状态?
详情
我想使用Action Mailer中的deliver_later
异步发送一堆电子邮件。这个功能可以正常工作,通过使用wait:
参数可以使邮件异步发送。到目前为止都很好。
现在我想提供一些关于已发送邮件状态的信息。例如一个简单的字符串,如x/y mails sent
,我之后可以通过http或其他方式查询(这不是本问题的关注点!)。我的期望是可以轻松访问工作队列或类似的东西,然后像after_action
回调那样注册一个回调函数,但显然没有这样的机制,看起来我需要手工编写这些回调函数,但我找不到任何一个资源甚至提到“投递状态”的主题。看起来似乎世界上没有人关心deliver_later
的邮件是何时被发送的?我所能找到的最接近的事情是如何为了单元测试目的检查此状态,但这绝对不是我想要的。
delivered_email
是一个观察者的钩子,用于判断"邮件是否成功发送",但一旦你告诉后台作业去执行(deliver_later
),你就必须以分布式方式存储这个"工作"单元。根据你的电子邮件服务提供商,通常你也可以在邮件送达时从ESP接收到webhooks。我不认为Amazon SES会这样做。否则,发送邮件的后台作业必须将"成功发送"写入分布式存储中。 - undefinedActionMailer.with(delivery_id: SecureRandom.uuid)
。这样,随后创建的每个Mail
对象都将获得相同的id作为参数传递。通过这种方式,消息可以在delivered_mail
中被传送。如果在其他情况下对邮件对象进行操作,将会生成多个ID,而无法确定哪一个是指向重复对象的。 - undefinedmessage.header['X-Delivery-Id']
(单数header
)。 - undefined