详解Python发送邮件实例
Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单。今天,就来好好学习一下使用Python发送邮件吧。
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
1.邮件正文是文本的格式
# -*- coding: UTF-8 -*- from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import sys import csv import xlrd from pyExcelerator import * import os import xlwt from xlutils.copy import copy import pyExcelerator import datetime import time reload(sys) sys.setdefaultencoding("utf-8") mailto_list = [""] # 邮件接收方的邮件地址 mail_host = "smtp.exmail.qq.com" # 邮件传送协议服务器 mail_user = "" # 邮件发送方的邮箱账号 mail_pass = "" # 邮件发送方的邮箱密码 def send_mail(to_list, sub, content): me = "天才白痴梦"+"<"+mail_user+">" msg = MIMEText(content, _subtype='plain', _charset='utf-8') msg['Subject'] = sub # 邮件主题 msg['From'] = me msg['To'] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user, mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False if __name__ == '__main__': sub = "天才白痴梦" content = '...' if send_mail(mailto_list, sub, content): print "发送成功" else: print "发送失败"
2.邮件正文是表格的格式:由于是表格,所以我们选择HTML来实现表格的功能,邮件上面显示的就是HTML实现的内容了。
# -*- coding: UTF-8 -*- from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import sys import csv import xlrd from pyExcelerator import * import os import xlwt from xlutils.copy import copy import pyExcelerator import datetime import time reload(sys) sys.setdefaultencoding("utf-8") mailto_list = [""] # 邮件接收方的邮件地址 mail_host = "smtp.exmail.qq.com" # 邮件传送协议服务器 mail_user = "" # 邮件发送方的邮箱账号 mail_pass = "" # 邮件发送方的邮箱密码 def send_mail(to_list, sub, content): me = "天才白痴梦"+"<"+mail_user+">" # 和上面的代码不同的就是,这里我们选择的是html 的格式 msg = MIMEText(content, _subtype='html', _charset='utf-8') msg['Subject'] = sub # 邮件主题 msg['From'] = me msg['To'] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user, mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False if __name__ == '__main__': sub = "天才白痴梦" html = '<html></html>' if send_mail(mailto_list, sub, html): print "发送成功" else: print "发送失败"
3.邮件正文是图片的格式:要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。
def send_mail(to_list, sub, content): me = "天才白痴梦"+"<"+mail_user+">" msg = MIMEMultipart() msg['Subject'] = sub # 邮件主题 msg['From'] = me msg['To'] = ";".join(to_list) txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8') msg.attach(txt) # <b>:黑体 <i>:斜体 msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img src="/static/imghw/default1.png" data-src="cid:image1" class="lazy" alt="" />good!', 'html', 'utf-8') msg.attach(msgText) file1 = "F:\\1.jpg" image = MIMEImage(open(file1, 'rb').read()) image.add_header('Content-ID', '<image1>') msg.attach(image) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user, mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False if __name__ == '__main__': sub = "天才白痴梦" html = '<html></html>' if send_mail(mailto_list, sub, html): print "发送成功" else: print "发送失败"
4.发送邮件附件:邮件附件是图片
def send_mail(to_list, sub, content): me = "天才白痴梦"+"<"+mail_user+">" msg = MIMEMultipart() msg['Subject'] = sub # 邮件主题 msg['From'] = me msg['To'] = ";".join(to_list) txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8') msg.attach(txt) # # <b>:黑体 <i>:斜体 # msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img src="/static/imghw/default1.png" data-src="cid:image1" class="lazy" alt="" />good!', 'html', 'utf-8') # msg.attach(msgText) # # file1 = "F:\\1.jpg" # image = MIMEImage(open(file1, 'rb').read()) # image.add_header('Content-ID', '<image1>') # msg.attach(image) att = MIMEText(open('F:\\1.jpg', 'rb').read(), 'base64', 'utf-8') att["Content-Type"] = 'application/octet-stream' att["Content-Disposition"] = 'attachment; filename="1.jpg"' msg.attach(att) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user, mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False
5.发送群邮件:同时发送给多人
mailto_list = [""] # 邮件接收方的邮件地址
上面这一行代码是邮件接收方的邮件地址,如果我们需要给多人发送邮件的话,就只需要把对方的邮件帐号绑在这一个列表里就ok了。
加密SMTP
使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。
方法:只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。
smtp_server = 'smtp.qq.com' smtp_port = 25 # 默认端口号为25 server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 剩下的代码和前面的一模一样: server.set_debuglevel(1) # 打印出和SMTP服务器交互的所有信息
以上就是关于Python发送邮件详细解析,希望对大家的学习有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

VS Code 可用于编写 Python,并提供许多功能,使其成为开发 Python 应用程序的理想工具。它允许用户:安装 Python 扩展,以获得代码补全、语法高亮和调试等功能。使用调试器逐步跟踪代码,查找和修复错误。集成 Git,进行版本控制。使用代码格式化工具,保持代码一致性。使用 Linting 工具,提前发现潜在问题。

VS Code 扩展存在恶意风险,例如隐藏恶意代码、利用漏洞、伪装成合法扩展。识别恶意扩展的方法包括:检查发布者、阅读评论、检查代码、谨慎安装。安全措施还包括:安全意识、良好习惯、定期更新和杀毒软件。

在 VS Code 中,可以通过以下步骤在终端运行程序:准备代码和打开集成终端确保代码目录与终端工作目录一致根据编程语言选择运行命令(如 Python 的 python your_file_name.py)检查是否成功运行并解决错误利用调试器提升调试效率

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

VS Code 可以在 Mac 上使用。它具有强大的扩展功能、Git 集成、终端和调试器,同时还提供了丰富的设置选项。但是,对于特别大型项目或专业性较强的开发,VS Code 可能会有性能或功能限制。
