python实现基于QQ的邮件服务进行发送消息的tkinter示例代码

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值