當前位置: 首頁>>編程語言>>正文


使用Python發送Email電子郵件

Python在標準庫中包含幾個模塊,用於處理電子郵件和電子郵件服務器。

smtplib概述

smtplib模塊定義了一個SMTP客戶端會話對象,可用於使用SMTP或ESMTP偵聽器守護程序將郵件發送到任何Internet計算機。

SMTP代表簡單郵件傳輸協議。

smtplib模塊可用於與郵件服務器通信以發送郵件。

Python使用smtplib模塊基於SMTP服務器發送郵件。

實際使用情況取決於電子郵件的複雜程度和電子郵件服務器的設置,此處的說明基於通過Gmail發送電子郵件。

python發送郵件

smtplib用法

這裏的例子來自於post at wikibooks.org


"""The first step is to create an SMTP object, each object is used for connection 
with one server."""

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)

#Next, log in to the server
server.login("youremailusername", "password")

#Send the mail
msg = "
Hello!" # The /n separates the message from the headers
server.sendmail("you@gmail.com", "target@example.com", msg)

要包含 來自(From) , 發送給(To) and 主題(Subject) 郵件頭, 應該使用email包,
因為 smtplib 不能修改內容和郵件頭。

電子郵件(email)包概述

Python的電子郵件包包含許多用於編寫和解析電子郵件的類和函數。

電子郵件包的使用

我們首先隻導入我們需要的類,這也使我們不必在以後使用完整的模塊名稱。


from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

然後我們編寫一些基本的消息頭:


fromaddr = "you@gmail.com"
toaddr = "target@example.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python email"

接下來,我們將電子郵件的正文附加到MIME消息:


body = "Python test mail"
msg.attach(MIMEText(body, 'plain'))

為了發送郵件,我們必須將對象轉換為字符串,然後使用與上麵相同的prodecure使用SMTP服務器發送..


import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("youremailusername", "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)

驗證電子郵件地址

SMTP協議包括向服務器詢問地址是否有效的命令。

通常禁用VRFY以防止垃圾郵件發送者查找合法的電子郵件地址,但如果啟用了VRFY,您可以向服務器詢問地址和
接收狀態代碼,指示有效性以及用戶的全名。

這個示例基於 post


import smtplib

server = smtplib.SMTP('mail')
server.set_debuglevel(True)  # show communication with the server
try:
    dhellmann_result = server.verify('dhellmann')
    notthere_result = server.verify('notthere')
finally:
    server.quit()

print 'dhellmann:', dhellmann_result
print 'notthere :', notthere_result

使用Gmail發送郵件

這個示例來自 http://rosettacode.org/wiki/Send_an_email#Python

import smtplib
 
def sendemail(from_addr, to_addr_list, cc_addr_list,
              subject, message,
              login, password,
              smtpserver='smtp.gmail.com:587'):
    header  = 'From: %s
' % from_addr
    header += 'To: %s
' % ','.join(to_addr_list)
    header += 'Cc: %s
' % ','.join(cc_addr_list)
    header += 'Subject: %s

' % subject
    message = header + message
 
    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()
示例上述腳本的用法

sendemail(from_addr    = 'python@RC.net', 
          to_addr_list = ['RC@gmail.com'],
          cc_addr_list = ['RC@xx.co.uk'], 
          subject      = 'Howdy', 
          message      = 'Howdy from a python function', 
          login        = 'pythonuser', 
          password     = 'XXXXX')
收到的電子郵件樣本

sendemail(from_addr    = 'python@RC.net', 
          to_addr_list = ['RC@gmail.com'],
          cc_addr_list = ['RC@xx.co.uk'], 
          subject      = 'Howdy', 
          message      = 'Howdy from a python function', 
          login        = 'pythonuser', 
          password     = 'XXXXX')
來源
Python on Wikibooks.org
Rosettacode.org
Docs.python.org
http://docs.python.org/2/library/email.mime.html

 

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3920.html,未經允許,請勿轉載。