Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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_Lotus Notes - Fatal编程技术网

用Java自动处理电子邮件

用Java自动处理电子邮件,java,email,lotus-notes,Java,Email,Lotus Notes,刚刚收到老板的申请,我正在处理一个申请。基本上,我们得到了一个外部客户提交excel文件的电子邮件地址设置 我需要的是一种方法,自动拿起任何电子邮件发送到这个地址,所以我可以采取的附件,处理它,并保存到一个文件夹 任何关于从哪里开始的信息都会很有帮助\ 注意:我们正在使用lotus notes服务器来实现这一点,但如果可能的话,一般的方法会更有用。电子邮件->邮件服务器->[something]>磁盘上的文件 磁盘上的文件很容易解析和使用 问题可能是: smtp连接的侦听器(overkill)

刚刚收到老板的申请,我正在处理一个申请。基本上,我们得到了一个外部客户提交excel文件的电子邮件地址设置

我需要的是一种方法,自动拿起任何电子邮件发送到这个地址,所以我可以采取的附件,处理它,并保存到一个文件夹

任何关于从哪里开始的信息都会很有帮助\


注意:我们正在使用lotus notes服务器来实现这一点,但如果可能的话,一般的方法会更有用。

电子邮件->邮件服务器->[something]>磁盘上的文件

磁盘上的文件很容易解析和使用

问题可能是:

  • smtp连接的侦听器(overkill)
  • /客户
  • /信箱

Lotus Notes/Domino将邮件存储在Notes数据库中。有一些API可用于获取文档(电子邮件)、读取字段值(从、主题)和分离文件

API包括

-LotusScript(VB变体,在Notes数据库中提供)

-Java(从数据库内部或外部)

-C API(外部)

-通过COM服务器提供相同的API

您可以在数据库中创建一个“调度代理”(使用LotusScript或Java),该代理可以定位自上次运行以来创建的文档、定位附件并提取它们。需要使用在服务器上具有适当权限的ID(包括写入文件系统和启动任何其他进程所需的权限)对代理进行签名

在数据库外部,您可以使用除LotusScript之外的任何API登录到服务器/邮件数据库,并遵循类似的过程,例如在客户端或单独的服务器上本地提取文件。C API和COM需要notes客户端安装,但Java应用程序可以设置为通过CORBA/DIIOP运行,而无需完全安装

有关更多信息,请参阅DominoDesigner帮助(或针对C API的IBM网站)


至于实现这一点的“通用方法”,如果您正在访问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,因为你不能这样做吗?