我正在编写一个脚本,通过 imap 将邮件从 imap 服务器移动到 gmail。
我得到它来复制邮件并创建标签,但是当我查看 gmail 时,它将日期设置为现在而不是原始日期。
# fetch header of current mail form old server to get date
result, header = From.uid('fetch', num, '(BODY[HEADER.FIELDS (DATE SUBJECT)])')
headerdic = headerparser.parsestr(header[0][1])
# add dobble qoutes around date
date = '"' + headerdic["Date"] + '"'
# get mail content
result, data = From.uid('fetch', num, '(RFC822)')
mgs = data[0][1]
# append mail to server
To.append(folder_name, None, date, mgs)
我在文档中读到了 dobble qoutes 很重要,但它并没有起到任何作用。
更新
我发现以下解决方案有效
result, header = From.uid('fetch', num, '(BODY[HEADER.FIELDS (DATE SUBJECT)])')
headerdic = headerparser.parsestr(header[0][1])
pz = email.utils.parsedate_tz(headerdic["Date"])
stamp = email.utils.mktime_tz(pz)
date = imaplib.Time2Internaldate(stamp)
result, data = From.uid('fetch', num, '(RFC822)')
mgs = data[0][1]
To.append(folder_name, None, date, mgs)
可能我之前有正确的解决方案,但我的邮件仍然在 gmail 的垃圾箱中,所以它只是重用了我没有发送日期的早期测试。