Форум сайта python.su
#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib, os
import time
from Tkinter import *
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import Encoders
def output(event):
file_base=ent0.get()
me=ent1.get()
text=tex2.get(1.0,END)
subj=ent3.get()
dir_vlozh=ent4.get()
server=ent5.get()
port=ent6.get()
user_name=ent7.get()
user_passwd=ent8.get()
tex9.insert(END,"... Запускаемся ...\n")
print "... Запускаемся ..."
tex9.insert(END,me+"\n")
print me
try:
f=open(file_base,"r")
except:
tex9.insert(END,"НЕ НАЙДЕН ФАЙЛ С БАЗОЙ АДРЕСОВ\n")
print 'НЕ НАЙДЕН ФАЙЛ С БАЗОЙ АДРЕСОВ'
mas=f.readlines()
kol_vo=len(mas)
y=0
for i in mas:
# print i
# отправитель cp1251 koi8-r
# в me нельзя ставить запятые
# me = 'XXX'
me = unicode(me, "utf-8").encode(me,"cp1251")
# получатель
#you = ''
you = i
# текст письма
# text = 'Добрый день!\n'
text = unicode(text, "utf-8").encode("cp1251")
# заголовок письма
# subj = 'xxx'
subj = unicode(subj, "utf-8").encode("cp1251")
# вложения
myfile_mas=os.listdir(dir_vlozh)
# параметры SMTP-сервера
# server = "xxx" # "smtp.bk.ru"
# port = 25
# user_name = "xxx@xxx.ru"
# user_passwd = "xxx"
# msg = MIMEText(text, "", "cp1251")
msg = MIMEMultipart()
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
# msg.attach(MIMEText(text, "", "cp1251"))
# Перебираем массив вложений
for myfile in myfile_mas:
part = MIMEBase('application', "octet-stream")
part.set_payload(open(dir_vlozh+"/"+myfile,"rb").read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
'attachment; filename="%s"' % os.path.basename(myfile))
msg.attach(part)
tex9.insert(END,"Отправляем по адресу "+i+" "+time.ctime()+"\n")
print "Отправляем по адресу ",i, time.ctime()
try:
s = smtplib.SMTP(server, port)
except:
print '+++++++++++++++++++++++++++++++++++++++++'
print 'ОШИБКА ! НЕТ КОННЕКТА К SMTP-СЕРВЕРУ !'
print 'Ждём 5 минут и пытаемся снова подключиться'
print 'Если ничего не выйдет вылезет 5 ошибок и остановка рассылки'
print '+++++++++++++++++++++++++++++++++++++++++'
time.sleep(300)
s = smtplib.SMTP(server, port)
# s.starttls()
try:
s.login(user_name, user_passwd)
except:
print '+++++++++++++++++++++++++++++++++++++++++'
print 'ОШИБКА ! Неверный логин или пароль для '
print 'доступа к почтовому ящику !!! '
print '+++++++++++++++++++++++++++++++++++++++++'
exit('Аварийное завершение работы программы\n+++++++++++++++++++++++++++++++++++++++++')
s.sendmail(me, you, msg.as_string())
s.quit()
tex9.insert(END,"отправили\n")
print "отправили"
y=y+1
ostatok=int(kol_vo)-int(y)
tex9.insert(END,"Осталось ")
tex9.insert(END,ostatok)
tex9.insert(END," адресов\n")
print "Осталось ",ostatok," адресов\n"
tex9.insert(END,"Ждём 10 сек.\n")
print "Ждём 10 сек.\n"
time.sleep(10)
tex9.insert(END,"... Работа завершена ...\n")
print "... Работа завершена ..."
##############################################################################
root = Tk()
lab0 = Label(root, text="Путь до файла базы адресов, включая сам файл:", font="Arial 10")
ent0 = Entry(root,width=40,bd=3)
ent0.insert(END,"/tmp/base.txt")
lab1 = Label(root, text="Отправитель:", font="Arial 10")
ent1 = Entry(root,width=40,bd=3)
ent1.insert(END,"xxx")
lab2 = Label(root, text="Текст письма:", font="Arial 10")
tex2 = Text(root,width=50,height=20,font="Verdana 10",wrap=WORD)
tex2.insert(END,"Добрый день!\n")
lab3 = Label(root, text="Тема:", font="Arial 10")
ent3 = Entry(root,width=40,bd=3)
ent3.insert(END,"xxx")
lab4 = Label(root, text="Папка с вложениями:", font="Arial 10")
ent4 = Entry(root,width=40,bd=3)
ent4.insert(END,"/tmp/files")
lab5 = Label(root, text="Сервер:", font="Arial 10")
ent5 = Entry(root,width=40,bd=3)
ent5.insert(END,"xxx")
lab6 = Label(root, text="Порт:", font="Arial 10")
ent6 = Entry(root,width=40,bd=3)
ent6.insert(END,"25")
lab7 = Label(root, text="Имя:", font="Arial 10")
ent7 = Entry(root,width=40,bd=3)
ent7.insert(END,"xxx")
lab8 = Label(root, text="Пароль:", font="Arial 10")
ent8 = Entry(root,width=40,bd=3)
ent8.insert(END,"xxx")
var=IntVar()
var.set(1)
rad0 = Radiobutton(root,text="Сервер использует шифрование",variable=var,value=0)
rad1 = Radiobutton(root,text="Сервер НЕ использует шифрование",variable=var,value=1)
but = Button(root,text="Отправить",width=7,height=1,bg="white",fg="blue")
lab9 = Label(root, text="Процесс работы:", font="Arial 10")
tex9 = Text(root,width=50,height=5,font="Verdana 10",wrap=WORD)
tex9.insert(END,"Что происходит?: \n")
lab0.grid(row=0,column=0)
ent0.grid(row=0,column=1)
lab1.grid(row=1,column=0)
ent1.grid(row=1,column=1)
lab2.grid(row=2,column=0)
tex2.grid(row=2,column=1)
lab3.grid(row=3,column=0)
ent3.grid(row=3,column=1)
lab4.grid(row=4,column=0)
ent4.grid(row=4,column=1)
lab5.grid(row=5,column=0)
ent5.grid(row=5,column=1)
lab6.grid(row=6,column=0)
ent6.grid(row=6,column=1)
lab7.grid(row=7,column=0)
ent7.grid(row=7,column=1)
lab8.grid(row=8,column=0)
ent8.grid(row=8,column=1)
rad0.grid(row=9,column=0)
rad1.grid(row=10,column=0)
but.grid(row=11,column=1)
but.bind("<Button-1>",output)
lab9.grid(row=12,column=0)
tex9.grid(row=12,column=1)
root.mainloop()
Офлайн
Текст для виджетов должен быть в юникоде. Попробуйте так:
Label(root, text=u“Путь до файла базы адресов, включая сам файл:”, font=“Arial 10”)
Хотя тут еще зависит от того, как выполнять. Сохранив ваш пример в файл в кодировке utf-8 и запустив его
в юникодной локали
python tmp.py
все заработало как надо. Тут больше вопрос в вашей локали, я так думаю.
Отредактировано (Июль 26, 2010 14:22:40)
Офлайн
ошибка следующая:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "test.py", line 43, in output
me = unicode(me, "utf-8").encode(me,"cp1251")
TypeError: decoding Unicode is not supported
Офлайн
me = unicode(me, “utf-8”).encode(“cp1251”)
или
me = me.encode(“cp1251”)
Офлайн
Спасибо balu, вариант me = me.encode(“cp1251”) сработал !
Офлайн