用 Python 發電子郵件
阿新 • • 發佈:2019-01-23
使用的庫
這個程式涉及兩個庫:smtplib
和 email
。
這兩個庫都是Python自帶的,所以不需要額外的下載安裝,此外,這次使用的Python版本為2.7。
思路步驟
總體思路很簡單,就像我們平常上網是通過HTTP協議一樣,我們傳送郵件是通過SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)來傳輸的,而現在我們需要做的就是
- 設定好SMTP伺服器地址
- 告訴伺服器我們的郵箱地址和密碼
- 設定要傳送的郵件內容,例如傳送者地址,接收者地址,郵件主題,郵件正文,附件等
- 將設定好的郵件內容傳給伺服器,併發送
第一步和第二步就是需要使用smtplib
smtp.qq.com
,埠號是465
或587
。
qq郵箱的SMTP地址
server = smtplib.SMTP("smtp.qq.com", 587)
第三步就是使用 email ,這是一個幫助我們設定郵件內容的庫,包括主題、正文等,然後用設定好的伺服器傳送設定好的郵件內容。
用賽克君的QQ郵箱傳送:
另一個郵箱接收(outlook郵箱)
outlook郵箱內一個帶PDF附件的郵件,可以看到附件被正確的附上了
程式原始碼
傳送無附件的郵件
# 注意此處使用QQ郵箱作為傳送郵箱,如果要用其他郵箱請更改 server 中的伺服器地址
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
fromaddr = "傳送者的郵箱地址"
toaddr = "接收者的郵箱地址"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
# 郵件主題
msg['Subject'] = "Hooah"
# 郵件正文
body = "HAHAHA!"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP("smtp.qq.com")
server.starttls()
server.login(fromaddr , "傳送者的郵箱密碼")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
傳送有附件的郵件
# 注意此處使用QQ郵箱作為傳送郵箱,如果要用其他郵箱請更改 server 中的伺服器地址
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import encoders
fromaddr = "傳送者的郵箱地址"
toaddr = "接收者的郵箱地址"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
# 郵件主題
msg['Subject'] = "Hooah"
# 郵件正文
body = "HAHAHA!"
msg.attach(MIMEText(body, 'plain'))
# 附件
filename = "AttachmentTest/kaiti.pdf"
attachment = open(filename, 'rb')
part = MIMEBase('application', 'octet-stream')
# 這也可以: part = MIMEBase('application', 'pdf')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(part)
# 設定SMTP
server = smtplib.SMTP("smtp.qq.com")
server.starttls()
server.login(fromaddr , "傳送者的郵箱密碼")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
傳送成功就可以看到如下的提示: