如何从EWS交换服务器访问特定电子邮件

时间:2019-04-24 13:16:37

标签: c# office365 exchange-server exchangewebservices

我正在尝试使用C#从EWS获取特定的电子邮件,但是找不到找到特定电子邮件的方法。

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            service.Credentials = new WebCredentials(myemail, password);
            service.UseDefaultCredentials = false;
            service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
            ItemView itemsView = new ItemView(5);
            string querystring = "Kind:email";                

            FindItemsResults<Item> itemResults = service.FindItems(WellKnownFolderName.Inbox, querystring, view: itemsView);

FindItems方法根据查询字符串提供电子邮件。我在数据库中保存了EmailMessage.InternetMessageIdEmailMessage.Id以及主题等详细信息。就我而言,我的电子邮件主题可能相同,但正文内容几乎没有差异。

后来,根据用户操作,我想从交换服务器获取特定的电子邮件。我可以使用任何方法来获取基于EmailMessage.InternetMessageIdEmailMessage.Id的电子邮件吗?这些ID是否可靠?我在文档中找不到方法。目前,我正在考虑根据主题阅读电子邮件,然后根据EmailMessage.Id.UniqueId

过滤结果

是否有其他好的方法可以从交换服务器获取特定电子邮件?

1 个答案:

答案 0 :(得分:1)

IntenetMessageId应该是唯一的,但不能保证会因为设置ID的不同进程的数量而异。

如果要基于InternetMessageId获取特定消息,则需要使用Extended属性,而不要使用强类型的消息,例如

from tkinter import *
from PIL import Image, ImageTk

class Battleship(Tk):

    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)

        self.geometry("1920x1080")

        container = Frame(self)
        container.pack(side="top", fill="both")
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (Homepage, Twoplayer):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky = "nsew")

        self.show_frame(Homepage)

    def show_frame(self, page_name):
        """Show given frame"""
        frame=self.frames[page_name]
        frame.tkraise()


class Homepage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        # Add battleship photo to background
        self.mainBG = ImageTk.PhotoImage(Image.open("CSEdit.jpg"))
        BGlabel = Label(self, image=self.mainBG)
        BGlabel.grid()


class Twoplayer(Frame):
    # This code not relevant to problem, can't even get Homepage to work
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        pass

root = Battleship()
root.mainloop()

您可以使用https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-export-items-by-using-ews-in-exchange

将邮件导出到EML文件。