自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 發(fā)送郵件的三種方法

開發(fā)
今天我們就來學(xué)習(xí)Python發(fā)送郵件的三種方法,分別是使用smtplib模塊、yagmail庫和email庫。每種方法都有其特點(diǎn)和適用場景,讓我們一起來看看吧!

發(fā)送郵件是日常工作中非常常見的需求,無論是個(gè)人還是企業(yè),掌握如何使用Python發(fā)送郵件都是非常有用的技能。今天我們就來學(xué)習(xí)Python發(fā)送郵件的三種方法,分別是使用smtplib模塊、yagmail庫和email庫。每種方法都有其特點(diǎn)和適用場景,讓我們一起來看看吧!

1. 使用smtplib模塊發(fā)送郵件

smtplib 是 Python 標(biāo)準(zhǔn)庫中的一個(gè)模塊,用于發(fā)送郵件。它提供了 SMTP(Simple Mail Transfer Protocol)協(xié)議的實(shí)現(xiàn)。下面我們通過一個(gè)簡單的例子來學(xué)習(xí)如何使用 smtplib 發(fā)送郵件。

示例代碼:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 郵件發(fā)送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 郵件內(nèi)容
message = MIMEText('這是一封測試郵件', 'plain', 'utf-8')
message['From'] = Header("發(fā)件人", 'utf-8')
message['To'] = Header("收件人", 'utf-8')

# 郵件主題
subject = 'Python SMTP 郵件測試'
message['Subject'] = Header(subject, 'utf-8')

# 連接 SMTP 服務(wù)器并發(fā)送郵件
try:
    smtp_obj = smtplib.SMTP('smtp.example.com', 25)  # SMTP服務(wù)器地址和端口
    smtp_obj.login('your_email@example.com', 'your_password')  # 登錄SMTP服務(wù)器
    smtp_obj.sendmail(sender, receiver, message.as_string())  # 發(fā)送郵件
    print("郵件發(fā)送成功")
except smtplib.SMTPException as e:
    print("Error: 無法發(fā)送郵件", e)
finally:
    smtp_obj.quit()

代碼解釋

  • 導(dǎo)入模塊:首先導(dǎo)入 smtplib 和 email.mime.text 模塊。
  • 設(shè)置郵件發(fā)送方和接收方:定義發(fā)送方和接收方的郵箱地址。
  • 創(chuàng)建郵件內(nèi)容:使用 MIMEText 創(chuàng)建郵件內(nèi)容,并設(shè)置郵件的編碼格式。
  • 設(shè)置郵件頭部信息:使用 Header 設(shè)置郵件的發(fā)送者、接收者和主題。
  • 連接SMTP服務(wù)器:使用 smtplib.SMTP 連接到SMTP服務(wù)器,并使用 login 方法登錄。
  • 發(fā)送郵件:使用 sendmail 方法發(fā)送郵件。
  • 異常處理:使用 try-except 塊捕獲可能的異常。8. 關(guān)閉連接:使用 quit 方法關(guān)閉SMTP連接。

2. 使用yagmail庫發(fā)送郵件

yagmail 是一個(gè)簡化了 smtplib 和 email 庫使用的第三方庫,使得發(fā)送郵件更加方便。下面我們來看一個(gè)使用 yagmail 發(fā)送郵件的例子。

安裝yagmail:

pip install yagmail

示例代碼:

import yagmail

# 郵件發(fā)送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 郵件內(nèi)容
subject = 'Python yagmail 郵件測試'
body = '這是一封使用 yagmail 發(fā)送的測試郵件'

# 創(chuàng)建 yagmail.SMTP 對象
yag = yagmail.SMTP(user=sender, password='your_password', host='smtp.example.com')

# 發(fā)送郵件
try:
    yag.send(to=receiver, subject=subject, contents=body)
    print("郵件發(fā)送成功")
except Exception as e:
    print("Error: 無法發(fā)送郵件", e)

代碼解釋:

  • 安裝yagmail:使用 pip install yagmail 安裝 yagmail 庫。
  • 導(dǎo)入yagmail:導(dǎo)入 yagmail 模塊。
  • 設(shè)置郵件發(fā)送方和接收方:定義發(fā)送方和接收方的郵箱地址。
  • 創(chuàng)建郵件內(nèi)容:定義郵件的主題和內(nèi)容。
  • 創(chuàng)建SMTP對象:使用 yagmail.SMTP 創(chuàng)建一個(gè)SMTP對象,并傳入發(fā)送方的郵箱地址、密碼和SMTP服務(wù)器地址。
  • 發(fā)送郵件:使用 send 方法發(fā)送郵件。
  • 異常處理:使用 try-except 塊捕獲可能的異常。

3. 使用email庫發(fā)送郵件

email 庫是 Python 標(biāo)準(zhǔn)庫中的一個(gè)模塊,用于構(gòu)建復(fù)雜的郵件內(nèi)容。結(jié)合 smtplib,可以發(fā)送包含附件、HTML 內(nèi)容等復(fù)雜郵件。下面是一個(gè)使用 email 庫發(fā)送帶附件的郵件的例子。

示例代碼:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# 郵件發(fā)送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 創(chuàng)建一個(gè) MIMEMultipart 對象
msg = MIMEMultipart()

# 設(shè)置郵件頭部信息
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = 'Python email 庫郵件測試'

# 添加郵件正文
body = '這是一封使用 email 庫發(fā)送的測試郵件,包含附件'
msg.attach(MIMEText(body, 'plain'))

