使用Python Tkinter编写的简易发送邮件程序

最近学习了下Tkinter,就想写点小东西练习下,这样可以更深入一点,同时也提高兴趣,下面是自己使用tkinter写的一个使用SMTP的简易发送邮件程序,主要由一个登陆窗口和发送邮件窗口组成,用户在登陆窗口输入用户名和密码验证OK后即可登陆邮箱发送邮件。

使用Python Tkinter编写的简易发送邮件程序_第1张图片

若用户名或者密码为空则会提示用户

点击clear可以清除当前用户名和密码


若用户名和密码登陆成功后,会弹出发送邮件界面:

使用Python Tkinter编写的简易发送邮件程序_第2张图片

send to:填写你的目标发送地址

subject: 邮件主题

下面的文本输入框可以输入邮件内容

点击下面的send按钮即可发送邮件,点击new mail则会清除当前所有已填写的内容。

若邮件发送成功,则会弹出提示对跨框:

使用Python Tkinter编写的简易发送邮件程序_第3张图片

下面是代码,不足之处多多指教!

[python]  view plain copy
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3.   
  4.   
  5. from smtplib import *  
  6. from Tkinter import *  
  7. import tkMessageBox  
  8. import string  
  9.   
  10.   
  11. class loginPage(object):  
  12.   
  13.   
  14.     def __init__(self, master, info='Mail Send System'):  
  15.         self.master = master  
  16.         self.mainlabel = Label(master, text=info, justify=CENTER)  
  17.         self.mainlabel.grid(row=0, columnspan=3)  
  18.   
  19.   
  20.         self.user = Label(master, text='username', borderwidth=2)  
  21.         self.user.grid(row=1, sticky=W)  
  22.   
  23.   
  24.         self.pwd = Label(master, text='password', borderwidth=2)  
  25.         self.pwd.grid(row=2, sticky=W)  
  26.   
  27.   
  28.         self.userEntry = Entry(master)  
  29.         self.userEntry.grid(row=1, column=1, columnspan=2)  
  30.         self.userEntry.focus_set()  
  31.   
  32.   
  33.         self.pwdEntry = Entry(master, show='*')  
  34.         self.pwdEntry.grid(row=2, column=1, columnspan=2)  
  35.   
  36.   
  37.         self.loginButton = Button(master, text='Login', borderwidth=2, command=self.login)  
  38.         self.loginButton.grid(row=3, column=1)  
  39.   
  40.   
  41.         self.clearButton = Button(master, text='Clear', borderwidth=2, command=self.clear)  
  42.         self.clearButton.grid(row=3, column=2)  
  43.   
  44.   
  45.     def login(self):  
  46.         self.username = self.userEntry.get().strip()  
  47.         self.passwd = self.pwdEntry.get().strip()  
  48.         if len(self.username) == 0 or len(self.passwd) == 0 or '@' not in self.username:  
  49.             tkMessageBox.showwarning('警告''用户名或者密码为空或邮件格式不正确')  
  50.   
  51.   
  52.             self.clear()  
  53.             self.userEntry.focus_set()  
  54.             return  
  55.   
  56.   
  57.         self.getSmtpHost()  
  58.         self.connect()  
  59.   
  60.   
  61.     def connect(self):  
  62.         'this method will try to connet the SMTP server according the current user'  
  63.         HOST = 'smtp.' + self.smtp +'.com'  
  64.         try:  
  65.             self.mySMTP = SMTP(HOST)  
  66.             self.mySMTP.login(self.username, self.passwd)  
  67.         #except SMTPConnectError:  
  68.         except Exception, e:  
  69.             tkMessageBox.showerror('连接错误''%s' % e)  
  70.             return  
  71.         self.mySendMail = sendMail(self.master, self.mySMTP, self.username)  
  72.   
  73.   
  74.     def clear(self):  
  75.         self.userEntry.delete(0, END)  
  76.         self.pwdEntry.delete(0, END)  
  77.   
  78.   
  79.     def getSmtpHost(self):  
  80.         'this method try to obtian the SMTP HOST according the user account'  
  81.         firstSplit = self.username.split('@')[1]  
  82.         self.smtp = firstSplit.split('.')[0]  
  83.   
  84.   
  85.   
  86.   
  87. class sendMail(object):  
  88.     'my sendemail class'  
  89.     def __init__(self, master, smtp='', sender=''):  
  90.         self.smtp = smtp  
  91.         self.sender = sender  
  92.   
  93.   
  94.         self.sendPage = Toplevel(master)  
  95.   
  96.   
  97.         self.sendToLabel = Label(self.sendPage, text='send to:')  
  98.         self.sendToLabel.grid()  
  99.         self.sendToEntry = Entry(self.sendPage)  
  100.         self.sendToEntry.grid(row=0, column=1)  
  101.   
  102.   
  103.         self.subjectLabel = Label(self.sendPage, text='subject:')  
  104.         self.subjectLabel.grid(row=1, column=0)  
  105.         self.subjectEntry = Entry(self.sendPage)  
  106.         self.subjectEntry.grid(row=1, column=1)  
  107.   
  108.   
  109.         self.fromToLabel = Label(self.sendPage, text='from to:')  
  110.         self.fromToLabel.grid(row=2, column=0)  
  111.         self.formToAdd = Label(self.sendPage, text=self.sender)  
  112.         self.formToAdd.grid(row=2, column=1)  
  113.   
  114.   
  115.         self.sendText = Text(self.sendPage)  
  116.         self.sendText.grid(row=3, column=0, columnspan=2)  
  117.   
  118.   
  119.         self.sendButton = Button(self.sendPage, text='send', command=self.sendMail)  
  120.         self.sendButton.grid(row=4, column=0)  
  121.   
  122.   
  123.         self.newButton = Button(self.sendPage, text='new mail', command=self.newMail)  
  124.         self.newButton.grid(row=4, column=1)  
  125.   
  126.   
  127.     def getMailInfo(self):  
  128.         self.sendToAdd = self.sendToEntry.get().strip()  
  129.         self.subjectInfo = self.subjectEntry.get().strip()  
  130.         self.sendTextInfo = self.sendText.get(1.0, END)  
  131.   
  132.   
  133.     def sendMail(self):  
  134.         self.getMailInfo()  
  135.         body = string.join(("From: %s" % self.sender, "To: %s" % self.sendToAdd, "Subject: %s" % self.subjectInfo, "", self.sendTextInfo), "\r\n")  
  136.         try:  
  137.             self.smtp.sendmail(self.sender, [self.sendToAdd], body)  
  138.         except Exception, e:  
  139.             tkMessageBox.showerr('发送失败'"%s" % e)  
  140.             return  
  141.         tkMessageBox.showinfo('提示''邮件已发送成功!')  
  142.   
  143.   
  144.     def newMail(self):  
  145.         self.sendToEntry.delete(0, END)  
  146.         self.subjectEntry.delete(0, END)  
  147.         self.sendText.delete(1.0, END)  
  148.   
  149.   
  150. if __name__ == '__main__':  
  151.   
  152.   
  153.     root = Tk()  
  154.     root.title('简易发送邮件程序')  
  155.   
  156.   
  157.     myLogin = loginPage(root)  
  158.   
  159.   
  160.     #root.wait_window(myLogin.mySendMail.sendPage)  
  161.     mainloop()  

你可能感兴趣的:(使用Python Tkinter编写的简易发送邮件程序)