显然,通过JavaMail从Java应用程序发送电子邮件并不那么困难。我感兴趣的是接收电子邮件的最佳模式(主要是通知反弹)。我对基于IMAP/POP3 3的方法不感兴趣(对收件箱进行轮询)--我的应用程序将对入站电子邮件作出反应。
我能想到的一种方法是
myuser: "|/path/to/javahelper" )中的条目来实现这一点,javahelper调用Java应用程序,传递STDIN。另一种方法可能是
myuser (传递过滤器)到Java应用程序容器,端口25。我以前做过的第一种方法(尽管是在另一种语言/设置中)。
从性能和(感知)清洁的角度来看,我认为第二种方法更好,但它需要我提供一个适当的SMTP传输实现。而且,我不知道是否有可能把网络套接字和一个bean连接起来.
你的建议是什么?你有关于第二种方法的详细信息吗?
发布于 2011-12-10 22:44:35
也许SubEtha SMTP (编辑:现在从Google迁移到https://github.com/voodoodyne/subethasmtp)会很有趣--它是一个允许应用程序接收SMTP邮件的Java库。我要试试看了。
这里有一个与堆栈溢出有关的问题(有人建议使用SubEthaSMP):
发布于 2010-04-15 09:36:36
我不认为第二种方法是“更清洁”。相反,它要求您实现标准MTA的一个重要部分,因此我建议您不要这样做。
我相信轮询POP/IMAP服务器实际上是最干净的方法。你为什么决定不这么做?如果POP/IMAP服务器和您的服务位于同一个LAN中(甚至在同一台机器上),那么投票将非常便宜。你可以每隔10-20分钟做一次,这样就不会有问题了。虽然这在技术上可能有点不雅观,但您将使用标准的互操作协议(POP3 3/IMAP),它为您提供了灵活性,同时避免了重新实现邮件服务器。
生成Java应用程序的方法似乎也是可行的,但我更喜欢轮询,因为:
( a)您使用的接口(POP3 3/IMAP)更加标准化,而用于“插入”邮件服务器的接口将是特定于服务器的(在Unix上,您可以使用procmail,但仍然依赖于特定的软件)。
( b)每封邮件启动一个单独的进程可能比轮询有更多的开销。
顺便提一句:第三种方法是以某种方式将传入的邮件作为文件转储到“传入”目录中(许多邮件服务器都可以这样做),然后轮询目录。轮询目录甚至比轮询服务器花费更少。只是要注意同步问题(读半写的邮件,几个同时读同一邮件文件的读者.)
我的经历:
我使用这两种方法实现了系统(IMAP轮询,并产生了一个单独的进程)。轮询是针对一个相当大的Java应用程序,它处理人们发送到邮箱的数据;我没有遇到任何wrt轮询问题。生成方法是针对一个小型Perl脚本;我只是这样做的,因为它是一个简单的程序,每天只处理几封邮件,而且插入邮件服务器比在Perl中执行IMAP更容易。
发布于 2010-06-24 12:30:48
根据Java体系结构,“正确”的方法是有一个JCA连接器来与SMTP服务器进行入站/出站连接。
JCA连接器可以做任何您想做的事情,包括线程处理和连接到带有套接字的外部系统。实际上,JMS只是一种特殊的JCA连接器,它连接到JMS代理并将消息传递给“常规”MDB。然后,JCA连接器可以轮询SMTP服务器并将消息传递给自定义MDB。
关于JCA的最好文档是使用J2EE连接器架构1.5创建资源适配器,它实际上使用了电子邮件传递的例子。我建议你看一看。代码可以作为Java示例的一部分找到,并使用JavaMail,但我不知道它是否已经就绪。
相关信息:
https://stackoverflow.com/questions/2643791
复制相似问题