黑马程序员技术交流社区

标题: 【上海校区】Python中的SMTP发送邮件 [打印本页]

作者: sunyakai    时间: 2019-12-26 16:13
标题: 【上海校区】Python中的SMTP发送邮件
本帖最后由 sunyakai 于 2019-12-26 16:14 编辑

一:SMTP介绍
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件
二:发送邮件实列
在这里我们使用企业邮箱263发送邮件,由于找不到设置smtp服务的密码,然后向客服询问,263企业邮箱默认smtp服务是开启的,密码就是对应发送邮箱账号的密码;
[Python] 纯文本查看 复制代码
# 发信服务器
smtp_server = 'smtp.263.net'
# 服务器端口--加密
port = 465
纯文本邮件:
[Python] 纯文本查看 复制代码
import smtplib  # smtp服务器
from email.mime.text import MIMEText  # 邮件文本

# 邮件构建
sender = "*******@itcast.cn"  # 发送方
password = "*****"  # smtp服务密码
subject = "滴滴答答"  # 邮件标题
content = "新年快乐!"  # 文本内容
recver = "*******@itcast.cn"  # 接收方

# content 发送内容     "plain"文本格式   utf-8 编码格式
message = MIMEText(content, "plain", "utf-8")

message['Subject'] = subject  # 邮件标题
message['To'] = recver  # 收件人
message['From'] = sender  # 发件人

smtp = smtplib.SMTP_SSL("smtp.263.com", 465)  # 实例化smtp服务器
smtp.login(sender, password)  # 发件人登录
smtp.sendmail(sender, [recver], message.as_string())  # as_string 对 message 的消息进行了封装
smtp.close()
发送带附件的邮件:
[Python] 纯文本查看 复制代码
import smtplib  # smtplib 用于邮件的发信动作
from email.mime.text import MIMEText  # email 用于构建邮件内容
from email.header import Header  # Header 用来构建邮件头
from email.mime.multipart import MIMEMultipart  # 用于实例化附件(处理多种形态的邮件主体我们需要 MIMEMultipart 类)

# 邮件构建
sender = "*******@itcast.cn"  # 发送方
password = "*****"  # smtp服务密码
subject = "滴滴答答"  # 邮件标题
content = "新年快乐!"  # 文本内容
recver = "*******@itcast.cn"  # 接收方

# content 发送内容     "plain"文本格式   utf-8 编码格式
message = MIMEText(content, "plain", "utf-8")

message['Subject'] = subject  # 邮件标题
message['To'] = recver  # 收件人
message['From'] = sender  # 发件人

# 构造文件附件1
attr1 = MIMEText(open(files, 'rb').read(), 'base64', 'utf-8')
attr1["content_Type"] = 'application/octet-stream'
# attr1["Content-Disposition"] = "attachment; filename=Header({}, 'utf-8').encode()".format('你好')  # 表示这是附件,名字是啥
# 解决附件中文名称乱码问题
attr1.add_header('Content-Disposition', 'attachment', filename=Header(file_name, 'utf-8').encode())
message.attach(attr1)

# 构造图片附件2
att2 = MIMEText(open('./1.png', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="12.jpg"'
message.attach(att2)

# 构造html附件3
att3 = MIMEText(open('./2.html', 'rb').read(), 'base64', 'utf-8')
att3["Content-Type"] = 'application/octet-stream'
att3["Content-Disposition"] = 'attachment; filename="boke.html"'
message.attach(att3)

smtp = smtplib.SMTP_SSL("smtp.263.com", 465)  # 实例化smtp服务器
smtp.login(sender, password)  # 发件人登录
smtp.sendmail(sender, [recver], message.as_string())  # as_string 对 message 的消息进行了封装
smtp.close()
注意点:使用smtp服务发送带附件的邮件,附件的名称不能直接用中文,否则发送过去文件名会是乱码
[Python] 纯文本查看 复制代码
# 解决附件中文名称乱码问题
attr1.add_header('Content-Disposition', 'attachment', filename=Header(file_name, 'utf-8').encode())
使用263企业邮箱进行邮件发送就完成了,抓紧去用自己的账号去试试了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2