如果地址是别名,如何使用 ews-java-api 识别收件人电子邮件?

Posted

技术标签:

【中文标题】如果地址是别名,如何使用 ews-java-api 识别收件人电子邮件?【英文标题】:How do I identify the recipient email using ews-java-api if the address is an alias? 【发布时间】:2016-12-09 18:34:52 【问题描述】:

我正在使用 ews-java-api,我使用它来处理传入特定 Exchange 帐户的电子邮件,以便我可以从电子邮件中提取关键信息(即主题、正文、收件人、发件人等)通过 API 调用转发到另一个系统。我能够识别电子邮件的收件人,因为它自然与我从中检索新电子邮件的帐户相匹配,但我似乎无法识别发件人可能用于发送电子邮件的别名。

例如,如果我从 janedoe@mycompany.com 向 bobsmith@mycompany.com 发送电子邮件,然后我可以从“bobsmith”帐户中获取电子邮件,并阅读主题、正文等。但如果 Bob Smith有一个别名,比如说,“hero@mycompany.com”,它转到他的 bobsmith 帐户,Jane Doe 给他发电子邮件到那个地址,我只看到“bobsmith@mycompany.com”作为收件人,而不是“英雄...... ”。我似乎在 Exchange 项目上找不到任何方法调用(即使转换为“EmailMessage”类型,这也允许我获取“to:”字段中使用的地址。

有谁知道如何在收到的消息中获取该别名?

【问题讨论】:

查看这个答案:***.com/questions/6213571/… 这是一个很好的起点...感谢您了解这一点,因为我之前找不到。但是,这是 C# 代码,其中一些项目无法正确转换为 ews-java-api 库。我对 C# 不太熟悉,所以我不确定如何翻译诸如 propertySet 语法或 tryGetProperty 函数之类的东西,因为它们似乎没有功能性的 Java 等价物。 您只需要检查上面示例列出的相应标题即可。由于标头是协议的一部分,只要您的 java lib 允许您提取标头,就应该没问题(我认为)。 好吧,花了一点时间才弄清楚,在您发布的链接和 this one 之间,问题似乎与将 ItemSchema.MimeContent 添加到 PropertySet,然后使用常规在“to”字段中查找别名的表达式。我将使用该分辨率更新问题,因为虽然它不是太干净,但我能够使其工作。感谢您为我指明正确的方向! 【参考方案1】:

好的,感谢@diginoise,最终的解决方案是执行以下操作。我最初没有发布代码,但希望这对其他搜索相同问题的人有所帮助。

我首先使用默认属性集并添加了 mime 内容,以便我的属性查询将包含 mime 内容。然后我添加一个正则表达式来直接检查 mimecontent 以获取可能已使用的别名:

FindItemsResults<Item> findResults = ...; // This is several lines, but is well documented in the library

// Adding MimeContent to the set is key
PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent);
service.loadPropertiesForItems(findResults, propertySet);

for (Item item : findResults) 
    String messageContent = new String(((EmailMessage) item).getMimeContent().getContent());

    // find the alias used
    Pattern pattern = Pattern.compile("To: \"(.*)\" <(.*?)>");
    Matcher matcher = pattern.matcher(messageContent);
    if (matcher.find()) 
        System.out.println("Alias is: " + matcher.group(1));
    

如果您只查找列出的第一个电子邮件地址,但不会处理别名列表,则此方法有效,因此您需要修改模式并在“收件人:”行中搜索多个实例,然后将它们提取出来,但这涵盖了如何获取实际“发送到”地址而不是“接收者”地址的基础知识。

【讨论】:

以上是关于如果地址是别名,如何使用 ews-java-api 识别收件人电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

ews-java-api:项目更新错误:至少一个收件人无效

如何别名 quit() 退出?

如何在mysql函数中使用别名

无法在 iOS 邮件中使用 WorkMail 盟友地址

A记录CNAMEMX记录NS记录

linux 如何删除命令别名