Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Пример использования ScrolledText в почтовом клиенте [RSS Feed]

#1 Фев. 1, 2009 18:56:46

dmitry767
От:
Зарегистрирован: 2009-01-28
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

Вот мучил мучил… Намучил :))))
Труднее всего (ввиду отсутствия знаний английского и русской документации по модулю 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()
Вот вроде и всё :)



Отредактировано (Фев. 1, 2009 22:10:39)

Офлайн

#2 Фев. 2, 2009 10:29:40

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

не понял вопроса, в чем проблема то?



Отредактировано (Фев. 2, 2009 10:31:05)

Офлайн

#3 Фев. 2, 2009 18:58:42

dmitry767
От:
Зарегистрирован: 2009-01-28
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

Собственно сам вопрос - интерфейс подвешивается на время отправки сообщения. Как это обойти?



Офлайн

#4 Фев. 3, 2009 10:32:43

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

Отправку вынести в отдельный поток



Офлайн

#5 Фев. 3, 2009 10:37:25

dmitry767
От:
Зарегистрирован: 2009-01-28
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

Спасиб :) Уже разобрался. Теперь опять проблема с кодировками. Когда смотришь сообщение через веб-интерфейс, всё в порядке. если получаешь в Outlook - крякозябры :)))) Ладн, это вроде как всеобщая проблема…



Офлайн

#6 Фев. 3, 2009 11:37:38

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

В cp1251 отправляй, все будет хорошо :)



Офлайн

#7 Фев. 3, 2009 12:39:35

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

Пример использования ScrolledText в почтовом клиенте

dmitry767, у тебя в заголовке скрипта прописана кодировка utf-8
далее ты насильно устанавливаешь кодировку поумолчанию utf-8 и отправляешь письмо в как бы в cp1251. перекодировать текст нужно.



Офлайн

#8 Фев. 5, 2009 22:19:08

dmitry767
От:
Зарегистрирован: 2009-01-28
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Пример использования ScrolledText в почтовом клиенте

урра! что то я совсем пропустил вот это -

 msg = MIMEText(text, "", "cp1251")
сменил на utf-8 и вроде как всё нормально заработало :)
Эх, невнимательность…



Офлайн

  • Начало
  • » GUI
  • » Пример использования ScrolledText в почтовом клиенте[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version