# 添加附件
filename = "example.txt"
attachment = open("path/to/example.txt", "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename={filename}')
msg.attach(part)

# 連接 SMTP 服務(wù)器并發(fā)送郵件
try:
    smtp_obj = smtplib.SMTP('smtp.example.com', 25)
    smtp_obj.login(sender, 'your_password')
    smtp_obj.sendmail(sender, receiver, msg.as_string())
    print("郵件發(fā)送成功")
except smtplib.SMTPException as e:
    print("Error: 無法發(fā)送郵件", e)
finally:
    smtp_obj.quit()

代碼解釋:

  • 導(dǎo)入模塊:導(dǎo)入 smtplib 和 email 庫的相關(guān)模塊。
  • 設(shè)置郵件發(fā)送方和接收方:定義發(fā)送方和接收方的郵箱地址。
  • 創(chuàng)建MIMEMultipart對象:使用 MIMEMultipart 創(chuàng)建一個(gè)郵件對象。
  • 設(shè)置郵件頭部信息:設(shè)置郵件的發(fā)送者、接收者和主題。
  • 添加郵件正文:使用 MIMEText 創(chuàng)建郵件正文,并將其附加到郵件對象中。
  • 添加附件:打開附件文件,使用 MIMEBase 創(chuàng)建附件對象,設(shè)置附件內(nèi)容并進(jìn)行 base64 編碼,最后將附件附加到郵件對象中。
  • 連接SMTP服務(wù)器:使用 smtplib.SMTP 連接到SMTP服務(wù)器,并使用 login 方法登錄。
  • 發(fā)送郵件:使用 sendmail 方法發(fā)送郵件。
  • 異常處理:使用 try-except 塊捕獲可能的異常。
  • 關(guān)閉連接:使用 quit 方法關(guān)閉SMTP連接。

實(shí)戰(zhàn)案例:自動(dòng)化發(fā)送每日天氣報(bào)告

假設(shè)我們需要每天自動(dòng)發(fā)送一封包含當(dāng)日天氣報(bào)告的郵件給指定的收件人。我們可以結(jié)合 requests 庫獲取天氣數(shù)據(jù),并使用 smtplib 或 yagmail 發(fā)送郵件。

獲取天氣數(shù)據(jù):

import requests

def get_weather(city):
    url = f"http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}"
    response = requests.get(url)
    data = response.json()
    return data['current']['temp_c'], data['current']['condition']['text']

temperature, condition = get_weather('New York')
print(f"當(dāng)前溫度: {temperature}°C, 天氣狀況: {condition}")

發(fā)送郵件:

import yagmail

def send_weather_report(email, city):
    temperature, condition = get_weather(city)
    body = f"親愛的用戶,\n\n這是您訂閱的每日天氣報(bào)告。\n\n城市: {city}\n當(dāng)前溫度: {temperature}°C\n天氣狀況: {condition}\n\n祝您一天愉快!"

    yag = yagmail.SMTP(user='your_email@example.com', password='your_password', host='smtp.example.com')
    try:
        yag.send(to=email, subject=f'{city} 每日天氣報(bào)告', contents=body)
        print("郵件發(fā)送成功")
    except Exception as e:
        print("Error: 無法發(fā)送郵件", e)

send_weather_report('recipient_email@example.com', 'New York')

代碼解釋:

  • 獲取天氣數(shù)據(jù):使用 requests 庫調(diào)用天氣 API 獲取指定城市的天氣數(shù)據(jù)。
  • 發(fā)送郵件:使用 yagmail 庫發(fā)送包含天氣報(bào)告的郵件。
  • 函數(shù)封裝:將獲取天氣數(shù)據(jù)和發(fā)送郵件的功能封裝成兩個(gè)函數(shù),便于調(diào)用和維護(hù)。

總結(jié)

今天我們學(xué)習(xí)了使用 Python 發(fā)送郵件的三種方法:smtplib 模塊、yagmail 庫和 email 庫。每種方法都有其特點(diǎn)和適用場景:

  • smtplib 模塊適合基礎(chǔ)的郵件發(fā)送需求,適用于簡單的文本郵件。
  • yagmail 庫簡化了郵件發(fā)送的過程,適合快速開發(fā)和調(diào)試。
  • email 庫結(jié)合 smtplib 可以發(fā)送復(fù)雜的郵件,如包含附件和 HTML 內(nèi)容的郵件。

通過實(shí)戰(zhàn)案例,我們還學(xué)會(huì)了如何結(jié)合第三方 API 自動(dòng)化發(fā)送每日天氣報(bào)告。

責(zé)任編輯:趙寧寧 來源: 手把手PythonAI編程
相關(guān)推薦

2023-10-13 10:45:18

HTTP數(shù)據(jù)

2022-07-13 16:06:16

Python參數(shù)代碼

2009-07-08 12:56:32

編寫Servlet

2021-02-03 18:05:30

Python方法列表

2009-06-23 10:45:18

Hibernate支持

2011-06-10 10:43:12

Ubuntu應(yīng)用安裝

2021-02-06 11:26:55

Python開發(fā)list

2022-04-28 07:26:17

PythonDocker容器

2009-12-11 18:49:39

預(yù)算編制博科資訊

2011-04-18 15:32:45

游戲測試測試方法軟件測試

2010-09-14 15:10:49

CSS注釋

2023-08-14 17:58:13

RequestHTTP請求

2020-06-17 10:52:00

DDoS攻擊網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2016-10-12 13:53:38

JavaByteBufferRandomAcces

2010-11-16 16:11:28

Oracle身份驗(yàn)證

2010-09-08 13:29:48

CSS

2023-02-21 14:58:12

間序列周期數(shù)據(jù)集

2013-01-04 15:47:54

Android開發(fā)平鋪UI設(shè)計(jì)

2023-09-25 15:08:43

Python方離群值

2021-12-20 07:11:26

Java List排序 Java 基礎(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號