我正在尝试编写一个将主机1连接到account1@host1.com的imapsync软件,并将邮件和文件夹复制到account2@host2.com host2。
假设我已经使用他的UID获取了所选消息:
msg = connection.fetch(idOne, '(RFC822)'))
和msg是一条很好的消息,下面你有我试图附加消息的代码:
date = connection.fetch(idOne, '(INTERNALDATE)')[1][0]
date = date.split("\"")[1]
authconnection1.append(folder, "", date, msg)
错误是:
ValueError: date_time not of a known type
我已经尝试了许多其他可能的解决方案(使用dateutil将日期字符串转换为datetime对象,使用imaplib.Time2Internaldate我得到了与ValueError相同的错误:date_time不是已知类型),但似乎没有人工作。我在网络上搜索过,但似乎没有人有这个问题。
有什么想法吗?我对它感到非常沮丧......
非常感谢
更新
我已经解决了date_time问题,因为"追加" imaplib的方法想要date_time是一个秒的整数,所以要检索我写这段代码的日期:
# Fetch message from host1
msg = connection.fetch(idOne, '(RFC822)')
# retrieve this message internal date
date = connection.fetch(idOne, '(INTERNALDATE)')[1][0].split("\"")[1]
# Cast str date to datetime object
date = parser.parse(date)
# Removes tzinfo
date = date.replace(tzinfo=None)
# Calculates total seconds between today and the message internal date
date = (datetime.datetime.now()-date).total_seconds()
# Makes the append of the message
authconnection1.append(folder, "", date, msg)
但现在这失败了,错误:
TypeError: expected string or buffer
所以问题只会改变......
有什么想法吗?
更新(已解决):
imaplib工作不正常,所以我为正确的日期/时间附加消息做了一个解决方法。这是我的代码,我希望它能帮助每个人:
以正确格式转换日期的功能:
def convertDate(date):
from time import struct_time
import datetime
from dateutil import parser
date = parser.parse(date)
date = date.timetuple()
return date
主要代码:
#Get message
msg = authconnection.fetch(idOne, '(RFC822)')
#Get message date
date = authconnection.fetch(idOne, '(INTERNALDATE)')[1][0].split("\"")[1]
#Apply my function I've written above
date = convertDate(date)
#Append message with right date
authconnection1.append(folder, flags, date, msg[1][0][1])