- 3.1节: Email基础知识
- 已经是最后一篇了
广州番禺Python, Java小班周末班培训
薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:https://chipscoco.com/?cate=6
3.2.1 smtplib模块简介
在Python中,使用smtplib模块来发送邮件。smtplib模块是Python的内置模块,直接通过import来导入。
import smtplib
3.2.2 构造smtp对象
使用smtplib模块来发送邮件,需要先构造smtp对象:
smplib.SMTP(host='',port=0) | 构造一个已连接的SMTP对象,host表示服务器的主机名,port表示端口号 |
smplib.SMTP_SSL(host='',port=0) | 构造一个已连接的SMTP_SSL对象,host表示服务器的主机名,port表示端口号。SMTP_SSL是SMTP的子类,用来建立一个基于SSL的连接。 |
代码实例:
import smtplib
# 连接腾讯企业邮箱
smtp_server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)3.2.3 登录邮件服务器
获得已连接的smtp对象以后,通过以下方法登录邮件服务器:
smtp.login(user, password) | user表示邮箱的登录账号,password表示邮箱的登录密码。 |
代码实例:
import smtplib
# 连接腾讯企业邮箱
smtp_server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
smtp_server.login( 'haokaixin@chipscoco.com', '123456')3.2.4 发送邮件
服务器登录成功以后,再通过sendmail方法发送邮件:
smtp.sendmail(from_addr, to_addrs, msg) | from_addr为发件人的地址,to_addrs是一个列表,列表中的每一项为收件人的地址。msg表示发送的内容。 |
代码实例:
import smtplib
# 连接腾讯企业邮箱
smtp_server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
smtp_server.login( 'haokaixin@chipscoco.com', '123456')
smtp_server.sendmail('haokaixin@chipscoco.com', ['123456@qq.com','happy@163.com'], "hello world")3.2.5 发送html格式邮件
通过email.mime.text 中的MIMEText来发送HTML格式的邮件:
MiMEText(_text, _subtype='plain', _charset=None) | _text表示发送的文本,_subtype用来指定MIME类型,默认为plain,表示普通文本格式,如需发送html,需指定为html。_charset用来指定字符编码。 |
代码实例:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 设置邮件服务器的登录账号
LOGIN_USERNAME = 'xxx'
# 设置邮件服务器的登录密码
LOGIN_PASSWORD = 'xxxx'
def send_email(nickname, sender, to_addrs, message, subject, mime_type="plain"):
"""
:param nickname: 发件人的昵称
:param sender: 发件人的邮箱地址
:param to_addrs: 列表类型,列表中的每一项为收件人的地址
:param message: 邮件消息
:param subject: 邮件主题
:param mime_type: mime类型,默认为plain,表示普通文本格式的邮件
:return:
"""
msg = MIMEText(message, mime_type, 'utf-8')
# From用来指定发件人的昵称等信息,可通过formataddr来对发件人信息进行格式化
msg['From'] = formataddr((nickname, LOGIN_USERNAME))
# Sumject用来指定邮件的主题
msg['Subject'] = subject
# SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLS
# qq邮箱smtp服务器地址:smtp.qq.com, 端口号:456
# 163邮箱smtp服务器地址:smtp.163.com,端口号:25
smtp_server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
# 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码
smtp_server.login(LOGIN_USERNAME, LOGIN_PASSWORD)
# 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
smtp_server.sendmail(sender, to_addrs, msg.as_string())
# 关闭连接
smtp_server.quit()
if __name__ == "__main__":
html_message="<html><body><h1>你中了刘同学的一个爱的抱抱</h1></body></html>"
sender = "chenzhengqiang@chipscoco.com"
to_addrs = ["haokaixin@chipscoco.com",]
send_email(nickname="薯条老师", sender=sender, to_addrs=to_addrs,
message=html_message, subject="中奖了-爱的抱抱!!", mime_type="html")3.2.6 添加图片和附件
通过email.mime.multipart模块的MIMEMultipart在邮件中添加图片和附件:
MIMEMultipart(_subtype='mixed') | _subtype表示multipart content type的子类型,默认为mixed,表示混合模式。如需使用内嵌资源的形式,需指定为related。 |
MIMEMultipart.attach(payoad) | payload表示待添加的附件内容 |
代码实例:
import smtplib
# 支持发送图片类型的邮件
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
# 设置邮件服务器的登录账号
LOGIN_USERNAME = 'xxx'
# 设置邮件服务器的登录密码
LOGIN_PASSWORD = 'xxx'
def send_email_with_attachment(sender, to_addrs, message, subject, **kwargs):
"""
:param nickname: 发件人的昵称
:param sender: 发件人的邮箱地址
:param to_addrs: 列表类型,列表中的每一项为收件人的地址
:param message: 邮件消息
:param subject: 邮件主题
:param mime_type: mime类型,默认为plain,表示普通文本格式的邮件
:return:
"""
# related表示使用内嵌资源的形式
multipart = MIMEMultipart('related')
# From用来指定发件人的昵称等信息,可通过formataddr来对发件人信息进行格式化
nickname=kwargs["nickname"] if "nickname" in kwargs else ""
multipart['From'] = formataddr((nickname, sender))
# Subject用来指定邮件的主题
multipart['Subject'] = subject
mime_type = "html" if "mime_type" in kwargs else kwargs["mime_type"]
message = MIMEText(message, mime_type, 'utf-8')
multipart.attach(message)
mime_images = kwargs["mime_images"] if "mime_images" in kwargs else {}
for image_path, cid in mime_images.items():
# 图片等附件必须以二进制模式打开
mime_image = MIMEImage(open(image_path, 'rb').read())
# 添加的Content-ID必须与html消息中的cid一致
mime_image.add_header('Content-ID', cid)
multipart.attach(mime_image) # 添加图片文件到邮件信息中去
attachments = kwargs["attachments"] if "attachments" in kwargs else []
for attachment in attachments:
mime_application = MIMEApplication(open(attachment, 'rb').read())
# filename表示邮件中显示的附件名
mime_application.add_header('Content-Disposition', 'attachment', filename='{}'.format(attachment))
multipart.attach(mime_application)
# SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLS
# qq邮箱smtp服务器地址:smtp.qq.com, 端口号:456
# 163邮箱smtp服务器地址:smtp.163.com,端口号:25
smtp_server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
# 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码
smtp_server.login(LOGIN_USERNAME, LOGIN_PASSWORD)
# 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
smtp_server.sendmail(sender, to_addrs, multipart.as_string())
# 关闭连接
smtp_server.quit()
if __name__ == "__main__":
sender = "chenzhengqiang@chipscoco.com"
to_addrs = ["haokaixin@chipscoco.com",]
message = '<html><body><h1>你中了刘同学的一个爱的抱抱</h1><img src="cid:hug_of_love"></body></html>'
send_email_with_attachment(sender=sender, to_addrs=to_addrs, message=message, subject="中奖了-爱的抱抱!!",
nickname="薯条老师", mime_type="html",mime_images={"hug_of_love.jpg": "hug_of_love"},
attachments=["hug_of_love.jpg", "girl.jpeg", "demo.txt", "福报程序员.xls"])3.2.7 最具实力的小班培训
来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料:

- 3.1节: Email基础知识
- 已经是最后一篇了


