Найти - Пользователи
Полная версия: Питон для работы с электронной почтой
Начало » Network » Питон для работы с электронной почтой
1 2 3
proDiva
Создаю письмо с вложенным файлом, не могу добиться отображения текста письма не каракулями. Пример кода:

from smtplib import SMTP
import poplib, email
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
from email import Charset

class cb_export:
def send_mail(self):
msg = MIMEMultipart()
msg = fromadr
msg = toadr
msg = formatdate(localtime=True)
msg = subject
msg.attach( MIMEText(text, _charset = ‘windows-1252’) ) # тема письма отображается кириллицей

part = MIMEBase('application', “octet-stream”)
part.set_payload( open(sql_file,“rb”).read() )
Encoders.encode_base64(part)

part.add_header('Content-Disposition', ‘attachment; filename=“%s”’ % os.path.basename(sql_file))
msg.attach(part)

con = SMTP(out_server)
con.login(username, userpass)
con.set_debuglevel(1)
con.sendmail(fromadr, toadr, msg.as_string())
con.quit()

cb = cb_export()
cb.send_mail()

Что упустила? И есть ли у кого-нибудь готовый пример с обратным действием, т.е. с получением письма с вложением и сохранением его в нужную директорию?
OlDer
А почему windows-1252 это ведь не для кириллицы кодировка. Для кириллицы должно быть windows-1251.
proDiva
И есть ли у кого-нибудь готовый пример с обратным действием, т.е. с получением письма с вложением и сохранением его в нужную директорию?
import email, sys
msg = email.message_from_file(sys.stdin)
for part in msg.walk():
if part.get_content_maintype() == ‘multipart’:
continue
filename = part.get_filename()
if not filename:
continue
fp = open(filename, ‘wb’)
fp.write(part.get_payload(decode=1))
fp.close()
Mkdir
А еще лучше UTF-8.
proDiva
Mkdir
А еще лучше UTF-8.
Чем лучше? Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8? Когда ко мне приходят письма в ютф, мне приходится менять кодировку.
Вот новый вариант:

#!/usr/bin/env python
# -*- coding: cp1251 -*-
“”“Функции для клиентской базы”“”

from smtplib import SMTP
import poplib, email
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Header import make_header as mkh
from email.Header import decode_header as dkh
from email.Utils import COMMASPACE, formatdate
from email import Encoders
from email import Charset

in_server = ‘pop3.mail.ru’
out_server = ‘smtp.mail.ru’
username = ‘'
userpass = ’'
fromadr = ‘' # от кого
toadr = ’' #кому
text = u'''Бе-бе-бе)))'''.encode('koi8-r') # текст письма
subject = ‘Привет-привет!’ # тема
sql_file = ‘c:/text.txt’ # вложение

class cb_import:
def receive_mail(self):
con = poplib.POP3(in_server)
con.getwelcome()
con.user(username)
con.pass_(userpass)
response, lst, octets = con.list()
for msgnum, msgsize in :
(resp, lines, octets) = con.retr(msgnum)
msgtxt = “\n”.join(lines)+“\n\n”
msg = email.message_from_string(msgtxt)
msg_from = msg
msg_to = msg
msg_date = msg
msg_subj = “”.join([text for text,enc in dkh(msg)])
print “* От: %s\n* Кому: %s\n* Дата: %s\n* Тема: %s\n” % (msg_from,msg_to,msg_date,msg_subj)
msg_parts = [(part.get_filename(), part.get_payload(decode=True))
for part in msg.walk() if part.get_content_type() == ‘text/plain’]
for name,data in msg_parts:
if name != None: # вложенный текстовый файл
print “Вложенный файл: ”+name
f = file(name,'wb')
f.write(data)
f.close()
else: # текст письма
print “Текст письма: ”+str(data)
con.quit()

class cb_export:
def send_mail(self):
msg = MIMEMultipart()
msg = fromadr
msg = toadr
msg = formatdate(localtime=True)
msg = mkh()
msg.attach( MIMEText(text, _charset = ‘koi8-r’) )

#part = MIMEBase('application', ‘octet-stream’)
part = MIMEBase('text', ‘plain’) # вложение для текстового файла
part.set_payload( open(sql_file,“rb”).read() )
Encoders.encode_base64(part)

part.add_header('Content-Disposition', ‘attachment’, filename=os.path.basename(sql_file))
msg.attach(part)

con = SMTP(out_server)
con.login(username, userpass)
con.set_debuglevel(1)
con.sendmail(fromadr, toadr, msg.as_string())
con.quit()

#cb = cb_export()
#cb.send_mail()
#cb = cb_import()
#cb.receive_mail()

Ваши предложения?))
bialix
proDiva
Mkdir
А еще лучше UTF-8.
Чем лучше? Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
У меня стоит. КОИ-8 sucks.
proDiva
bialix
У меня стоит. КОИ-8 sucks.
Ну я и делаю “msg.attach( MIMEText(text, _charset = ‘koi8-r’) )”. По-моему, эта кодировка по умолчанию в Outlook Express.
Unnamed
msg.attach( MIMEText(text, _charset = ‘koi8-r’)
А как у вас с украинскими буквами там?
Ну люди, все таки 21 век, да и кто использует експресс нынче? Сейчас опера да gmail…
OlDer
proDiva
Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
А какая разница какая кодировка установлена по умолчанию? Она используется только для кривых сообщений в которых вообще не проставлена кодировка.
proDiva
Когда ко мне приходят письма в ютф, мне приходится менять кодировку.
Не проще поменять почтовый клиент?
proDiva
OlDer
Не проще поменять почтовый клиент?
Не проще. мне нравится outlook express
bialix
OlDer
proDiva
Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
А какая разница какая кодировка установлена по умолчанию? Она используется только для кривых сообщений в которых вообще не проставлена кодировка.
Я думал, мы говорим про исходящую почту.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB