Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2008 11:16:28

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Помогите, пожалуйста. Отправляю почту с использованием smtplib. Все отлично работает, но вот только не знаю, как указать такие параметры письма как тип, кодировка и тема.
Заранее спасибо!



Офлайн

#2 Июль 22, 2008 11:51:17

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

А это делает не smtplib, а email



Офлайн

#3 Июль 22, 2008 12:27:05

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

А именно так:

mail = MIMEText('Only right now! MAX-GAIN+ by 10$!!!', 'plain', 'latin-1')
mail['From'] = 'Spam-bot'
mail['To'] = 'Vasya Pupkin'
mail['Subject'] = 'Enhance ... '
'''Перед отправлением нужно сформатировать сообщение в строку, используя метод as_string'''
server = smtplib.SMTP(host)
server.sendmail(from_addr, to_addr, mail.as_string())



Отредактировано (Июль 22, 2008 12:28:18)

Офлайн

#4 Июль 22, 2008 12:32:24

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Большое спасибо вам, уже во всем разобрался.



Офлайн

#5 Июль 22, 2008 12:37:47

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Хотя я сделал не так как ты написал, ZAN, а через объект Message(). Есть какие-нибудь преимущества предложенного тобой способа ?



Офлайн

#6 Июль 22, 2008 13:50:11

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Фактически, именно в данном примере преимуществ нет, однако Message - это просто базовый класс для остальных MIME объектов и использовать его напрямую не следует.

sources
class Message:
“”"Basic message object… ‘'’
Вот с какими проблемами можно столкнуться:
Допустим, создается базовый объект письма.
mail = Message()
mail['To'] = 'smbd'
Теперь к нему нужно добавить текст сообщения. Для этого можно воспользоваться методами mail.attach(payload) или же mail.set_payload(payload)
Допустим, мы захотим использовать первый способ
documentation
attach( payload)
Add the given payload to the current payload, which must be None or a list of Message objects before the call. After the call, the payload will always be a list of Message objects. If you want to set the payload to a scalar object (e.g. a string), use set_payload() instead.
Но! Как бы мы ни приаттачивали текст сообщения (в виде списка, либо отдельного аргумента), будет вываливатся ошибка, что payload - не строка (при вызове метода as_string).
А со вторым все прекрасно работает
>>> mail.set_payload('my text')
>>> mail.as_string()
'\nmy text'
Однако, как в таком случае приаттачить, например, файл, не ясно. Если, конечно, предварительно не сформатировать текст так, чтобы в нее уже был включен приаттаченый элемент. Но! Пакет email как-раз и предназначен для форматирования!

А теперь, как для этого используются MIME объекты:
Если письмо - простой текст, то мой пример выше, если текст с приаттаченым файлом, то будут небольшие изменения - корневым элементом письма будет уже экземпляр класса MIMEMultipart.
mail = MIMEMultipart()
Текст письма создается, как и в предыдущем случае - через MIMEText, а приаттаченый файл - MIME объектом соответствующего типа. В случае, положим, зип-файла - это MIMEApplication.
msg = MIMEText('my text')
input = open('myzip.zip', 'rb')
attachment = MIMEApplication(input.read(), 'zip')
input.close()
attachment.add_header('Content-Disposition', 'attachment', filename='filename_in_the_letter.zip')
mail.attach(msg)
mail.attach(attachment)
mail.as_string()



Офлайн

#7 Июль 22, 2008 14:25:15

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Большое спасибо за достаточно полное объяснение проблемы.



Офлайн

#8 Июль 22, 2008 14:37:40

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Отлично, действительно познавательно, спасибо.

Офлайн

#9 Авг. 12, 2008 10:02:22

Scarfer
От:
Зарегистрирован: 2008-08-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

Помогите решить проблему.
Отправляю почт:

s = smtplib.SMTP(server, port)
#s.set_debuglevel(1)
s.starttls()
s.ehlo()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()

и выдает вот такую вот ошибку:

File “E:\Scripts\Письмо.py”, line 36, in <module>
s.login(user_name, user_passwd)
File “C:\Program Files\Python25\lib\smtplib.py”, line 554, in login
raise SMTPException(“SMTP AUTH extension not supported by server.”)
SMTPException: SMTP AUTH extension not supported by server.



Офлайн

#10 Авг. 12, 2008 10:25:19

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка почты через smtplib

ваш сервер скорее всего не поддерживает plain аутентификацию



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version