import tkinter as tk
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
from email.utils import formataddr
import tkinter.messagebox
import tkinter.filedialog
class MailSender:
def __init__(self):
self.mail_host = 'smtp.qq.com' # 使用qq服务器
self.mail_user = '*****@qq.com' # 发件人邮箱
self.mail_pwd = '****' # 发件人邮箱授权码
def send_mail(self, sender, receiver, subject, content, attach_file=None):
message = MIMEMultipart()
message['From'] = formataddr((Header(sender, 'utf-8').encode(), sender))
message['To'] = formataddr((Header(receiver, 'utf-8').encode(), receiver))
message['Subject'] = Header(subject, 'utf-8')
# 构造文本内容
text_content = MIMEText(content, 'plain', 'utf-8')
message.attach(text_content)
# 构造附件
if attach_file:
attach = MIMEApplication(open(attach_file, 'rb').read())
attach.add_header('Content-Disposition', 'attachment', filename=attach_file)
message.attach(attach)
# 连接SMTP服务器并发送邮件
smtp_obj = smtplib.SMTP()
smtp_obj.connect(self.mail_host)
smtp_obj.login(self.mail_user, self.mail_pwd)
smtp_obj.sendmail(sender, receiver, message.as_string())
smtp_obj.quit()
class MailGUI:
def __init__(self):
self.mail_sender = MailSender()
self.root = tk.Tk()
self.root.title('邮件发送器')
self.root.geometry('500x300')
tk.Label(self.root, text='发件人邮箱:').grid(row=0, column=0)
self.sender_entry = tk.Entry(self.root, width=30)
self.sender_entry.grid(row=0, column=1)
tk.Label(self.root, text='收件人邮箱:').grid(row=1, column=0)
self.receiver_entry = tk.Entry(self.root, width=30)
self.receiver_entry.grid(row=1, column=1)
self.select_file_button = tk.Button(self.root, text='选择文件', command=self.select_file)
self.select_file_button.grid(row=2, column=2, sticky=tk.W)
# 按钮颜色为绿色,距离左边2个像素
self.select_file_button.config(bg='#FBFBFB', padx=10)
tk.Label(self.root, text='邮件标题:').grid(row=2, column=0)
self.subject_entry = tk.Entry(self.root, width=30)
self.subject_entry.grid(row=2, column=1)
tk.Label(self.root, text='邮件内容:').grid(row=3, column=0)
self.content_text = tk.Text(self.root, width=30, height=10)
self.content_text.grid(row=3, column=1)
self.send_button = tk.Button(self.root, text='发送邮件', command=self.send_mail)
self.send_button.grid(row=4, column=1)
# 选择文件
self.root.mainloop()
def select_file(self):
self.file_path = tk.filedialog.askopenfilename()
print(self.file_path)
def send_mail(self):
sender = self.sender_entry.get()
receiver = self.receiver_entry.get()
subject = self.subject_entry.get()
content = self.content_text.get('0.0', 'end')
self.mail_sender.send_mail(sender, receiver, subject, content, self.file_path)
tkinter.messagebox.showinfo('提示', '邮件发送成功')
if __name__ == '__main__':
mail_gui = MailGUI()
python实现基于QQ的邮件服务进行发送消息的tkinter示例代码
最新推荐文章于 2024-01-23 18:05:12 发布