使用 python 发送邮件,这个也没啥讲的,分享三种方式发送邮件,最后一种三行代码就可以发送邮件,是不是很爽啊,话不多说,直接上代码

第一种:正常发送邮件,也就是同步发送邮件

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/8/14 10:14# @Author : Andrew# @Site :# @File : send_mail.py# @Software: PyCharmfrom email.mime.text import MIMETextimport smtplibfrom email.header import Headerfrom email.utils import parseaddr, formataddr  # 设置编码格式from email.mime.multipart import MIMEMultipart

class SendMail:def __init__(self):# 定义email的地址,口令和SMTP服务器地址        self.from_addr = '发送者邮箱'        self.password = "pass"  # 注意此处输入的密码是自己设置的协议密码        self.to_addr = '*@126.com'        self.smtp_server = 'smtp.163.com'    def format_addr(self, s):# 将用户名编码设置成UTF-8        name, addr = parseaddr(s)return formataddr((Header(name, 'utf-8').encode(), addr))

def msg_parse(self):# 定义邮件本身内容        msg = MIMEMultipart()        msg['From'] = self.format_addr(f'发送者<{self.from_addr}>')        msg['To'] = self.format_addr(f'接收者<{self.to_addr}>')        msg['Subject'] = Header('hhh,爬虫又出错了,请及时修复', 'utf-8').encode()# 定义邮件正文        msg.attach(MIMEText('使用python发来的邮件3', 'plain', 'utf-8'))# 加附件        # with open(r'C:\Users\Administrator\Desktop\test\test0.jpg', 'rb') as f:        #     # 设置附件的MIME和文件名,这里是jpg类型,可以换png或其他类型:        #     mime = MIMEBase('image', 'jpg', filename='test0.jpg')        #     mime.add_header('Content-Disposition', 'attchment', filename='test0.jpg')        #     mime.add_header('Content-ID', '<0>')        #     mime.add_header('X-Attachment-ID', '0')        #     mime.set_payload(f.read())        #     encoders.encode_base64(mime)        #     msg.attach(mime)        server = smtplib.SMTP_SSL(self.smtp_server, 465)# server.set_debuglevel(1)        server.login(self.from_addr, self.password)        server.sendmail(self.from_addr, [self.to_addr], msg.as_string())        server.quit()

if __name__ == '__main__':    SendMail().msg_parse()

第二种:使用异步库发送邮件

注意事项:这种方式需要使用异步库 asyncio, 需要使用时间循环,也就是get_event_loop, 也就是 main 里面写的代码,如果是你重开线程使用异步发送邮件的话,这个会出问题。需要使用 new_event_loop 记住下面这句话:

get_event_loop() 方法仅在同样的线程中生效,如果在一个新线程中,应该用 new_event_loop() 来获取新的 loop,并通过 set_event_loop(loop) 来将其设为该线程下的 loop。

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/8/14 10:14# @Author : Andrew# @Site :# @File : send_mail.py# @Software: PyCharmimport asynciofrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrfrom email.header import Headerimport aiosmtplibimport logging

class SendMail:def __init__(self):# 定义email的地址,口令和SMTP服务器地址        self.from_addr = '*@163.com'        self.password = "pass"  # 注意此处输入的密码是自己设置的协议密码        self.to_addr = '*@126.com'        self.smtp_server = 'smtp.163.com'    def format_addr(self, s):  # 格式化地址 也方便发送中文        name, addr = parseaddr(s)return formataddr((Header(name, 'utf-8').encode(), addr))

async def sendemail(self):        title = '

亲爱的%s,您好:

' % (
self.to_addr, self.to_addr)
tail = '爬虫出错了,请及时修复错误' html = title + tail

msg = MIMEText(html, 'html', 'utf-8')
msg['From'] = self.format_addr('发送者 ' % self.from_addr)
msg['To'] = self.format_addr('亲爱的程序员 ' % self.to_addr)
msg['Subject'] = Header('修复bug', 'utf-8').encode()

try:
async with aiosmtplib.SMTP(hostname=self.smtp_server, port=465, use_tls=True) as smtp:
await smtp.login(self.from_addr, self.password)
await smtp.send_message(msg)
except aiosmtplib.SMTPException as e:
logging.error('sendemail:%s' % e)

if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(SendMail().sendemail())

第三种:使用 yagmail 库发送邮件,三行代码实现发送邮件

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/8/14 10:14# @Author : Andrew# @Site :# @File : send_mail.py# @Software: PyCharmimport yagmail

def send_mail(content):    yag = yagmail.SMTP(user='*@163.com', password='pass', host='smtp.163.com')    contents = [content]  # 正文内容    yag.send('*@126.com', '主题:修复', contents)

