python中怎么发送邮件
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章将为大家详细讲解有关python中怎么发送邮件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一种:正常发送邮件,也就是同步发送邮件#!/us
千家信息网最后更新 2025年02月06日python中怎么发送邮件
这篇文章将为大家详细讲解有关python中怎么发送邮件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
第一种:正常发送邮件,也就是同步发送邮件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/8/14 10:14
# @Author : Andrew
# @Site :
# @File : send_mail.py
# @Software: PyCharm
from email.mime.text import MIMEText
import smtplib
from email.header import Header
from 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: PyCharm
import asyncio
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.header import Header
import aiosmtplib
import 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('发送者 <%s>' % self.from_addr)
msg['To'] = self.format_addr('亲爱的程序员 <%s>' % 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: PyCharm
import yagmail
def send_mail(content):
yag = yagmail.SMTP(user='*@163.com', password='pass', host='smtp.163.com')
contents = [content] # 正文内容
yag.send('*@126.com', '主题:修复', contents)
关于python中怎么发送邮件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
邮件
地址
内容
密码
线程
也就是
发送者
utf-8
亲爱
代码
口令
文章
更多
服务器
格式
正文
爬虫
知识
篇文章
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
redhat7服务器ntp配置
服务器输入输出转换模版
r740服务器过时
网络安全题目的毕业设计
网络安全法哪天开始实施
建网络安全 享文明社会
查询数据库语句 show
枣庄联想服务器代理哪个系列好
计算机网络技术大专月薪
数据库结构设计文献
有关数据库开发的书
服务器管理流程图
禹战互联网科技有限公司
守护网络安全的题目
1g数据库
数据库增加字段不为空
网络安全健康论文
数据库登录软件
查找服务器
数据库表与查询的区别吗
电信网络安全主题策划
求生之路2第三方服务器怎么屏蔽
软件开发工程师考试
宝塔如何创建数据库
武汉龙芯服务器厂家直销
济南外卖软件开发
四川专业软件开发服务标准
网络安全 调研督查
适合英语专业的外文数据库
硬盘连接不上服务器怎么办