PostFix发邮件,异常返回的问题
@红薯 你好,想跟你请教个问题:
咨询个用PostFix发邮件的事情,目前发邮件没有问题,可是在客户端(Java main方法来发)发出去后没有任何异常,即使该邮件人不存在。
但是在mail.log中可以看到550 Mailbox not found等错误信息,但是客户端无任何异常,通过163或者QQ的smtp发送,如果邮件人不存在,会抛出如下异常:
javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550 Mailbox not found at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1607) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:887) at com.example.web.EmailSenderDriver.sendMsg(EmailSenderDriver.java:551) at com.example.web.ThreadMail.run(ThreadMail.java:44) at com.example.web.ThreadMail.main(ThreadMail.java:129) Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 550 Mailbox not found at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1458) ... 4 morePostfix如何配置才能像163和QQ那样,出错立马返回回来,被客户端捕获,这样就可以知道这封邮件发送失败了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
postfix 的队列机制,返回250表示提交到队列,不是发送的结果
能否改变postfox 的队列机制,实现能即时发送就发,不能发就显示busy,无论成功与否,能返回所有的收件方正确的信息,让smtp客户端知道,再退出
我知道,专业的做法是,通过webhook 来解决这个问题,但需要邮件发送平台才能实现
应该说,postfix 的队列机制,造成做不到这个的吗?
windows的很多 smtp 服务器软件和postfix 机制不同,就可以立刻返回5xx 4xxx
smtp 协议本身也是可以做到的
一般邮件失败后都是系统发给发件人一封包含错误信息的邮件的。
因为 SMTP 收到邮件都是放到一个 pool 里,然后再调度进行发送的,所以你没法即时知道发送结果
回复
正解
那情况就是通过自建的邮件服务器发送邮件,发送出去,在客户端上无法获知是否真的成功,有任何错误只能去mail.log中去获知了。 典型的情况是:相同的邮件往qq邮箱发多了,QQ会拒收,但是在Postfix的发送过程中是没法知道的,只能去mail.log中查询? 如果是这样的话,这点好像很被动,每次都得查mail.log才能知道哪些失败了,哪些成功了。
SMTP 做不到这个的,能实现这种一般都是内部系统,例如 163 对 163 发,它们可以先检测是否存在然后再发送。
SMTP 做不到这个的,能实现这种一般都是内部系统,例如 163 对 163 发,它们可以先检测是否存在然后再发送。