Python办公自动化【发送普通邮件、发送HTML邮件、发送附件邮件-smtplib、批量发送邮件-smtplib、发送邮件-zmail】(八)-全面详解(学习总结---从入门到深化)

简介: Python办公自动化【发送普通邮件、发送HTML邮件、发送附件邮件-smtplib、批量发送邮件-smtplib、发送邮件-zmail】(八)-全面详解(学习总结---从入门到深化)

发送普通邮件



SMTP(Simple Mail Transfer Protocol)是简单传输协议。


python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下:


1、email模块:负责构建邮件

2、smtplib模块:负责发送邮件


常用方法与属性

函数名&属性 含义

smtplib.SMTP(address)

设置邮箱服务器地址

腾讯邮箱:smtp.qq.com

新浪邮箱:smtp.sina.com

新浪VIP:smtp.vip.sina.com

搜狐邮箱:smtp.sohu.com

126邮箱:smtp.126.com

139邮箱:smtp.139.com

163网易邮箱:smtp.163.com

smtp.login(uname,passwd)  登录SMTP服务器
email.mime.text.MIMEText(info,type,encoding)  设置内容
MIMEText['From']  设置发送者名
MIMEText['Subject']  发送邮件主题
SMTP.sendmail(from_addr, to_addrs, msg)  发送邮件
email.header.Header(s=None,charset=None)  创建一个可以包含不同字符集中的字符串,并符合MIME的标头


代码

import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email():
  # 设置要登录的邮箱
  smtp_obj = smtplib.SMTP('smtp.qq.com')
  # 登录邮箱
  smtp_obj.login('398707160@qq.com','spcdwgqkltjsaiah')
  # 编辑内容
  mail_text = 'This is Email~ 您要的邮件来啦~~'
  # plain 原生文本模式
  msg_body = MIMEText(mail_text,'plain','utf-8')
  # 设置从哪发送的
  msg_body['From'] = Header('Python学院','utf-8')
  msg_body['Subject'] = Header('测试Python自动邮件','utf-8')
  # 发送邮件
 smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
if __name__ =='__main__':
  send_email()


发送HTML邮件



代码

# smtplib
# email
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 登录邮箱
smtp_obj = smtplib.SMTP("smtp.qq.com")
smtp_obj.login('398707160@qq.com','ppzuouwejpuebgfg')
# 编辑内容
mail_text = '''
<h1 style="color:red">这个是一个HTML邮件</h1>
<p>这是邮件的主题内容</p>
<p><a href="http://www.itbaizhan.cn">这个是链接</a></p>
'''
msg_body = MIMEText(mail_text,'html','utf-8')
msg_body['From'] = Header('测试部门','utf-8')
msg_body['Subject'] = Header('测试邮件','utf-8')
# 发邮件
smtp_obj.sendmail('398707160@qq.com',['hotelmail@126.com'],msg_body.as_string())


发送附件邮件-smtplib



有时邮件的内容只靠文本是无法完全描述内容。这时就可以考虑发送附件来携带内容。具体方法如下:

 

1、设置登录服务器

2、登录邮箱

3、增加附件

4、设置请求头

5、发送邮件


常用方法与属性

函数名&属性 含义
email.mime.application.MIMEApplication 设置附件
MIMEApplication.add_header()  设置请求头,主要是设置文件名
email.mime.multipart.MIMEMultipart  生成包含多个部分的邮件体的 MIME 对象
MIMEMultipart.attach(info)  增加邮件内容


代码

import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Header
def send_file_email():
  # 设置邮箱服务器
  stmp_obj = smtplib.SMTP('smtp.qq.com')
  # 登录邮箱
 stmp_obj.login('398707160@qq.com','spcdwgqkltjsbiah')
  # 设置邮件内容
  # 文本
  msg_txt = MIMEText('这个带有附件的邮件','plain','utf-8')
  # 附件
  msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())
  msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')
  # 封装要发送的数据
  part = MIMEMultipart()
  part.attach(msg_txt)
  part.attach(msg_file)
  # 设置邮件其它信息
  part['From'] = Header('Python学院','utf-8')
  part['Subject'] = Header('附件邮件','utf-8')
  # 发送邮件
 stmp_obj.sendmail('398707160@qq.com','hotelmail@126.com',part.as_string())
if __name__ =='__main__':
  send_file_email()


批量发送邮件-smtplib



代码

from email.header import Header
from email.mime.text import MIMEText
import smtplib
from openpyxl import load_workbook
def send_many_mail1():
  # 设置登录邮箱服务器
  smtp_obj = smtplib.SMTP('smtp.qq.com')
  # 登录邮箱
 smtp_obj.login('398707160@qq.com','spcdwgqkltjsbiah')
  # 编辑内容
  msg_txt = '''
 <table border="1">
 <tr>
   <td>工号</td>
   <td>姓名</td>
   <td>部门</td>
   <td>基本工资</td>
   <td>提成</td>
   <td>加班工资</td>
   <td>社保扣除</td>
   <td>考勤扣除</td>
   <td>应发工资</td>
   <td>邮箱</td>
 </tr>
 <tr>
   <td>000011</td>
   <td>张杨工</td>
   <td>skldjfsl</td>
   <td>80000</td>
   <td>0</td>
   <td>0</td>
   <td>0</td>
   <td>0</td>
   <td>80000</td>
   <td>aa@qq.com</td>
 </tr>
</table>
 '''
  msg =  MIMEText(msg_txt,'html','utf-8')
  # 设置邮件其他信息
  msg['From'] = Header('百战财务部','utf-8')
  msg['Subject'] = Header('工资条','utf-8')
  #发送邮件
 smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg.as_string())