如果你需要给多个人发送邮件只需要在 send 方法的第一个参数,改成列表加入接收者的邮箱就可以了,是不是很爽

flask-mail异步发送邮件_使用 python 发送邮件相关推荐

  1. python 发送邮件_利用Python 发送邮件

    原标题:利用Python 发送邮件 概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密, ...

  2. python判断邮件发送成功_(原创)python发送邮件

    这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件. 首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smt ...

  3. python怎么发送邮件_在Python如何使用SMTP发送邮件

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  4. 发送邮件_使用 Python 发送电子邮件

    在实际运用中,我们可能需要通过电子邮件告诉我们 Python 运行的结果的是否与预期的一致.现在我们就来看一下,怎么通过 Python 发送邮件. 这个示例中我们需要用到的第三方库有: •smtpli ...

  5. python2异步编程_最新Python异步编程详解

    我们都知道对于I/O相关的程序来说,异步编程可以大幅度的提高系统的吞吐量,因为在某个I/O操作的读写过程中,系统可以先去处理其它的操作(通常是其它的I/O操作),那么Python中是如何实现异步编程的 ...

  6. php 邮件发送是html 没样式_使用python发送邮件

    发送邮件这个功能非常实用,比如你写了一个爬虫,可以通过邮件来接收程序异常或者任务完成的通知,再比如你搭了一个网站,别人只需留下他的邮箱,你就可以自动给他发送邮件. 总之我觉得邮件通知非常适合那些处理批 ...

  7. python通过代理发送邮件_使用Python通过SMTP发送邮件

    有些业务可能由于各种各样的原因并不适用于Zabbix监控,这时如果要做到系统出问题能立即发送邮件,就需要自己来写监控脚本了,出问题要实时通过邮件报警,以下案例使用Python脚本实现通过SMTP协议发 ...

  8. python自动化发送邮件_使用python自动化发送邮件

    欢迎关注"生信修炼手册"! 在python中,通过如下两个模块可以实现邮件的自动化操作 1. smtplib 2. email smtplib模块是对SMTP协议的封装,用于发送邮 ...

  9. 用python发邮件为什么接收不了_使用python发送邮件和接收邮件

    发邮件是大家工作中最常用到的.今天来看一下怎么用python来发送和接收邮件. python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib ...

最新文章

  1. ie对java的设置字体,css3文字特效和浏览器兼容性
  2. makefile小技巧
  3. python中all是什么意思_Python中的__all__
  4. [转载] 启用和禁用 Reporting Services 的客户端打印和导出文件格式
  5. WMI使用技巧集 C#
  6. 机床数控改造控制系统设计(微型计算机),简易数控车床的微机控制系统软件
  7. 代码比对工具UltraEdit(UE使用)
  8. Java中常见的几种数组排序方法
  9. java log4j日志级别配置详解
  10. 迅捷PDF编辑器如何编辑PDF文字图文教程
  11. 电子电路学习笔记(2)——电容
  12. 2017计算机办公自动化试题,【2017年整理】计算机办公自动化试题.doc
  13. OpenBSD 7.2版发布 新增苹果M2芯片和高通骁龙8cx芯片组的支持
  14. gst-launch-1.0在Linux下的命令
  15. 斯隆论社会责任:德鲁克日志之四月二十五日
  16. 痛苦的事, 伤心的事, 一生只需要一次, 别折腾, 别忘痛- 人生, 软件, 所有人皆如是!...
  17. 手机放哪里辐射危害最低?
  18. 什么是5g卡,5g有啥好的
  19. 腾讯云 云点播 JAVASDK上传
  20. 蜻蜓FM课程种类繁多,用python爬取热门课程排行榜

热门文章

  1. Swiper学习之三---swiper的配置选项 ②:Free模式和Effects切换效果
  2. linux c 网络编程与信号量,linux网络编程-----线程同步--信号量
  3. sharedpreferences使用方法_Google 推荐在 MVVM 架构中使用 Kotlin Flow
  4. 确保河道环境_开展河道整治 改善生态环境
  5. 服务器摆放需要预留U位么_卧室系列 | 选床+摆放新姿势,提升睡眠品质小技巧...
  6. oracle11g scn 补丁,Oracle11g中SCN与TimeStamp的相互转换
  7. 【NLP】毕设学习笔记(九)长短期神经网络LSTM
  8. android studio8.0,Android Studio错误:(8,0)未找到ID为’android’的插件
  9. hb-550s计算机电源,XFX TS 550金牌电源拆解及电路分析
  10. k8s停止服务_Kubernetes 服务部署最佳实践(二) 如何提高服务可用性