用Java自动处理电子邮件
刚刚收到老板的申请,我正在处理一个申请。基本上,我们得到了一个外部客户提交excel文件的电子邮件地址设置 我需要的是一种方法,自动拿起任何电子邮件发送到这个地址,所以我可以采取的附件,处理它,并保存到一个文件夹 任何关于从哪里开始的信息都会很有帮助\用Java自动处理电子邮件,java,email,lotus-notes,Java,Email,Lotus Notes,刚刚收到老板的申请,我正在处理一个申请。基本上,我们得到了一个外部客户提交excel文件的电子邮件地址设置 我需要的是一种方法,自动拿起任何电子邮件发送到这个地址,所以我可以采取的附件,处理它,并保存到一个文件夹 任何关于从哪里开始的信息都会很有帮助\ 注意:我们正在使用lotus notes服务器来实现这一点,但如果可能的话,一般的方法会更有用。电子邮件->邮件服务器->[something]>磁盘上的文件 磁盘上的文件很容易解析和使用 问题可能是: smtp连接的侦听器(overkill)
注意:我们正在使用lotus notes服务器来实现这一点,但如果可能的话,一般的方法会更有用。电子邮件->邮件服务器->[something]>磁盘上的文件 磁盘上的文件很容易解析和使用 问题可能是:
- smtp连接的侦听器(overkill)李>
- /客户
- /信箱
至于实现这一点的“通用方法”,如果您正在访问Notes中的数据并需要提取附件,我相信这些API是您最好的选择。如果您设想将应用程序移植到另一个邮件系统,考虑通过“接口”将API例程解耦,因此您只需要添加该接口的新实现以支持新邮件系统。 < P>您可以使用DIOOP轻松地访问Notes文档。这比走C Api道路要容易得多…我最近在Domino服务器上使用Java代理做了很多工作。Domino8.5服务器支持Java6及其嵌入式应用程序,因此不需要有一点Domino开发经验的人花很长时间来组装一个在新邮件到达时运行的代理。在LotusScript中,它甚至更容易,但这需要更专业的技能,而您可能需要一个承包商来提供这些技能 您可能会遇到的限制与提取的文件有关,您可以轻松地将其放置在Domino服务器的文件结构上,但您可能会受到操作系统安全性的限制,无法将其放置在其他服务器上。请在中尝试POP3客户端;它可以让Java程序在您想要的任何时间间隔(每隔几分钟?每小时?)检查特定帐户的新邮件,并根据需要获取/删除邮件。使用mail-in数据库(Domino管理员可以为您设置,但它也在帮助文件中) 在该数据库中,您可以创建一个代理,该代理定期运行以处理所有新文档。该代理将使用NotesRichTextItem类的EmbeddedObjects属性和NotesEmbeddedObject类的ExtractFile方法获取文件附件的句柄,并将其提取到指定的位置 例如,此脚本遍历文档主体项中的所有文件附件、对象链接和嵌入对象。每次找到文件附件时,它都会将文件分离到C驱动器上的SAMPLES目录,并从文档中删除附件
Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
Call o.ExtractFile( "c:\samples\" & o.Source )
Call o.Remove
Call doc.Save( False, True )
End If
End Forall
End If
可以在Domino服务器上启用SMTP/POP3。以前用过这个,让Squirrel Mail用它运行。SMTP有点资源密集,但值得付出努力,因为这样您就不必深入LotusLand来工作。只需编写一个小型Java CLI程序,它将检查特定的电子邮件框(POP3或SMTP),并解析消息,提取附件并将其放置在需要的位置 这里有大量的文档和示例:
采用这种方法开发的技术将比任何特定于Lotus/Domino的技术更广泛地应用于您未来的职业生涯。无论您做什么,都需要了解Lotus Notes数据结构。好消息是,完全自动化的解决方案可以很容易地在Notes中构建 最好的办法是将其构建在Notes中,并且可以设置为在收到新邮件时自动运行。Gary的答案完全正确,但如果没有任何经验,可能很难自己想出如何实现它。另一方面,任何称职的Notes程序员都不应该花费超过一两个小时的时间来设置它。编辑:自从我第一次写下这个答案以来,Wiser已经采取了行动,现在声称它只是一个单元测试工具,所以对下面的答案持保留态度
Svrist的答案是好的,但是如果您想避免他的中间步骤(将邮件写入磁盘以便稍后由Java系统接收的邮件服务器),您可以使用 Wiser允许您在Java邮件服务器中启动:
Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();
然后,您可以定期轮询邮件:
for (WiserMessage message : wiser.getMessages())
{
String envelopeSender = message.getEnvelopeSender();
String envelopeReceiver = message.getEnvelopeReceiver();
MimeMessage mess = message.getMimeMessage();
// mail processing goes here
}
你可以使用JavaMail,因为你不能这样做吗?