У меня есть скрипт python 2.7, работающий на окнах. Он входит в Gmail, проверяет наличие новых сообщений электронной почты и вложений:Неверное кодирование вложения электронной почты
#!/usr/bin/env python
# -*- coding: utf-8 -*-
file_types = ["pdf", "doc", "docx"] # download attachments with these extentions
login = "login"
passw = "password"
imap_server = "imap.gmail.com"
smtp_server = "smtp.gmail.com"
smtp_port = 587
from smtplib import SMTP
from email.parser import HeaderParser
from email.MIMEText import MIMEText
import sys
import imaplib
import getpass
import email
import datetime
import os
import time
if __name__ == "__main__":
try:
while True:
session = imaplib.IMAP4_SSL(imap_server)
try:
rv, data = session.login(login, passw)
print "Logged in: ", rv
except imaplib.IMAP4.error:
print "Login failed!"
sys.exit(1)
rv, mailboxes = session.list()
rv, data = session.select(foldr)
rv, data = session.search(None, "(UNSEEN)")
for num in data[ 0 ].split():
rv, data = session.fetch(num, "(RFC822)")
for rpart in data:
if isinstance(rpart, tuple):
msg = email.message_from_string(rpart[ 1 ])
to = email.utils.parseaddr(msg[ "From" ])[ 1 ]
text = data[ 0 ][ 1 ]
msg = email.message_from_string(text)
got = []
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = part.get_filename()
print "file: ", filename
print "Extention: ", filename.split(".")[ -1 ]
if filename.split(".")[ -1 ] not in file_types:
continue
data = part.get_payload(decode = True)
if not data:
continue
date = datetime.datetime.now().strftime("%Y-%m-%d")
if not os.path.isdir("CONTENT"):
os.mkdir("CONTENT")
if not os.path.isdir("CONTENT/" + date):
os.mkdir("CONTENT/" + date)
ftime = datetime.datetime.now().strftime("%H-%M-%S")
new_file = "CONTENT/" + date + "/" + ftime + "_" + filename
f = open(new_file, 'wb')
print "Got new file %s from %s" % (new_file, to)
got.append(filename.encode("utf-8"))
f.write(data)
f.close()
session.close()
session.logout()
time.sleep(60)
except:
print "TARFUN!"
И проблема в том, что последняя печать читает мусор:
=?UTF-8?B?0YfQsNGB0YLRjCAxINGC0LXQutGB0YIg0LzQtdGC0L7QtNC40YfQutC4LmRv?=
, например так позже чеки не работают. На linux все работает отлично. На данный момент я попытался использовать d/e [n] имя файла кода для utf-8. Но он ничего не сделал. Заранее спасибо.
Можете ли вы дать нам [минимальный, полный пример] (http://stackoverflow.com/help/mcve), с достаточным кодом для запуска чего-либо (и постороннего кода, например, выборки IMAP, удаление) и входных данных запустить его (например, возможно, как строковый литерал в источнике)? – abarnert
@abarnert отредактировал сообщение –
Нет, это не минимальный, полный пример.Никто не может запускать этот код или ничего тестировать (если вы не дадите нам свое имя пользователя и пароль Gmail и не обещаете больше не получать почту или каким-либо иным образом изменять что-либо о вашем почтовом ящике, что не является разумным). Пожалуйста, посмотрите на ссылку помощи, которую я дал, и сделайте то, что я предложил: удалите посторонний код и дайте нам входные данные для соответствующего кода. – abarnert