首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java应用程序中接收电子邮件

如何在Java应用程序中接收电子邮件
EN

Stack Overflow用户
提问于 2010-04-15 08:36:43
回答 5查看 6.7K关注 0票数 15

显然,通过JavaMail从Java应用程序发送电子邮件并不那么困难。我感兴趣的是接收电子邮件的最佳模式(主要是通知反弹)。我对基于IMAP/POP3 3的方法不感兴趣(对收件箱进行轮询)--我的应用程序将对入站电子邮件作出反应。

我能想到的一种方法是

  • 保持现有的MTA (我的例子中linux上的后缀) ->操作系统团队已经知道如何配置/操作它了。
  • 对于到达的每一封邮件,生成一个Java应用程序,该应用程序接收数据并通过JMS发送。我可以通过/etc/别名(如myuser: "|/path/to/javahelper" )中的条目来实现这一点,javahelper调用Java应用程序,传递STDIN。
  • MDB ( Java应用程序的一部分)接收JMS消息,对其进行解析,检测反弹消息并采取相应的行动。

另一种方法可能是

  • 在Java应用程序容器的端口25上打开侦听网络套接字。
  • 将SessionBean与套接字相关联。Bean是Java应用程序的一部分,可以直接解析/检测、反弹/处理消息。
  • 将现有的MTA保持为入站中继,执行其所有安全性/垃圾邮件过滤,但将电子邮件转发给myuser (传递过滤器)到Java应用程序容器,端口25。

我以前做过的第一种方法(尽管是在另一种语言/设置中)。

从性能和(感知)清洁的角度来看,我认为第二种方法更好,但它需要我提供一个适当的SMTP传输实现。而且,我不知道是否有可能把网络套接字和一个bean连接起来.

你的建议是什么?你有关于第二种方法的详细信息吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-10 22:44:35

也许SubEtha SMTP (编辑:现在从Google迁移到https://github.com/voodoodyne/subethasmtp)会很有趣--它是一个允许应用程序接收SMTP邮件的Java库。我要试试看了。

这里有一个与堆栈溢出有关的问题(有人建议使用SubEthaSMP):

Java应用程序接收到的电子邮件最简单的方法是什么?

票数 6
EN

Stack Overflow用户

发布于 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更容易。

票数 8
EN

Stack Overflow用户

发布于 2010-06-24 12:30:48

根据Java体系结构,“正确”的方法是有一个JCA连接器来与SMTP服务器进行入站/出站连接。

JCA连接器可以做任何您想做的事情,包括线程处理和连接到带有套接字的外部系统。实际上,JMS只是一种特殊的JCA连接器,它连接到JMS代理并将消息传递给“常规”MDB。然后,JCA连接器可以轮询SMTP服务器并将消息传递给自定义MDB。

关于JCA的最好文档是使用J2EE连接器架构1.5创建资源适配器,它实际上使用了电子邮件传递的例子。我建议你看一看。代码可以作为Java示例的一部分找到,并使用JavaMail,但我不知道它是否已经就绪。

相关信息:

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2643791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档