Найти - Пользователи
Полная версия: Пример использования ScrolledText в почтовом клиенте
Начало » GUI » Пример использования ScrolledText в почтовом клиенте
1
dmitry767
Вот мучил мучил… Намучил :))))
Труднее всего (ввиду отсутствия знаний английского и русской документации по модулю ScrolledText), было запихать в сообщение его (сообщения этого) текст :)) Плюс под комментом #кодировка, использовано решение (нашёл на этом форуме, кстати спасибо большое за ссылку!), которое у меня заработало.
Надо немного подправить в скрипте адреса почты и логин с паролем. А так же smtp сервер. Адрес сервера узнать просто - пускаете пинг на smtp.mail.ru(или какой там у вас) из командной строки, там и увидите адрес.
Просьба гуру, не попрекать некрасивостью кода, а подсказать как сделать лучше. ;) Мы тут новенькие всё таки… Упс… Одну строчечку забыл….

вот код:

# -*- coding: utf-8 -*-
import Tkinter, smtplib
from Tkinter import *
from ScrolledText import *
from email.MIMEText import MIMEText
import locale, codecs; locale.setlocale(locale.LC_ALL, '')

#кодировка тупо скопировал.. сам пытаюсь понять :)))
encoding = locale.getlocale()[1]
if not encoding:
encoding = "utf-8"
import sys;reload(sys);sys.setdefaultencoding(encoding)
sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors = "replace")
sys.stderr = codecs.getwriter(encoding)(sys.stderr, errors = "replace")

#обработка событий
#функция завершения приложения
def end_program(event):
window.destroy()

#функция отправки сообщения (до пункта #инициализация, эт всё одна функция)
def send(event):

#сбор данных необходимых для отправки сообщения
me = 'ваш почтовый адрес'
server = "194.67.23.111" # "smtp.mail.ru" smtp сервер, вашего почтового провайдера 8-)))
port = 25
user_name = "логин"
user_passwd = "пароль"
s = smtplib.SMTP(server, port)

#формирование сообщения
sub = subject.get()
addr = address.get()
text = text_right.get(text_right.index(0.0), END)
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = sub
msg['From'] = me
msg['To'] = addr

#отправка
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, addr, msg.as_string())
s.quit()

#инициализация
window = Tk()
window.title("XMails!")

#построение интерфейса
#кнопки на левой панели
left_panel = PanedWindow(window)
left_panel.pack(side = LEFT, fill = BOTH)

#новое сообщение (пока без событий)
new_message = Button(left_panel)
new_message["text"] = "New Message"
new_message["width"] = 30
new_message.pack()

#кнопка отправки сообщения
send_button = Button(left_panel)
send_button["text"] = "Send"
send_button["width"] = 30
send_button.bind("<Button>", send)
send_button.pack()

#кнопка вызова настроек приложения (тож пока без событий)
perf_button = Button(left_panel)
perf_button["text"] = "Perference"
perf_button["width"] = 30
perf_button.pack()

#кнопка завершения приложения
exit_button = Button(left_panel)
exit_button["text"] = "Exit"
exit_button["width"] = 30
exit_button.bind("<Button>", end_program)
exit_button.pack()

#верхняя панель. поле адреса
top_panel = PanedWindow(window)
top_panel.pack(side = TOP, fill = BOTH)
t = Label(top_panel)
t["width"] = 20
t["text"] = "Mail from: "
t.pack(side = LEFT, fill = BOTH)
address = Entry(top_panel)
address.pack(side = RIGHT, expand = YES, fill = BOTH)

#Верхняя панель. поле темы
theme_panel = PanedWindow(window)
theme_panel.pack(fill = BOTH)
t2 = Label(theme_panel)
t2["text"] = "Subject: "
t2["width"] = 20
t2.pack(side = LEFT, fill = BOTH)
subject = Entry(theme_panel)
subject.pack(side = RIGHT, expand = YES, fill = BOTH)

#Панель с текстом сообщения
right_panel = PanedWindow(window)
right_panel.pack(side = RIGHT, expand = YES, fill = BOTH)
text_right = ScrolledText(right_panel)
text_right.pack(expand = YES, fill = BOTH)

#конец цикла
window.mainloop()
Вот вроде и всё :)
igor.kaist
не понял вопроса, в чем проблема то?
dmitry767
Собственно сам вопрос - интерфейс подвешивается на время отправки сообщения. Как это обойти?
igor.kaist
Отправку вынести в отдельный поток
dmitry767
Спасиб :) Уже разобрался. Теперь опять проблема с кодировками. Когда смотришь сообщение через веб-интерфейс, всё в порядке. если получаешь в Outlook - крякозябры :)))) Ладн, это вроде как всеобщая проблема…
igor.kaist
В cp1251 отправляй, все будет хорошо :)
pythonwin
dmitry767, у тебя в заголовке скрипта прописана кодировка utf-8
далее ты насильно устанавливаешь кодировку поумолчанию utf-8 и отправляешь письмо в как бы в cp1251. перекодировать текст нужно.
dmitry767
урра! что то я совсем пропустил вот это -
 msg = MIMEText(text, "", "cp1251")
сменил на 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