- 3.1节: Email基础知识
- 已经是最后一篇了
广州番禺Python, Java小班周末班培训
薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://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基础知识
- 已经是最后一篇了