Evernote开发中,弯路绕完了…
今天把enml到html的转换做完了。其实,重点也只有邮件的接收,还有解码的过程。目前的效果是:通过evernote邮件转发的功能将笔记发送到指定邮箱,然后再用python脚本把邮件下下来&decode。最终效果就是本地完整显示笔记内容~
唯一碰到的问题就是转换不完全。从evernote格式转换到html的时候,总会在图片引用的源代码上留下个”cid:”的小尾巴。
先上代码~首先是邮件获取部分
<br />
import imaplib<br />
import email<br />
import StringIO</p>
<p>gmail_user = 'email'<br />
gmail_pass = 'pass'<br />
M = imaplib.IMAP4_SSL('imap.gmail.com')<br />
M.login(gmail_user, gmail_pass)</p>
<p>fileHandle = open ( 'mail_all.eml', 'w' )<br />
M.select()<br />
tpe, data = M.search(None, "(UNSEEN)")<br />
if data[0] != '':<br />
print 'you have new mail'<br />
for num in data[0].split():<br />
tpe, data = M.fetch(num, '(RFC822)')<br />
fileHandle.write ( data[0][1] )<br />
typ, data = M.search(None, 'ALL')<br />
fileHandle.close()<br />
M.close()<br />
M.logout()<br />
然后是解码部分
<br />
import email<br />
import re</p>
<p>fp = open("mail_all.eml", "r")<br />
fileHandle = open("mail_all.html", "w")<br />
msg = email.message_from_file(fp)<br />
subject = msg.get("subject")<br />
h = email.Header.Header(subject)<br />
dh = email.Header.decode_header(h)<br />
subject = dh[0][0]<br />
print "subject:", subject<br />
fileHandle.write ( subject )<br />
print "from: ", email.utils.parseaddr(msg.get("from"))[1]<br />
print "to: ", email.utils.parseaddr(msg.get("to"))[1]</p>
<p>for par in msg.walk():<br />
if not par.is_multipart():<br />
name = par.get_param("name")<br />
if name:<br />
h = email.Header.Header(name)<br />
dh = email.Header.decode_header(h)<br />
fname = dh[0][0]<br />
print 'attachment name:', fname<br />
data = par.get_payload(decode=True)</p>
<p> try:<br />
f = open(fname, 'wb')<br />
except:<br />
print 'error, change name'<br />
f = open('aaaa', 'wb')<br />
f.write(data)<br />
f.close()<br />
else:<br />
data = par.get_payload(decode=True)<br />
#get rid of 'cid:' and show pic correctly<br />
strinfo = re.compile('cid:')<br />
data = strinfo.sub('',data)<br />
fileHandle.write ( data )<br />
print '+'*60<br />
fp.close()<br />