我正在尝试使用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.InternetMessageId
和EmailMessage.Id
以及主题等详细信息。就我而言,我的电子邮件主题可能相同,但正文内容几乎没有差异。
后来,根据用户操作,我想从交换服务器获取特定的电子邮件。我可以使用任何方法来获取基于EmailMessage.InternetMessageId
或EmailMessage.Id
的电子邮件吗?这些ID是否可靠?我在文档中找不到方法。目前,我正在考虑根据主题阅读电子邮件,然后根据EmailMessage.Id.UniqueId
是否有其他好的方法可以从交换服务器获取特定电子邮件?
答案 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()
将邮件导出到EML文件。