【发布时间】:2011-02-08 06:49:02
【问题描述】:
显然,通过 JavaMail 从 Java EE 应用程序发送电子邮件并不难。我感兴趣的是接收电子邮件的最佳模式(主要是通知退回)?我对基于 IMAP/POP3 的方法(轮询收件箱)不感兴趣 - 我的应用程序应对入站电子邮件做出反应。
我能想到的一种方法是
- 保留现有的 MTA(在我的例子中是 linux 上的 postfix)-> 运维团队已经知道如何配置/操作它
- 对于每封到达的邮件,生成一个 Java 应用程序来接收数据并通过 JMS 发送出去。我可以通过 /etc/aliases 中的条目来做到这一点,例如
myuser: "|/path/to/javahelper",使用 javahelper 调用 Java 应用程序,并传递 STDIN。 - MDB(Java EE 应用程序的一部分)接收 JMS 消息,对其进行解析,检测退回消息并采取相应措施。
另一种方法可能是
- 在 Java EE 应用程序容器的端口 25 上打开一个监听网络套接字。
- 将 SessionBean 与套接字关联。 Bean 是 Java EE 应用程序的一部分,可以直接解析/检测退回/处理消息。
- 将现有 MTA 保留为入站中继,执行所有安全/垃圾邮件过滤,但将电子邮件转发到
myuser(通过过滤器)到 Java EE 应用程序容器的端口 25。
我以前做过的第一种方法(尽管使用不同的语言/设置)。
从性能和(感知的)清洁度的角度来看,我认为第二种方法更好,但它需要我提供适当的 SMTP 传输实现。另外,我不知道是否可以将网络套接字与bean连接......
您的建议是什么?你有关于第二种方法的详细信息吗?
【问题讨论】:
-
你最终选择了哪种方法?
-
这个项目被搁置了很长一段时间。现在我正在再次处理它,但我还没有实现接收部分。到目前为止,我的计划是按照 sleske 的建议,通过 IMAP 定期扫描电子邮件收件箱。
-
去掉 op 1 中的 jms,然后通过生成的 curl/http 将它发送到一个 rest 端点,你就可以剪掉 conf/complexity 的一部分(JMS/MDB)。
-
@alphazero - 谢谢,但 JMS 不是问题,OP 是关于接收电子邮件的最佳模式。
-
@hank - 明白。指出 JMS 不是必需的。它肯定了模式 1:使用(主动)外部系统通过 REST 将邮件推送到 JEE 容器。
标签: java email jakarta-ee smtp ejb-3.0