Python SMTP:發送電子郵件的標準協議

一、SMTP協議是什麼

SMTP(簡單郵件傳輸協議)是Internet上約定的發送郵件的標準協議,是一種用於發送電子郵件的協議。

SMTP協議中,收件人郵件伺服器會等待發送郵件伺服器通過TCP協議的25埠連接並發送郵件。發送方的客戶端將郵件交給SMTP服務代理或郵件伺服器,等待其將消息發送出去並通知用戶郵件已經被成功發送。SMTP伺服器是一個已認證的郵件伺服器,只有經它允許或授權的用戶,才能發送郵件。

Python中的smtplib庫提供了發送郵件所需的方法,我們可以使用Python來構建SMTP客戶端實現郵件發送。

二、SMTP發送郵件的基本步驟

發送郵件通常包含以下幾個步驟:

1、建立連接,連接到郵件伺服器:“`smtpObj = smtplib.SMTP_SSL(mail_host, 465)“`

2、登錄郵箱:“`smtpObj.login(mail_user, mail_pass)“`

3、設置郵件內容和發送者、收件人等信息:“`message = MIMEText(mail_content, ‘html’, ‘utf-8’)“`、“`message[‘From’] = formataddr([“發件人姓名”,mail_user])“`、“`message[‘To’] = formataddr([“收件人姓名”,receiver])“`、“`message[‘Subject’] = mail_title“`、“`smtpObj.sendmail(sender, receiver, message.as_string())“`

4、結束會話,退出郵箱:“`smtpObj.quit()“`

# 完整代碼示例
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

mail_host = ""  # 郵箱伺服器地址
mail_user = ""    # 發件人郵箱賬號
mail_pass = ""   # 發件人郵箱授權碼(非郵箱登錄密碼)
sender = ""       # 發件人郵箱
receiver = ""   # 收件人郵箱
mail_title = "測試郵件"  # 郵件標題
mail_content = "

這是測試郵件的內容

" # 郵件正文 def send_email(): try: smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 創建SMTP連接 smtpObj.login(mail_user, mail_pass) # 登錄郵箱 message = MIMEText(mail_content, 'html', 'utf-8') # 構建郵件內容 message['From'] = formataddr(["發件人姓名",mail_user]) # 設置郵件發件人名稱和郵箱地址 message['To'] = formataddr(["收件人姓名",receiver]) # 設置郵件收件人名稱和郵箱地址 message['Subject'] = mail_title # 設置郵件標題 smtpObj.sendmail(sender, receiver, message.as_string()) # 發送郵件 smtpObj.quit() # 退出郵箱 print("郵件發送成功!") except Exception as e: print("郵件發送失敗!") print(e) send_email()

三、主要函數及方法的詳細介紹

1、smtplib.SMTP類:SMTP類提供了SMTP連接的基本實現,可以通過郵件伺服器地址和埠號來初始化一個SMTP對象,連接到郵件伺服器。SMTP對象可以使用login()、sendmail()等方法來處理郵件的發送相關操作。

2、login()方法:SMTP對象的login()方法,用於登錄到一個SMTP伺服器。login()方法需要提供郵箱賬號和授權碼信息,只有登錄了郵箱才能發送郵件。

3、sendmail()方法:SMTP對象的sendmail()方法,用於將郵件發送出去。sendmail()方法需要提供發件人、收件人、郵件內容等信息,將郵件發送給指定的收件人郵箱。

import smtplib

# 可選3種方式建立連接
smtpObj = smtplib.SMTP()   # 第一種:建立普通的連接並進行身份驗證
smtpObj = smtplib.SMTP_SSL()  # 第二種:建立基於SSL加密的連接並進行身份驗證
smtpObj = smtplib.SMTP_SSL(mail_host, port)    # 第三種:直接傳入郵箱伺服器和埠號,建立基於SSL加密連接並進行身份驗證

smtpObj.login(mail_user, mail_pass)   # 登錄到郵箱
smtpObj.sendmail(sender, receiver, message.as_string())   # 發郵件
smtpObj.quit()   # 退出郵箱

四、常見問題及解決方法

1、如何連接SMTP伺服器?

使用SMTP類提供的connect()方法,傳入郵箱伺服器和埠號,建立SMTP連接。

2、如何處理郵件標題和內容?

可以使用email模塊中的MIMEText類來處理郵件標題和內容,設置MIME類型為’html’即可支持HTML標籤。

3、如何處理髮件人和收件人名稱?

使用email.utils模塊的formataddr()方法,可以將發件人和收件人名稱和郵箱地址組合成必要的郵件地址格式。

4、如何處理附件或圖片的發送?

可以使用email模塊中的MIMEImage、MIMEApplication、MIMEAudio、MIMEMultipart等類來處理附件、圖片、音頻等多媒體文件的發送。

5、如何處理網路連接或SMTP異常?

可以使用Python自帶的try…except方法來處理SMTP連接或發送郵件時可能出現的各種異常,比如連接異常、許可權驗證出錯、郵件發送失敗等情況。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/235541.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:55
下一篇 2024-12-12 11:55

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論