您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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 = '<html><body><h4>親愛的<a data-auto-link="1" href="mailto:%s" target="_blank">%s</a>,您好:</h4>' % (
self.to_addr, self.to_addr)
tail = '爬蟲出錯了,請及時修復錯誤</body></html>'
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中怎么發送郵件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。