Python 3.x Python-回复电子邮件win32com
我正在尝试通过python和win32com回复电子邮件。 下面是我的代码:Python 3.x Python-回复电子邮件win32com,python-3.x,win32com,Python 3.x,Win32com,我正在尝试通过python和win32com回复电子邮件。 下面是我的代码: outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") o = win32com.client.Dispatch("Outlook.Application") inbox = outlook.GetDefaultFolder(6) messages = inbox.Items
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
o = win32com.client.Dispatch("Outlook.Application")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
for message in messages:
if message.Subject == "aaa":
print("Found message")
message.body="This is a reply"
message.Reply()
回复将被发送给“aaa”的发件人,但我试图回复的前一封电子邮件未显示在新电子邮件的下方。我回复的电子邮件的历史记录将丢失。我没有办法测试此功能,但从您共享的代码来看,我认为问题如下: 您迭代
消息
,找到的每个邮件项都分配了循环变量“message”。
接下来,您将消息的正文设置为“这是回复”-换句话说:使用新字符串覆盖原始消息,然后发送回复。
.Reply()
然后只需从邮件
创建一个新的邮件项目对象,只需切换发件人
和收件人
属性即可。。。新的主体
由您自己指定
编辑:
所以我做了这个代码:
import win32com.client as win32
outlook = win32.Dispatch("Outlook.Application").GetNamespace("MAPI")
acc = outlook.Folders("myemail@provider.com")
inbox = acc.folders("Inbox") #change to localized versions
drafts = acc.folders("Drafts") #if necessary
def createReply(email:object):
reply = email.Reply()
newBody = "Dear friend,\n\nThis should be added on top.\nI hope this
works\n\nkr\ntst\n"
reply.HTMLBody = newBody + reply.HTMLBody
reply.Move(drafts)
for mailItem in inbox.Items:
if mailItem.Subject == "Test4Reply":
print("Start")
createReply(mailItem)
首先,我给自己发了一封主题为“Test4Reply”的电子邮件,这样我就可以抓住它了。我在邮件正文中添加了一些胡言乱语,只是为了检查它是否被保留。然后,我使用.reply()
方法从收件箱中的电子邮件创建了一个新的邮件项对象reply
,然后将其移动(使用.Move()
)到我的草稿文件夹中。在那里,我可以检查它,并看到,事实上,原始电子邮件保存在历史记录中,以及主题行自动获得“AW:”前缀
因此:
要保留原始电子邮件,只需确保不覆盖原始的正文
,只需在MailItem.HTMLBody
的开头插入新文本即可 我没有办法对此进行测试,但从您共享的代码来看,我认为问题如下:
您迭代消息
,找到的每个邮件项都分配了循环变量“message”。
接下来,您将消息的正文设置为“这是回复”-换句话说:使用新字符串覆盖原始消息,然后发送回复。
.Reply()
然后只需从邮件
创建一个新的邮件项目对象,只需切换发件人
和收件人
属性即可。。。新的主体
由您自己指定
编辑:
所以我做了这个代码:
import win32com.client as win32
outlook = win32.Dispatch("Outlook.Application").GetNamespace("MAPI")
acc = outlook.Folders("myemail@provider.com")
inbox = acc.folders("Inbox") #change to localized versions
drafts = acc.folders("Drafts") #if necessary
def createReply(email:object):
reply = email.Reply()
newBody = "Dear friend,\n\nThis should be added on top.\nI hope this
works\n\nkr\ntst\n"
reply.HTMLBody = newBody + reply.HTMLBody
reply.Move(drafts)
for mailItem in inbox.Items:
if mailItem.Subject == "Test4Reply":
print("Start")
createReply(mailItem)
首先,我给自己发了一封主题为“Test4Reply”的电子邮件,这样我就可以抓住它了。我在邮件正文中添加了一些胡言乱语,只是为了检查它是否被保留。然后,我使用.reply()
方法从收件箱中的电子邮件创建了一个新的邮件项对象reply
,然后将其移动(使用.Move()
)到我的草稿文件夹中。在那里,我可以检查它,并看到,事实上,原始电子邮件保存在历史记录中,以及主题行自动获得“AW:”前缀
因此:
要保留原始电子邮件,只需确保不覆盖原始的正文
,只需在MailItem.HTMLBody
的开头插入新文本即可 你说得对。我尝试创建新的电子邮件对象,但没有看到任何回复电子邮件的方法可以保持以前的对话不变。Reply()/replyll()不要将我创建的新电子邮件对象作为参数。不确定win32com是否能满足我的要求。我会在我的工作站上呆一会儿,我可以试试,然后做一些测试<代码>回复()
不应该发送电子邮件,对吗?根据文档,它只会创建一个新的MailItem对象,然后您必须通过调用.send
发送该对象,感谢您的帮助。我尝试在消息中查找消息:if message.Subject==“aaa”:newMessage=message.Reply()newMessage.body=“body in Reply”newMessage.Send(),但它的操作与原始问题中的相同:(嘿!谢谢它起作用了。它至少保留了以前的邮件。在我连接了我的MailItem.HTMLBody.之后,格式稍微好一点。仍然需要在邮件正文中进行操作,使其看起来像一个电子邮件链。感谢你的帮助..干杯!哦…是的,我刚刚找到了它。HTMLBody是你真正需要的。我补充道在上面的回答中我的代码!很明显,我的newBody
字符串中的换行符不显示,因为它现在应该是HTML格式的,而不是纯文本。你是对的。我尝试创建新的电子邮件对象,但没有看到任何回复电子邮件的方法保持以前的对话完整。reply()/ReplyAll()不要将我创建的新电子邮件对象作为参数。不确定win32com是否能满足我的要求。我将在我的工作站上呆一会儿,我可以尝试一下,然后做一些测试。Reply()
不应该发送电子邮件,对吗?根据文档,它只会创建一个新的MailItem对象,然后您必须通过调用发送该对象。send
已经感谢您的帮助。我尝试在messages中发送消息:if message.Subject==“aaa”:newMessage=message.Reply()newMessage.body=“body in reply”newMessage.Send()但它的作用与原始问题中的相同:(嘿!谢谢它起作用了。它至少保留了以前的邮件。在我连接了我的MailItem.HTMLBody.之后,格式稍微好一点。仍然需要在邮件正文中进行操作,使其看起来像一个电子邮件链。感谢你的帮助..干杯!哦…是的,我刚刚找到了它。HTMLBody是你真正需要的。我补充道在上面的答案中,我的代码!很明显,我的newBody
字符串中的换行符不显示,因为它现在应该是HTML格式的,而不是纯文本。