天天看點

python郵件處理

SMTP

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協定,它是一組用于由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。

Python對SMTP支援有smtplib和email兩個子產品,email負責構造郵件,smtplib負責發送郵件。

Python建立 SMTP 對象文法如下:

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )      

參數說明:

port: 如果你提供了 
host 參數, 你需要指定 
SMTP 服務使用的端口号,一般情況下 
SMTP 端口号為25。
local_hostname: 如果 SMTP 在你的本機上,你隻需要指定伺服器位址為 localhost 即可。      

Python SMTP 對象使用 sendmail 方法發送郵件,文法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])      
from_addr: 郵件發送者位址。
to_addrs: 字元串清單,郵件發送位址。
msg: 發送消息
這裡要注意一下第三個參數,msg 是字元串,表示郵件。我們知道郵件一般由标題,發信人,收件人,郵件内容,附件等構成,發送郵件的時候,要注意 msg 的格式。這個格式就是 smtp 協定中定義的格式。      

通過python發郵件步驟

前提:開通了第三方授權,可以使用smtp服務

1.建立smtp對象

2.連接配接smtp伺服器,預設端口号都是25

3.登陸自己的郵箱賬号

4.調用發送消息函數,參數:發件人、收件人、消息内容

5.關閉連接配接

發送郵件的例子

import email.mime.multipart
import email.mime.text
import smtplib


msg = email.mime.multipart.MIMEMultipart()  #通過這個類建立消息
msg['from'] = '[email protected]'  # 郵件發件人
msg['to'] =  '[email protected]'  # 郵件收件人
msg['subject'] = 'It's a test mail'  # 郵件主題

context = '''  # 郵件正文
    <h1>老師好</h1>
    你好,
     這是一封自動發送的郵件。
      www.ustchacker.com hello
    '''
text = email.mime.text.MIMEText(_text=context, _subtype="html")  # 定義文本以後,标明将context指定成什麼格式,html,txt
msg.attach(text)  # 郵件消息注冊

em = smtplib.SMTP_SSL()
em.connect("smtp.qq.com", 465)
em.login("[email protected]", '123456')
em.sendmail(from_addr='[email protected]', to_addrs='[email protected]', msg=msg.as_string())
em.quit()  # 關閉連接配接      

發送帶附件的郵件

import smtplib
import email.mime.multipart
import email.mime.text
import os
from email import encoders
msg = email.mime.multipart.MIMEMultipart()
msg['from'] = '[email protected]'
msg['to'] = '[email protected];[email protected]'
msg['subject'] = 'mail'

context = '''  # 郵件正文
    <h1>老師好</h1>
    你好,
     這是一封自動發送的郵件。
      www.ustchacker.com hello
    '''
    
txt = email.mime.text.MIMEText(_text=content, _subtype="html")
msg.attach(txt)
#############
attfile = 'test.py'
basename = os.path.basename(attfile)
fp = open(attfile, 'rb')  #打開檔案,讀出檔案字元串
att = email.mime.text.MIMEText(fp.read(), 'html', 'utf-8')  #通過MIMT    ext()類來建立一個對象att,傳入檔案讀出内容
att["Content-Type"] = 'application/octet-stream'
# 增加att的頭部資訊,并指定檔案名字
att.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', basename)) #three-tuple of (charset, language, value),encoders.encode_base64(att)
msg.attach(att)  #添加到msg消息中msg.attach(att)
##########
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com', '25')
smtp.login('[email protected]', '123456')
smtp.sendmail(from_addr='[email protected]', to_addrs=['[email protected]', '[email protected]'], msg=msg.as_string())
smtp.quit()      

使用第三方子產品

yagmail庫的源代碼隻有幾百行代碼,它是對SMTP以及email子產品的一個智能封裝。

安裝

pip install yagmail      

官方例子

import yagmail
yag = yagmail.SMTP()
contents = [
    "This is the body, and here is just text http://somedomain/image.png",
    "You can find an audio file attached.", '/local/path/to/song.mp3'
]
yag.send('[email protected]', 'subject', contents)

# Alternatively, with a simple one-liner:
yagmail.SMTP('mygmailusername').send('[email protected]', 'subject', contents)      

我們自己寫一個

import yagmail


args={
    "user": "[email protected]",  # 郵箱賬号
    "password": "123456",        # 郵箱密碼
    "host": "smtp.163.com",      # SMTP伺服器
    "port": "465"                # SMTP伺服器端口
}


emailList=["[email protected]","[email protected]", "[email protected]"]      # 可以一次性發送郵件給多個人
email = yagmail.SMTP(**args)
email.send(to='[email protected]',subject="mail",contents="test mail",cc="[email protected]")      

詳解:

to  發送給誰

subject  主題

content  内容 它傳遞的是一個清單,這裡還可以帶附件 contents=[body, 'imag.png', 'test.pdf'] 其中body是正文

cc   抄送給誰