Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
如果地址是别名,如何使用ews java api识别收件人电子邮件?_Java_Email_Ewsjavaapi - Fatal编程技术网

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

如果地址是别名,如何使用ews java api识别收件人电子邮件?,java,email,ewsjavaapi,Java,Email,Ewsjavaapi,我正在使用ews java api,我正在使用它来处理发送到特定Exchange帐户的传入电子邮件,以便我可以从电子邮件中提取关键信息(即主题、正文、收件人、发件人等),通过api调用转发到另一个系统。我能够识别电子邮件的收件人,因为它自然与我从中检索新电子邮件的帐户相匹配,但我似乎无法识别发件人发送电子邮件可能使用的别名 例如,如果我从janedoe@mycompany.com到bobsmith@mycompany.com,然后我可以从“bobsmith”帐户中抓取一封电子邮件,阅读主题、正文

我正在使用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”类型,它允许我获取“收件人:”字段中使用的地址)


有人知道如何在收到的邮件上获取该别名吗?

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

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

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));
    }
}
FindItemsResults findResults=…;//这是几行,但在库中有很好的文档记录
//将MimeContent添加到集合中是关键
PropertySet PropertySet=新的PropertySet(BasePropertySet.FirstClassProperties,ItemSchema.MimeContent);
服务。加载项的属性(findResults、propertySet);
用于(项目:findResults){
String messageContent=新字符串(((EmailMessage)项).getMimeContent().getContent());
//查找使用的别名
Pattern=Pattern.compile(“To:\”(.*)\”;
Matcher Matcher=pattern.Matcher(messageContent);
if(matcher.find()){
System.out.println(“别名为:“+matcher.group(1));
}
}

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

检查这个答案:这是一个很好的起点……谢谢你抓住了这个问题,因为我之前找不到这个问题。但是,这是C代码,有一些项目没有正确地翻译到ews java api库。我对C不太熟悉,所以我不确定如何翻译propertySet语法或tryGetP之类的东西Property函数,因为它们似乎没有功能上的Java等价物。您所需要的只是检查上面示例中列出的适当的头。因为头是协议的一部分,只要您的Java库允许您提取头,您就可以了(我认为)。好吧,这需要一点时间才能弄清楚,在您发布的链接和问题之间,似乎是将ItemSchema.MimeContent添加到PropertySet,然后使用正则表达式在“to”中查找别名字段。我将用该决议更新该问题,因为虽然它不太干净,但我能够使其工作。感谢您为我指明了正确的方向!