Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2009 04:20:55

Slon
От:
Зарегистрирован: 2009-03-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблеммы с base64 в py3k

Решил написать фонарный скрипт для отправки почты.

import smtplib, email.mime.text, email.message, email.header

smtpserver = 'smtp.mail.ru'

while 1:
ask = input('Включить поддержку аутентификации? ')
if ask == 'yes' or ask =='y':
auth = 1
break
elif ask == 'no' or ask == 'n':
auth = 0
break
else:
print ('Необходимо ввести y(yes) или n(no). Попробуйте еще раз.')
continue

if auth ==1:
login = input('Введите логин: ')
passwd = input('Введите пароль: '')

sender = input('Введите адрес отправителя: ')
recipient = input('Введите адрес получателя: ')
subject = input('Введите тему сообщения: ')
msg = input('Введите текст сообщения: ')


mail = email.mime.text.MIMEText(msg.encode('utf-8'), 'plain', 'utf-8')
mail['From'] = sender
mail['To'] = recipient
mail['Subject'] = email.header.Header(subject, 'utf-8')


s = smtplib.SMTP(smtpserver)
s.set_debuglevel(1)
if auth == 1: s.login(login,passwd)
s.sendmail(sender,recipient,mail.as_string())
s.quit()
Все бы ничего, но при попытке прикрутить аутентификацию возникает следующая проблема:
File "/usr/local/lib/python3.0/email/base64mime.py", line 96, in body_encode
enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii")
TypeError: b2a_base64() argument 1 must be bytes or buffer, not str
Капнул глубже и выяснил что в py3k как то странно работает base64.
py2.5.2
>>> import base64
>>> base64.encodestring('qwerty')
'cXdlcnR5\n
py3.0.1
>>> import base64
>>> base64.encodestring('qwerty')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.0/base64.py", line 338, in encodestring
raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
Есть ли какое нибудь решение этой проблемы?



Отредактировано (Апрель 14, 2009 04:23:03)

Офлайн

#2 Апрель 14, 2009 05:27:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Проблеммы с base64 в py3k

Все нормально. В тройке наконец-то решились разделить строки и байты.
Пиши base64.encodestring(b'qwerty')



Офлайн

#3 Апрель 17, 2009 02:37:44

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Проблеммы с base64 в py3k

а еще

   passwd = input('Введите пароль: '')
в конце 2 кавычки :)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version