十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关python中怎么发送邮件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联-专业网站定制、快速模板网站建设、高性价比凌源网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式凌源网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖凌源地区。费用合理售后完善,十多年实体公司更值得信赖。
第一种:正常发送邮件,也就是同步发送邮件
#!/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中怎么发送邮件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。