Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java代码发送邮件-可靠的方法_Java_Email_Jakarta Mail_Apache Commons - Fatal编程技术网

从java代码发送邮件-可靠的方法

从java代码发送邮件-可靠的方法,java,email,jakarta-mail,apache-commons,Java,Email,Jakarta Mail,Apache Commons,从你的应用程序发送邮件是一件很常见的事情,在大多数情况下,这是一件非常痛苦的事情。。。你知道在哪里 因此,我正在做的是接收Apache Commons电子邮件(基于“官方”java mail api之上),并以最简单的方式发送电子邮件,即不向smtp服务器进行身份验证。我只是在目标主机名上做一个简单的MX查找,获取MX服务器,并尝试在第一个位置删除我的邮件(邮件是否被拒绝是一个完全不同的问题,我可能很快会问一个关于返回路径:vs.from:vs.reply to:和这些邮件头的方式(不是)的进一

从你的应用程序发送邮件是一件很常见的事情,在大多数情况下,这是一件非常痛苦的事情。。。你知道在哪里

因此,我正在做的是接收Apache Commons电子邮件(基于“官方”java mail api之上),并以最简单的方式发送电子邮件,即不向smtp服务器进行身份验证。我只是在目标主机名上做一个简单的MX查找,获取MX服务器,并尝试在第一个位置删除我的邮件(邮件是否被拒绝是一个完全不同的问题,我可能很快会问一个关于返回路径:vs.from:vs.reply to:和这些邮件头的方式(不是)的进一步问题)用java处理)。回到正题。。。因此,我只是尝试在邮件服务器上以最少的首选项删除邮件

这里有一个例子:我想写
recipient@domain.com
。MX查找告诉我,
domain.com
知道两个MX服务器,它们是首选项为10的
mail1.domain.com
和首选项为20的
mail2.domain.com
。rfc做事情的方法是转到首选项最少的服务器并将邮件放到那里。我就是这么做的

最后是我的问题:如果服务器以某种方式不可用,会发生什么?这很简单——我转到另一台服务器,但Apache Commons(我怀疑java mail api)不允许我这样做。
mail.smtp.host
变量以电子邮件中消息的会话道具为根。我无法理解


那么,处理这个问题的最佳方法是什么?我应该用新的主机名(mail2)完全从头开始构建电子邮件,还是有什么聪明的方法可以让这一切在java中工作而不费吹灰之力?

听起来,如果您试图实现一个部分邮件服务器,而不仅仅是发送一封电子邮件。路由、中继、缓存和传递重试是由所有邮件服务器实现和提供的操作,通常不由邮件客户端完成


您应该做的是使用(一个!)现有的邮件服务器,该服务器为您配置为允许中继出站邮件,或者如果您没有访问此类服务器的权限(我对此表示怀疑),则设置并操作您自己的服务器。然后在
mail.smtp.host
中配置此服务器,忘记所有关于DNS查找、服务器优先级的知识,以及如果无法访问任何MX服务器时该怎么办的担忧。

是的,我考虑过使用
aspirin
甚至
james
甚至是一个功能齐全的“外部”smtp服务器(但在后一种情况下,每个客户机都必须设置自己的smtp服务器,这对客户机来说的确是一个很大的要求:)),但要解决这样一个简单的问题似乎太过分了。或者可能只是我对“简单”和“过度杀戮”的理解有偏差:)我不知道你的软件应该运行在哪里,或者你说的是哪种类型的客户机,但是如果你的软件需要发送邮件,那么提供一个运行的SMTP服务器对你的要求并不高。公司的SMTP服务器仍在运行,哪些家庭用户无法从其Internet访问提供商或GMail或Hotmail等“纯”邮件提供商访问SMTP服务器?我同意,请使用现有的电子邮件服务器。如果你仍然想自己做这件事,你可能需要直接使用JavaMail API,这样你就可以使用Transport.connect方法直接连接到你想要的任何服务器。但我有自己的要求,不能这样做(相信我,我已经试过主张应该使用现有的SMTP服务器)。我仍然想用正确的方式做事@BillShannon Apache Commons Mail实际上可以很好地处理
com.sun.Mail.smtp.SMTPTransport
javax.Mail.Transport
。请注意,这不是不可能做到我想要的,只是对我来说有点难看(等待一个异常,如果有人发现创建一个新消息并尝试在下一个MX主机上删除它,等等),我不确定我是否看到了另一种方式。您正在应用程序中有效地实现SMTP服务器的一半发送。