如何判断邮件是否退回?smtp-mail库邮件状态获取问询
smtp-mail库邮件状态获取问题解答
现有smtp-mail的局限
smtp-mail的sendMailWithLogin'等函数仅返回IO (),遇到SMTP协议级错误(如认证失败、收件人无效、服务器拒绝)时会直接抛出异常,而非返回结构化错误信息。你可以用try/catch捕获这些异常来提取细节,但要明确:
- 这类异常只能反映SMTP传输阶段的问题,无法得知邮件最终是否被收件人邮箱接收(比如后续的退信)。
- 库内部的多层
IO ()结构说明它没有设计返回状态的逻辑,没法直接获取送达确认。
关于最终送达/退信的状态获取
邮件的最终投递状态(如收件人不存在导致的退信)需要依赖SMTP的**DSN(投递状态通知)**机制:
- 构建邮件时添加DSN相关头信息,请求收件方服务器在投递失败时将退信通知发送到你指定的邮箱。
- 监听该指定邮箱,解析收到的退信邮件,从中提取错误代码和原因。
替代库推荐
如果需要更友好的错误处理和传输阶段状态反馈,可以使用:
smtp-client:它的发送函数会返回IO (Either SmtpError ()),能直接获取SMTP层面的错误代码和详细信息,便于处理传输阶段的问题。- 搭配
mime-mail使用,可轻松构建符合标准的邮件,包括添加DSN头的支持。
内容的提问来源于stack exchange,提问作者The Hoff
相关产品推荐
相关产品推荐

