python之如何发送邮件

今天来讲一下python如何发送邮件,以163和qq邮箱为例。

要想实现使用python代码发送邮件,邮箱必须开启POP3/SMTP协议,开启之后邮箱会给你生成一个授权码

注意:这个授权码一定要记住,以后使用代码实现发送邮件登陆的时候,使用的都是这个授权码

qq邮箱的POP3/SMTP协议开启在 设置>>账户 中

163邮箱的POP3/SMTP协议开启方式

与qq不同的是,163邮箱开启之后需要自己设置客户端授权密码

POP3/SMTP协议开启之后开始使用python代码实现发送邮件

第一步:引入模块

# smtp  simple mail tranfer protocol 简单邮件传输协议
# lib library
import smtplib
import email
# MIME 多用于邮件扩充协议
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

第二步:设置发件信息

注意:如果发送邮件用的是qq邮箱,邮件的域名应改为qq.com

# 设置邮件的域名
HOST = 'smtp.163.com'
# 设置发件人邮箱 发件人邮箱必须设置开始smtp协议
# 设置邮件发件人
message['From'] = '发件人邮箱'
# 设置邮件收件人
message['To'] = '收件人邮箱'
# 设置邮件标题
message['Subject'] = '这个是标题'

第三步:添加邮件内容,主题,内容,附件等

related 表示使用内嵌资源的形式将邮件发送给对方

message = MIMEMultipart('related')

发送纯文本

# 参数
# 1.发送的内容 内容必须是字符串
# 2.内容的类型 文本类型默认为plain
# 3.内容的编码方式 使用utf-8进行编码
message_text = MIMEText('今天是星期六,好开心','plain','utf-8')
# 将邮件内容装入到邮件信息中去
message.attach(message_text)
# rb 读取二进制文件
image_data = open('图片名字加后缀','rb')
# 设置读取获取的二进制数据
message_image= MIMEImage(image_data.read())
image_data.close()
# 添加图片文件到邮件信息当中去
message.attach(message_image)
# ------------------发送图片的第二种方法
message_image = MIMEText(open('图片名字加后缀','rb').read(),'base64','utf-8')
message_image['Content-disposition'] = 'attachment;filename="新名字"'
message.attach(message_image)

发送文件

message_xlsx = MIMEText(open('要发送的文件名.xlsx','rb').read(),'base64','utf-8')
# 设置文件在附件当中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test1.xlsx"'
message.attach(message_xlsx)

将一个xlsx文档作为内容发送到对方的邮箱读取excle文件时,是以rb形式进行读取的,是一个以二进制内容,对二进制文件需要设置默认的编码形式,对于MIMEText()来说 默认的编码形式就是base64,如果对于二进制文件来说 没有设置base64进行编码,则附件的就会呈现乱码

第三步:登录邮箱发送邮件

注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
密码千万不要写邮箱的密码,要写邮箱的授权码

# 获取简单邮件传输协议的证书
email_client = smtplib.SMTP_SSL()
# 设置发件人邮箱的域名和端口 端口为465
email_client.connect(HOST,'465')
result = email_client.login(message['From'],'授权码')
# 发送邮件
email_client.sendmail(from_addr=message['From'],to_addrs=message['To'],msg=message.as_string())
# 关闭邮件发送客户端
email_client.close()

猜你喜欢

转载自blog.csdn.net/qq_42603652/article/details/81588295