4

刚从我的老板那里收到一份我正在处理的应用程序的请求。基本上,我们正在为外部客户设置一个电子邮件地址,以向其提交 Excel 文件。

我需要的是一种自动接收发送到此地址的任何电子邮件的方法,这样我就可以获取附件,对其进行处理并将其保存到文件夹中。

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

注意:我们正在使用 Lotus Notes 服务器来执行此操作,但通用方式会更有帮助(如果可能)。

4

9 回答 9

10

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

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

[某事]可能是:

于 2008-09-11T14:46:37.203 回答
2

编辑:自从我第一次写这个答案以来,Wiser 已经搬家了,现在声称只是一个单元测试工具,所以在下面的答案中加点盐......


Svrist 的回答很好,但是如果您想避免他的中间步骤(将邮件写入磁盘以供 Java 系统稍后提取的邮件服务器),您可以使用Wiser

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
}
于 2008-11-10T16:19:09.903 回答
1

我最近在 Domino 服务器上使用 Java 代理做了很多工作。Domino 8.5 服务器支持 Java 6 及其嵌入式,因此具有一点 Domino 开发经验的人不会花费很长时间来组装一个在新邮件到达时运行的代理。在 LotusScript 中它更容易,但需要更多的专业技能,您可能需要让承包商提供这些技能。

您可能遇到的限制与提取的文件有关,您可以轻松地将其放置在 Domino 服务器的文件结构中,但您可能会受到操作系统安全性的限制,无法将其放置在不同的服务器上。

于 2008-09-16T11:23:46.353 回答
1

使用数据库中的邮件(您的 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
于 2008-09-16T20:32:20.667 回答
0

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 运行而无需完全安装。

有关更多信息,请参阅 Domino Designer 帮助(或 IBM 的 C API 网站)。

至于执行此操作的“通用方式”,如果您正在访问 Notes 中的数据并需要提取附件,我相信这些 API 是您的最佳选择。如果您设想将应用程序移植到另一个邮件系统,请考虑通过“接口”将 API 例程解耦,这样您只需添加该接口的新实现即可支持新的邮件系统。

于 2008-09-15T15:58:51.300 回答
0

您可以使用 DIIOP 相对轻松地访问 Notes 文档,这比走 C Api 之路要容易得多......

于 2008-09-15T16:09:29.747 回答
0

尝试Net Commons 包中的 POP3Client ;它会让您的 Java 程序以您想要的任何时间间隔(每隔几分钟?每小时?)检查特定帐户的新邮件,并根据需要获取/删除邮件。

于 2008-09-16T16:51:35.363 回答
0

可以在 Domino 服务器上启用 SMTP/POP3。之前使用过这个并让 Squirrel Mail 运行它。SMTP 有点占用资源,但值得付出努力,因为这样您就不必深入到 LotusLand 来使事情正常进行。只需编写一个小的 Java CLI 程序,该程序将检查特定的电子邮件邮箱(POP3 或 SMTP),并解析邮件,提取附件并将​​它们放置在需要的地方。

这里有大量文档和示例:http: //java.sun.com/products/javamail/

您采用这种方法开发的技术将比任何特定于 Lotus/Domino 的技术更广泛地适用于您未来的职业生涯。

于 2008-09-16T20:39:47.903 回答
0

无论您做什么,都需要了解 Lotus Notes 数据结构。好消息是,可以非常轻松地在 Notes 中构建完全自动化的解决方案。

最好的办法是在 Notes 中构建它,并且可以将它设置为在收到新邮件时自动运行。加里的答案是肯定的,但没有任何经验,可能很难弄清楚如何自己实施。另一方面,任何称职的Notes 程序员真的不应该花费超过一两个小时来设置它。

于 2008-11-10T16:11:12.663 回答