def send_many_mail2():
  # 设置登录邮箱服务器
  smtp_obj = smtplib.SMTP('smtp.qq.com')
  # 登录邮箱
 smtp_obj.login('398707160@qq.com','spcdwgqkltjsbiah')
  # 打开excel文件
  wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)
  # 激活工作簿
  sh = wb.active
  # 读取数据-遍历
  for i,r in enumerate(sh.iter_rows()):
    if i != 0:
      # 编辑内容
      msg_txt = f'''
     <h3>您好:{r[1].value}</h3>
     <p>请查收2030年12月工资条详情:</p>
     <table border="1">
    <tr>
       <td>工号</td>
       <td>姓名</td>
       <td>部门</td>
       <td>基本工资</td>
       <td>提成</td>
       <td>加班工资</td>
       <td>社保扣除</td>
       <td>考勤扣除</td>
       <td>应发工资</td>
       <td>邮箱</td>
     </tr>
     <tr>
       <td>{r[0].value}</td>
       <td>{r[1].value}</td>
       <td>{r[2].value}</td>
       <td>{r[3].value}</td>
       <td>{r[4].value}</td>
       <td>{r[5].value}</td>
       <td>{r[6].value}</td>
       <td>{r[7].value}</td>
       <td>{r[8].value}</td>
       <td>{r[9].value}</td>
     </tr>
   </table>
     '''
      msg = MIMEText(msg_txt,'html','utf-8')
      # 设置邮件其他信息
      msg['From'] = Header('财务部','utf-8')
      msg['Subject'] = Header('工资条','utf-8')
      #发送邮件
      smtp_obj.sendmail('398707160@qq.com',{r[9].value},msg.as_string())
      print(f'{r[1].value} 工资条发送成功!!')
if __name__ =='__main__':
  send_many_mail2()


发送邮件-zmail



Zmail的优势


1、自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)

2、将一个字典映射为email,构造信件就像构造字典一样简单

3、自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)


安装

pip install zmail


常用方法与属性

函数名&属性 含义
zmail.server(name,password) 登录服务器邮件
server.send_mail(address,info)  发送邮件
server.get_latest() 获取最新接收邮件


发送的消息以字典发送,包含的key:


1、subject 邮件主题

2、from 发送人

3、content_text 邮件内容-文本

4、content_html 邮件内容-HTML

5、attachments 邮件内容-附件,可写多个


代码

# pip install zmail
import zmail
def send_text():
  # 登录邮箱
  server = zmail.server('398707160@qq.com','spcdwgqkltjsbiah')
  # 编写内容
  info = {
    'from':'Zmail',
    'subject':'测试zmail模块',
    'content_text':'这个是zmail邮件信息'
 }
  # 发送邮件
 server.send_mail('hotelmail@126.com',info)
def send_html():
  # 登录邮箱
  server = zmail.server('398707160@qq.com','spcdwgqkltjsbiah')
  # 编写内容
  info = {
    'from':'Zmail',
    'subject':'测试zmail模块',
    'content_html':'<h1>这个是zmail邮件信息</h1>'
 }
  # 发送邮件
 server.send_mail('hotelmail@126.com',info)
def send_file():
  # 登录邮
  server = zmail.server('398707160@qq.com','spcdwgqkltjsbiah')
  # 编写内容
  info = {
    'from':'Zmail',
    'subject':'测试zmail模块',
    'content_html':'<h1>这个是zmail邮件信息</h1>',
    'attachments': [r'.\base_data\backg.jpg']
 }
  # 发送邮件
 server.send_mail('hotelmail@126.com',info
def get_email():
  # 登录邮箱
  server = zmail.server('398707160@qq.com','tzteewnmyfqacbce')
  email = server.get_latest()
  print(email.get('subject'))
  print(email.get('from'))
  print(email.get('content_html'))
  print(email.get('content_text'))
if __name__ == '__main__':
  # send_text()
  # send_html()
  # send_file()
  get_email()
目录
相关文章
|
7天前
|
前端开发 JavaScript API
Webview+Python:用HTML打造跨平台桌面应用的创新方案
本文系统介绍了使用PyWebView库结合HTML/CSS/JavaScript开发跨平台桌面应用的方法。相比传统方案(如PyQt、Tkinter),PyWebView具备开发效率高、界面美观、资源占用低等优势。文章从技术原理、环境搭建、核心功能实现到性能优化与实战案例全面展开,涵盖窗口管理、双向通信、系统集成等功能,并通过“智能文件管理器”案例展示实际应用。适合希望快速构建跨平台桌面应用的Python开发者参考学习。
50 1
|
6月前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
5月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
279 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
120 7
|
4月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
157 4
|
5月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
195 9
|
5月前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
5月前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
4月前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
169 0
|
6月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
下一篇
oss创建bucket