Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Апрель 12, 2007 08:49:49

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

Создаю письмо с вложенным файлом, не могу добиться отображения текста письма не каракулями. Пример кода:

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()

Что упустила? И есть ли у кого-нибудь готовый пример с обратным действием, т.е. с получением письма с вложением и сохранением его в нужную директорию?



Офлайн

#2 Апрель 12, 2007 12:07:23

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

А почему 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()



Офлайн

#3 Апрель 12, 2007 21:17:02

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

А еще лучше UTF-8.



Офлайн

#4 Апрель 13, 2007 08:25:05

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

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()

Ваши предложения?))



Офлайн

#5 Апрель 13, 2007 09:12:59

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

proDiva
Mkdir
А еще лучше UTF-8.
Чем лучше? Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
У меня стоит. КОИ-8 sucks.



Офлайн

#6 Апрель 13, 2007 09:25:49

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

bialix
У меня стоит. КОИ-8 sucks.
Ну я и делаю “msg.attach( MIMEText(text, _charset = ‘koi8-r’) )”. По-моему, эта кодировка по умолчанию в Outlook Express.



Офлайн

#7 Апрель 13, 2007 09:57:11

Unnamed
От:
Зарегистрирован: 2006-12-27
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

msg.attach( MIMEText(text, _charset = ‘koi8-r’)
А как у вас с украинскими буквами там?
Ну люди, все таки 21 век, да и кто использует експресс нынче? Сейчас опера да gmail…



Офлайн

#8 Апрель 13, 2007 10:20:26

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

proDiva
Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
А какая разница какая кодировка установлена по умолчанию? Она используется только для кривых сообщений в которых вообще не проставлена кодировка.
proDiva
Когда ко мне приходят письма в ютф, мне приходится менять кодировку.
Не проще поменять почтовый клиент?



Офлайн

#9 Апрель 17, 2007 08:09:10

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

OlDer
Не проще поменять почтовый клиент?
Не проще. мне нравится outlook express



Офлайн

#10 Апрель 17, 2007 08:21:15

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Питон для работы с электронной почтой

OlDer
proDiva
Разве у кого-то в почтовых программах стоит по умолчанию кодировка utf-8?
А какая разница какая кодировка установлена по умолчанию? Она используется только для кривых сообщений в которых вообще не проставлена кодировка.
Я думал, мы говорим про исходящую почту.



Отредактировано (Апрель 17, 2007 08:22:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version