ste*_*han 6 python email imap exchange-server bcc
我尝试通过IMAP将草稿电子邮件存储到MS Exchange上运行的文件夹中.一切都还可以,但Bcc收件人不会显示在服务器上存储的草稿邮件中.如果我使用MS Outlook发送密件抄送收件人也不会收到电子邮件.如果我在将消息存储到服务器后用Python读回消息,我可以在草稿中看到密件抄送.
以下Python代码重现此行为:
import imaplib
import time
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
message = MIMEMultipart()
message['Subject'] = 'Test Draft'
message['From'] = 'test@test.net'
message['to'] = 'test@test.com'
message['cc'] = 'testcc@test.com'
message['bcc'] = 'testbcc@test.com'
message.attach(MIMEText('This is a test.\n'))
server= imaplib.IMAP4('the.ser.ver.ip')
server.login('test', 'test')
server.append("Drafts"
,'\Draft'
,imaplib.Time2Internaldate(time.time())
,str(message))
server.logout()
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,草稿将存储到DraftExchange Server上的文件夹中.但是,如果我使用MS Outlook查看草稿,它不包括bccrecipient(message['bcc'] = 'testbcc@test.com').Message,to,from,ccOK,没有错误.
如果我从Exchange文件夹下载已包含密件抄送的草稿,我也可以看到密件抄送.只有上传对我不起作用.
任何帮助非常感谢.谢谢.顺便说一下,MAPI不是一个选择.
更新:谢谢.X-Receiver不适合我.至于在Outlook中使用IMAP-Folder,我得到了一个有趣的结果.如果我通过Outlook中的IMAP文件夹访问草稿,我会看到密件抄送.但是,如果我通过MAPI文件夹访问它,我看不到它.会发挥一点点.
结论:感谢您的投入.实际上,代码工作得很好.请参阅下面的我找到的答案.
实际上,代码工作得很好.它会创建包含所有正确标题(包括密件抄送)的正确邮件.
邮件客户端如何显示密件抄送?
在邮件客户端(如Python或MS Outlook中通过我的情况下,IMAP或MAPI)决定是否以及如何显示BCC报头.例如,Outlook不显示IMAP文件夹中的密件抄送标头.这是一个隐藏密件抄送收件人的功能,之前他们没有被从邮件中剥离(从标准中不清楚是否允许一个密件抄送收件人看到所有其他密件抄送收件人,请参阅维基百科).
谁在发送电子邮件时处理密送?
现在假设我们已在邮件客户端中起草了一条消息并将其存储在IMAP或MAPI文件夹中.提供IMAP/MAPI文件夹的服务器保留草稿消息不变.发送邮件时bcc-headers会发生什么情况取决于实现,并且可能依赖于邮件客户端和邮件传输代理(例如,在我的情况下为MS Exchange Server).简而言之,人们不同意邮件客户端或邮件传输代理是否负责删除密件抄送头.然而,似乎大多数开发人员认为邮件客户的业务与邮件传输代理不接触邮件(例如MS Exchange,MS SMTP,Exim,OpenWave).在这种情况下,邮件传输代理会RCPT TO:按照SMTP通信中的定义将电子邮件发送给收件人,否则将保持电子邮件不变.其他一些邮件传输代理会从电子邮件中删除密件抄送头(例如sendmail,Lotus Notes).从这里开始,可以在Exim邮件列表中找到非常详尽的讨论.
对于MS Outlook和MS Exchange,MS Outlook从不发送密件抄送(但为每个密件抄送收件人发送单独的电子邮件),并且MS Exchange不会触摸电子邮件标题,而是将完整的电子邮件(可能包括密件抄送收件人)发送给定义的收件人在RCPT TO:.
结论
我不明白bcc没有保证的行为,通常客户端处理密件抄送.我将重写我的Python代码以循环访问密件抄送收件人,并为每个密件抄送收件人生成一封电子邮件.