PYTHON使用SMTP发送邮件

Smtplib模块实现发送邮件的功能,在Python2.3以后Python自带Smtplib模块,无需额外安装。
SMTP(Simple Mail Transfer Protocol)是一个简单的基于文本的协议。在其之上指定了消息的接收者,然后消息文本会被传输。SMTP使用TCP端口25。

MIME(Multipurpose Internet Mail Extensions)是多用途互联网邮件扩展类型,是一个互联网标准,扩展了邮件中所需HTML、图像、声音、附件等新的扩展邮件格式,更多详见 https://docs.python.org/3/library/email.html

使用SMTP模块发送

Python对SMTP支持有Smtplib和Email两个模块,Email负责构造邮件,Smtplib负责发送邮件。

如果使用QQ邮箱,设置中需要开启POP3/SMTP服务,此外login的密码不是邮箱密码而是授权码,具体见设置-账户-授权码。

email.mime.text.MIMEText (_text[, _subtype[, _charset]]) :是MIMENonMultipart中的一个子类,创建包含文本数据的邮件体,_text 是包含消息负载的字符串,_subtype 指定文本类型,支持 plain(默认值)或 html类型的字符串。_charset设置字符集,参数接受一个charset实例。

as_string() :返回字符串信息,相当于__str__(),str(msg)

from email.mime.text import MIMEText
msg=MIMEText("First send","plain","utf-8")

from_addr="xxx@qq.com"
password="5uaw"					#QQ邮箱此处为授权码
smtp_server="smtp.qq.com"			#SMTP服务器地址
to_addr=["xxx@sina.cn"]				#收件人地址

import smtplib
server=smtplib.SMTP(smtp_server,25)		#创建一个SMTP对象。SMTP默认端口为25
server.set_debuglevel(1)			#打印SMTP服务器交互的信息
server.login(from_addr,password)		#登录服务器
server.sendmail(from_addr,[to_addr],msg.as_string())
server.quit()					#断开SMTP服务器链接

完整发送

自定义函数_format_addr()用来格式化邮件地址。注意不能简单地传入name,因为如果包含中文,需要通过Header对象进行编码。

email.utils为附加工具的类。
email.utils.formataddr(pair,charset=‘utf-8’):pair是一个元祖或列表返回分割的标题和地址,如邮箱收件人昵称和邮箱账号

msg[‘To’]接收的是字符串而不是list,如果有多个邮件地址,用,分隔即可。

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
import smtplib

def _formar_addr(s):
	name,addr=parseaddr(s)
	return formataddr((Header(name,'utf-8').encode(),addr))

from_addr="xxx@qq.com"
password="5uaw"					#QQ邮箱此处为授权码
smtp_server="smtp.qq.com"			#SMTP服务器地址
to_addr=["xxx@sina.cn"]				#收件人地址


msg=MIMEText("First send by kuku","plain","utf-8")
msg['From']=_formar_addr('发信人 <%s>' % from_addr)
msg['To']=_formar_addr('收信人 <%s>' % to_addr)
msg['Subject']=Header('SMTP发信应用','utf-8').encode()	

server=smtplib.SMTP(smtp_server,25)		#SMTP默认端口为25
server.set_debuglevel(1)			#打印SMTP服务器交互的信息
server.login(from_addr,password)		#登录服务器
server.sendmail(from_addr,[to_addr],msg.as_string())
server.quit()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库库冲鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值