邮件发送
-
-
邮件服务器、用户名、密码
-
相关协议:
-
SMTP:简单邮件传输协议
-
POP3:邮局通讯协议
-
IMAP:交互式邮件存取协议
-
-
SMTP协议默认端口是25
-
-
用途:网站注册激活、通知、找回密码等。
-
库:
smtplib
-
示例:
import os import smtplib from email.mime.text import MIMEText # 邮箱服务器 mail_server = 'smtp.qq.com' # 用户名 mail_user = '542684416@qq.com' # 密码 或 授权码(QQ邮箱) # 为了不对外公开隐私信息,我们可以通过环境变量获取 mail_pwd = os.getenv('MAIL_PASSWORD', '授权码') # 发送的邮件消息 content = '请点击下面链接完成激活<a href="http://www.baidu.com">激活</a>' # 创建用于发送的邮件消息对象 # 若发送的消息是HTML,需要指定第二个参数进行说明 message = MIMEText(content, 'html') # 设置主题 message['Subject'] = '账户激活' # 设置发送者 message['From'] = mail_user # 创建一个用于发送邮件的对象,加密传输使用这个类:smtplib.SMTP_SSL('smtp.qq.com', 465) mail = smtplib.SMTP(mail_server, 25) # 身份认证 mail.login(mail_user, mail_pwd) # 接收地址,单个传递字符串,多个传列表 to = ***@qq.com' # 发送邮件 mail.sendmail(mail_user, to, message.as_string()) # 结束 mail.quit()
-
总结:
-
邮箱服务器配置
-
创建用于发送的消息对象
MIMEText
-
创建用于发送邮件的对象
smtplib.SMTP/smtplib.SMTP_SSL
-
使用邮件发送对象发送邮件消息对象
-
预备知识
-
http.client:相当于浏览器向服务器发送请求
import http.client # 创建对象(相当于一个浏览器) connect = http.client.HTTPConnection('www.baidu.com') # 发送请求 connect.request(method='GET', url='http://www.baidu.com') # 获取响应 resp = connect.getresponse() # 打印响应 print(resp.read().decode('utf-8'))
-
json与xml
-
说明:使用非常广泛的数据传输格式,现在使用较多的时json。
-
JSON使用:
import json d = {'name': 'xiaoming', 'age': 20} # 将字典对象转换为JSON字符串 s = json.dumps(d) print(s) print(type(s)) # 将JSON字符串转换为字典对象 d2 = json.loads(s) print(d2) print(type(d2))
-
-
urllib.parse
from urllib.parse import urlencode, urlparse, parse_qs d = {'name':'xiaoming', 'age': 20} # 将字典数据进行URL编码:name=xiaoming&age=20 print(urlencode(d)) url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=python&rsv_pq=ac798cd20001b3c5&rsv_t=8b4eWBso%2FMiB2fKr%2FHbj8K8ajXQF9Zrm%2F72a811WkQgVAAliA%2BP66as7QHQ&rqlang=cn&rsv_enter=1&rsv_sug3=7&rsv_sug1=5&rsv_sug7=101&rsv_sug2=0&inputT=2797&rsv_sug4=3093&rsv_sug=1' # 解析url p = urlparse(url) # print(p.query) # 解析参数:将请求字符串转换为字典 d2 = parse_qs(p.query) print(d2)
短信发送
-
说明:注册验证码、通知消息、营销短信等
-
平台:阿里、秒嘀、云之讯、...
-
认识:云之讯(www.ucpaas.com)
-
实例:
# 账户id sid = 'c1d54bae74e733d2b7e39f19ff006244' # 账户token token = '2426bff7df8ff95f59fcbcdce3362c58' # 应用标识 appid = 'fac78e7f7f0647c7a47c4809ff564f5c' # 模板id templateid = '291768' # 模板参数,多个使用英文逗号隔开 param = 'dahua' # 手机号 mobile = '17596129603' # 参数字典 form_data = { 'sid': sid, 'token': token, 'appid': appid, 'templateid': templateid, 'param': param, 'mobile': mobile } # 将字典转换为JSON字符串 import json form_data = json.dumps(form_data) # print(form_data) # 创建'浏览器'对象 import http.client connect = http.client.HTTPConnection('open.ucpaas.com') # 请求地址 url = 'https://open.ucpaas.com/ol/sms/sendsms' # 请求头 headers = { 'Accept': 'application/json', 'Content-Type': 'application/json;charset=utf-8' } # 发送请求 connect.request(method='POST', url=url, body=form_data, headers=headers) # 获取响应 resp = connect.getresponse() # 打印结果 print(resp.read().decode('utf-8'))
邮箱
# 导包:需要用到的包tkinter用于创建pythonGUI界面
import tkinter import time from email.mime.text import MIMEText import smtplib from tkinter import messagebox class EmailSend: def __init__(self): # 创建窗口 window=tkinter.Tk() #控制窗口设定宽高500x300像素 window.geometry("500x400") #控制窗口显示大小不可缩放 window.resizable(width=False,height=False) #设置title window.title("="*20+"发送邮件"+"="*10) #在窗口中添加 邮件主题 文本标签 label(标签) label_text1=tkinter.Label(window,text="邮件主题") #将文本标签塞入 label_text1.pack() #创建文本框(绑定窗口,定义宽度) self.input_title=tkinter.Entry(window,width=50) #塞入窗口 self.input_title.pack() #接下来继续新增标签 lable_text2=tkinter.Label(window,text="邮件内容") lable_text2.pack() self.input_content=tkinter.Entry(window,width=50) self.input_content.pack() label_from=tkinter.Label(window,text="发件人账号") label_from.pack() self.input_from=tkinter.Entry(window,width=50) self.input_from.pack() label_pwd=tkinter.Label(window,text="发件人密码(授权码)") label_pwd.pack() self.input_pwd=tkinter.Entry(window,width=50) self.input_pwd.pack() lable_text3=tkinter.Label(window,text="收件人") lable_text3.pack() self.input_to=tkinter.Entry(window,width=50) self.input_to.pack() button=tkinter.Button(window,text="点击发送",command=self.send) #在绑定同时添加定位距离上面元素20,按钮y轴高度10,宽度20 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() '''下面写发送邮件方法''' def send(self): email_server="smtp.qq.com"#服务器 email_user=self.input_from.get()#账号 email_pwd=self.input_pwd.get()#授权码 #内容 content=self.input_content.get() #将发送内容更改为邮件 content=MIMEText(content) #发送人 content["From"]=email_user #标题 content["subject"]=self.input_title.get() #收件人 to=self.input_to.get() #创建邮件对象 email_main=smtplib.SMTP(email_server,25) #登录 email_main.login(user=email_user,password=email_pwd) #发送邮件(发送人,收件人,内容.string() email_main.sendmail(email_user,to,content.as_string()) #断开链接 email_main.quit() #弹出框提示发送成功 messagebox.showinfo("发送状态","发送成功") sendem=EmailSend()
-