当前位置:   article > 正文

使用Python自动发送邮件

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. <h1 style='color:red'>这是一个HTML邮件通知</h1>
  12. <p>这个是邮件的内容</p>
  13. <p><a href='http://www.itbaizhan.cn'>这个是链接</a></p>
  14. '''
  15. # plain 原生文本模式
  16. msg_body = MIMEText(mail_text,'plain','utf-8')
  17. # 设置从哪发送的
  18. msg_body['From'] = Header('xxx','utf-8') # 设置发送人
  19. msg_body['Subject'] = Header('测试Python自动邮件','utf-8') # 设置内容主题
  20. # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址
  21. smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
  22. if __name__ =='__main__':
  23. 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. <h3>您好:{r[1].value}</h3>
  20. <p>请查收2030年12月工资条详情:</p>
  21. <table border="1">
  22. <tr>
  23. <td>工号</td>
  24. <td>姓名</td>
  25. <td>部门</td>
  26. <td>基本工资</td>
  27. <td>提成</td>
  28. <td>加班工资</td>
  29. <td>社保扣除</td>
  30. <td>考勤扣除</td>
  31. <td>应发工资</td>
  32. <td>邮箱</td>
  33. </tr>
  34. <tr>
  35. <td>{r[0].value}</td>
  36. <td>{r[1].value}</td>
  37. <td>{r[2].value}</td>
  38. <td>{r[3].value}</td>
  39. <td>{r[4].value}</td>
  40. <td>{r[5].value}</td>
  41. <td>{r[6].value}</td>
  42. <td>{r[7].value}</td>
  43. <td>{r[8].value}</td>
  44. <td>{r[9].value}</td>
  45. </tr>
  46. </table>
  47. '''
  48. msg = MIMEText(msg_txt,'html','utf-8')
  49. # 设置邮件其他信息
  50. msg['From'] = Header('财务部','utf-8')
  51. msg['Subject'] = Header('工资条','utf-8')
  52. #发送邮件
  53. smtp_obj.sendmail('xxx@qq.com',{r[9].value},msg.as_string())
  54. print(f'{r[1].value} 工资条发送成功!!')
  55. if __name__ =='__main__':
  56. 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':'<h1>这个是zmail邮件信息</h1>'
  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':'<h1>这个是zmail邮件信息</h1>',
  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()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/432550
推荐阅读
相关标签
  

闽ICP备14008679号