python-3.x - Python - 回复电子邮件 win32com
问题描述
我正在尝试通过 python 和 win32com 回复电子邮件。下面是我的代码:
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”的发件人,但我尝试回复的上一封电子邮件未出现在新电子邮件下方。我正在回复的电子邮件历史记录丢失了。
解决方案
我没有办法对此进行测试,但是从您分享的代码中,我认为问题如下:
您迭代messages
并为每个找到的MailItem分配循环变量“消息”。接下来,您将body
of设置message
为“这是回复” - 换句话说:您使用新字符串覆盖原始消息,然后发送回复。
.Reply()
然后只需从 中创建一个新的 MailItem 对象message
,只需切换Sender
和属性...以及您自己分配的新对象。Recipient
body
https://docs.microsoft.com/en-gb/office/vba/api/outlook.mailitem.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
然后,我使用该方法从我的收件箱中的电子邮件创建了一个新的 MailItem 对象.Reply()
,然后我将它(用.Move()
)移动到我的草稿文件夹中。在那里我可以检查它,发现原始电子邮件确实保留在历史记录中,并且主题行自动获得“AW:”前缀。
所以:要保留原始电子邮件,您只需要确保不覆盖原始电子邮件,Body
并且只在MailItem.HTMLBody
.
推荐阅读
- c# - 颜色量化 - 流行度算法
- html - 使用 jQuery 将图像附加到 HTML,然后用新图像替换附加的图像
- angular - 如何使用 ngx-quill 构建 Angular 8?
- azure-ad-b2c - 在身份验证失败时继续 Azure B2C 用户旅程
- php - password_hash 和 password_verify 的问题,在一种情况下总是返回 true,在另一种情况下返回 false
- vba - 将工作表复制到具有粘贴值并保留格式的新工作簿
- reactjs - 为什么这对 redux 代码起作用?
- ruby-on-rails - heroku 生成与开发控制台相同的日志,但 AWS 中的相同应用程序没有生成相同的日志
- powershell - Powershell:将文件从网络复制到 PC 的基础 PC 模型
- python - 度量 F1 警告零除法