原标题:python基于SMTP实现可视化邮件发送
python基于SMTP实现可视化邮件发送
今天无敌哥带大家来实现一下通过python程序来发送邮件。
环境:python3.8 pycharm
首先我们先来说一下SMTP,SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及附件邮件,python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
第一步:因为后续我们需要用到一个qq邮箱的授权码所以接下来我们来获取一下授权码,方法如下
1)先登录到自己的qq邮箱点击设置
2)进入账户选项
3)进入后往下拉找到POP3/SMTP服务点击开启
4)点击开启以后我们需要按照指示给运营商发送短信,发送后点击我已发送
5)然后我们就获取了自己的授权码,记得把授权码保存好,一会儿我们要用到。
第二步:打开pycharm创建项目进行编码
1)导包:如下可见我们不仅要用到刚刚说的smtplib和email还要用到tkinter库,Tkinter 是 Python 的标准 GUI 库这个库可以帮助我们实现邮件发送的窗口可视化操作。
import tkinter
import time
from email.mime.text import MIMEText
import smtplib
from tkinter import messagebox
2)创建一个类定义其初始化方法__init__方法,在初始化方法当中我们进行邮件发送窗口的搭建,代码如下:
class EmailSend:
def __init__(self):
# 进行gui部分的窗口搭建实现可视化操作
# 窗口创建
window=tkinter.Tk()
# 大小设定
window.geometry("500x400")
# 窗口缩放禁止
window.resizable(width=False,height=False)
# 定义title
window.title("邮件发送")
# 主题定义标签
label=tkinter.Label(window,text="邮件主题")
# 把文本放入窗口
label.pack()
#文本框 主题
self.title=tkinter.Entry(window,width=50)
self.title.pack()
# 定义内容标签
label = tkinter.Label(window, text="邮件内容")
# 把文本放入窗口
label.pack()
# 文本框 内容
self.con = tkinter.Entry(window, width=50)
self.con.pack()
# 定义内容标签
label = tkinter.Label(window, text="发件人账号")
# 把文本放入窗口
label.pack()
# 文本框 账号
self.user = tkinter.Entry(window, width=50)
self.user.pack()
# 定义内容标签
label = tkinter.Label(window, text="授权码(密码)")
# 把文本放入窗口
label.pack()
# 文本框 授权码
self.pwd = tkinter.Entry(window, width=50)
self.pwd.pack()
# 定义内容标签
label = tkinter.Label(window, text="收件人")
# 把文本放入窗口
label.pack()
# 文本框 收件人
self.to = tkinter.Entry(window, width=50)
self.to.pack()
# 发送按钮
button=tkinter.Button(window,text="点击发送",command=self.send)
button.pack(side="top",pady=20,ipady=10,ipadx=20)
timetxt=time.strftime('%Y-%m-%d-%H:%M')
label_time=tkinter.Label(window,text="发送时间:【%s】"%timetxt)
label_time.pack()
# 显示
window.mainloop()
pass
3)在以上我们定义了一个邮件发送的窗口添加了输入和发送组件我们可以定义main方法来实例化运行一下看效果
if __name__ == '__main__':
wind= EmailSend()
pass
4)接下来我们来定义刚刚已经绑定到按钮上的send方法,在一下代码块中我们只需要按照操作步骤一步一步把输入框的值get出来用 MIMEText进行邮件构造再用smtplib进行邮件发送即可
def send(self):
# 当触发发送按钮的时候来调用
# SMTP 邮件发送方法
# 邮件发送所需:邮件主题,邮件内容,邮件发件人账号,授权码,收件人
# 服务
server="smtp.qq.com"
# 账号
user=self.user.get()
# 授权码
pwd=self.pwd.get()
# 内容
content=self.con.get()
# 内容先去转成邮件形式
content=MIMEText(content)
#发件人
content["From"]=user
# 收件人
to=self.to.get()
# 标题
content["subject"]=self.title.get()
# 定义邮件对象
email_obj=smtplib.SMTP(server,25)
# 登录
email_obj.login(user=user,password=pwd)
# 发送
email_obj.sendmail(user,to,content.as_string())
# 断开连接
email_obj.quit()
# 弹框提示发送成功
messagebox.showinfo("发送成功","发送成功")
pass
5)接下来看一下操作效果,我们自己给自己发送一封邮件内容为“熊猫烧香”,如图输入完成点击发送到邮箱中查看已经发送成功了。
6)最后上一下完整代码:
import tkinter
import time
from email.mime.text import MIMEText
import smtplib
from tkinter import messagebox
class EmailSend:
def __init__(self):
# 进行gui部分的窗口搭建实现可视化操作
# 窗口创建
window=tkinter.Tk()
# 大小设定
window.geometry("500x400")
# 窗口缩放禁止
window.resizable(width=False,height=False)
# 定义title
window.title("邮件发送")
# 主题定义标签
label=tkinter.Label(window,text="邮件主题")
# 把文本放入窗口
label.pack()
#文本框 主题
self.title=tkinter.Entry(window,width=50)
self.title.pack()
# 定义内容标签
label = tkinter.Label(window, text="邮件内容")
# 把文本放入窗口
label.pack()
# 文本框 内容
self.con = tkinter.Entry(window, width=50)
self.con.pack()
# 定义内容标签
label = tkinter.Label(window, text="发件人账号")
# 把文本放入窗口
label.pack()
# 文本框 账号
self.user = tkinter.Entry(window, width=50)
self.user.pack()
# 定义内容标签
label = tkinter.Label(window, text="授权码(密码)")
# 把文本放入窗口
label.pack()
# 文本框 授权码
self.pwd = tkinter.Entry(window, width=50)
self.pwd.pack()
# 定义内容标签
label = tkinter.Label(window, text="收件人")
# 把文本放入窗口
label.pack()
# 文本框 收件人
self.to = tkinter.Entry(window, width=50)
self.to.pack()
# 发送按钮
button=tkinter.Button(window,text="点击发送",command=self.send)
button.pack(side="top",pady=20,ipady=10,ipadx=20)
timetxt=time.strftime('%Y-%m-%d-%H:%M')
label_time=tkinter.Label(window,text="发送时间:【%s】"%timetxt)
label_time.pack()
# 显示
window.mainloop()
pass
def send(self):
# 当触发发送按钮的时候来调用
# SMTP 邮件发送方法
# 邮件发送所需:邮件主题,邮件内容,邮件发件人账号,授权码,收件人
# 服务
server="smtp.qq.com"
# 账号
user=self.user.get()
# 授权码
pwd=self.pwd.get()
# 内容
content=self.con.get()
# 内容先去转成邮件形式
content=MIMEText(content)
#发件人
content["From"]=user
# 收件人
to=self.to.get()
# 标题
content["subject"]=self.title.get()
# 定义邮件对象
email_obj=smtplib.SMTP(server,25)
# 登录
email_obj.login(user=user,password=pwd)
# 发送
email_obj.sendmail(user,to,content.as_string())
# 断开连接
email_obj.quit()
# 弹框提示发送成功
messagebox.showinfo("发送成功","发送成功")
pass
if __name__ == '__main__':
wind= EmailSend()
责任编辑: