• 使用Python自动发送邮件


      发送普通邮件

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

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

    email模块:负责构建邮件

    smtplib模块:负责发送邮件

    常用方法与属性: 

     如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务

     首次开启需要你用手机号发送短信,照着做就好了,做完之后会给你一个授权码,记着这个授权码,写代码需要用到,忘记了也可以找回

    接着编写代码,发送普通邮件

    1. import smtplib
    2. from email.mime.text import MIMEText
    3. from email.header import Header
    4. def send_email():
    5. # 设置要登录的邮箱
    6. smtp_obj = smtplib.SMTP('smtp.qq.com')
    7. # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码
    8. smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
    9. # 编辑内容
    10. mail_text = 'This is Email~ 您要的邮件来啦~~'
    11. # plain 原生文本模式
    12. msg_body = MIMEText(mail_text,'plain','utf-8')
    13. # 设置从哪发送的
    14. msg_body['From'] = Header('xxx','utf-8') # 设置发送人
    15. msg_body['Subject'] = Header('测试Python自动邮件','utf-8') # 设置内容主题
    16. # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址
    17. smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
    18. if __name__ =='__main__':
    19. send_email()

    发送HTML邮件

     发送HTML邮件只需要把发送的内容换成html代码即可

    1. import smtplib
    2. from email.mime.text import MIMEText
    3. from email.header import Header
    4. def send_email():
    5. # 设置要登录的邮箱
    6. smtp_obj = smtplib.SMTP('smtp.qq.com')
    7. # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码
    8. smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
    9. # 编辑内容
    10. mail_text = '''
    11. 这是一个HTML邮件通知

    12. 这个是邮件的内容

    13. '''
    14. # plain 原生文本模式
    15. msg_body = MIMEText(mail_text,'plain','utf-8')
    16. # 设置从哪发送的
    17. msg_body['From'] = Header('xxx','utf-8') # 设置发送人
    18. msg_body['Subject'] = Header('测试Python自动邮件','utf-8') # 设置内容主题
    19. # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址
    20. smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
    21. if __name__ =='__main__':
    22. send_email()

    发送附件邮件-smtplib

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

    设置登录服务器 、登录邮箱、增加附件 、设置请求头、 发送邮件

     

    1. import smtplib
    2. from email.mime.text import MIMEText
    3. from email.mime.application import MIMEApplication
    4. from email.mime.multipart import MIMEMultipart
    5. from email.header import Header
    6. def send_file_email():
    7. # 设置邮箱服务器
    8. stmp_obj = smtplib.SMTP('smtp.qq.com')
    9. # 登录邮箱
    10. stmp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
    11. # 设置邮件内容
    12. # 文本
    13. msg_txt = MIMEText('这个带有附件的邮件','plain','utf-8')
    14. # 附件 打开你要发送的文件
    15. msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())
    16. msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')
    17. # 封装要发送的数据
    18. part = MIMEMultipart()
    19. part.attach(msg_txt)
    20. part.attach(msg_file)
    21. # 设置邮件其它信息
    22. part['From'] = Header('xx','utf-8')
    23. part['Subject'] = Header('附件邮件','utf-8')
    24. # 发送邮件
    25. stmp_obj.sendmail('xxx@qq.com','hotelmail@126.com',part.as_string())
    26. if __name__ =='__main__':
    27. send_file_email()

    批量发送邮件-smtplib

    这里以发送工资条为例

    工资数据如下: 

    1. from email.header import Header
    2. from email.mime.text import MIMEText
    3. import smtplib
    4. from openpyxl import load_workbook
    5. def send_many_mail():
    6. # 设置登录邮箱服务器
    7. smtp_obj = smtplib.SMTP('smtp.qq.com')
    8. # 登录邮箱
    9. smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
    10. # 打开excel文件
    11. wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)
    12. # 激活工作簿
    13. sh = wb.active
    14. # 读取数据-遍历
    15. for i,r in enumerate(sh.iter_rows()):
    16. if i != 0:
    17. # 编辑内容
    18. msg_txt = f'''
    19. 您好:{r[1].value}

    20. 请查收2030年12月工资条详情:

    21. 工号姓名部门基本工资提成加班工资社保扣除考勤扣除应发工资邮箱
      {r[0].value}{r[1].value}{r[2].value}{r[3].value}{r[4].value}{r[5].value}{r[6].value}{r[7].value}{r[8].value}{r[9].value}
    22. '''
    23. msg = MIMEText(msg_txt,'html','utf-8')
    24. # 设置邮件其他信息
    25. msg['From'] = Header('财务部','utf-8')
    26. msg['Subject'] = Header('工资条','utf-8')
    27. #发送邮件
    28. smtp_obj.sendmail('xxx@qq.com',{r[9].value},msg.as_string())
    29. print(f'{r[1].value} 工资条发送成功!!')
    30. if __name__ =='__main__':
    31. send_many_mail()

    发送邮件-zmail

     Zmail的优势

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

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

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

    安装:pip install zmail

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

    subject 邮件主题

    from 发送人

    content_text 邮件内容-文本

    content_html 邮件内容-HTML

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

    1. import zmail
    2. def send_text():
    3. # 登录邮箱
    4. server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
    5. # 编写内容
    6. info = {
    7. 'from':'笨笨的张小白',
    8. 'subject':'测试zmail模块',
    9. 'content_text':'这个是zmail邮件信息'
    10. }
    11. # 发送邮件
    12. server.send_mail('hotelmail@126.com',info)
    13. def send_html():
    14. # 登录邮箱
    15. server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
    16. # 编写内容
    17. info = {
    18. 'from':笨笨的张小白',
    19. 'subject':'测试zmail模块',
    20. 'content_html':'

      这个是zmail邮件信息

      '
    21. }
    22. # 发送邮件
    23. server.send_mail('hotelmail@126.com',info)
    24. def send_file():
    25. # 登录邮箱
    26. server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
    27. # 编写内容
    28. info = {
    29. 'from':'笨笨的张小白',
    30. 'subject':'测试zmail模块',
    31. 'content_html':'

      这个是zmail邮件信息

      ',
    32. 'attachments':[r'.\base_data\backg.jpg']
    33. }
    34. # 发送邮件
    35. server.send_mail('hotelmail@126.com',info)
    36. def get_email():
    37. # 登录邮箱
    38. server = zmail.server('xxx@qq.com','tzteewnmyfqacbce')
    39. email = server.get_latest()
    40. print(email.get('subject'))
    41. print(email.get('from'))
    42. print(email.get('content_html'))
    43. print(email.get('content_text'))
    44. if __name__ == '__main__':
    45. # send_text()
    46. # send_html()
    47. # send_file()
    48. get_email()

  • 相关阅读:
    Linux终端与SSH
    nodejs——原型链污染
    Mac终端常用命令
    基于java(ssm)学生在线课程学习系统源码(java毕业设计)
    HTML+CSS简单的网页制作期末作业——浙江旅游景点介绍网页制作
    <Android开发> Android vold - 第一篇 vold前言简介
    如何使用element-ui相关组件如:el-select,el-table,el-switch,el-pagination,el-dialog
    HTML知识点总结篇(一)
    浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配
    JavaScript--继承模式、数组操作、操作dom
  • 原文地址:https://blog.csdn.net/m0_64336780/article/details/126186424