1. 程式人生 > >python發郵件smtplib+mail

python發郵件smtplib+mail

  • python實現發郵件
    1)python發郵件需要掌握兩個模組的用法,smtplib和email;smtplib模組主要負責傳送郵件:是一個傳送郵件的動作,連線郵箱伺服器,登入郵箱,傳送郵件(有發件人,收信人,郵件內容);email模組主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。
    2)smtplib模組
    (1)smtp = smtplib.SMTP(host[, 25])或者smtplib.SMTP_SSL(host, 465)
    host:為指定連線的郵箱伺服器,為字串型別,
    如:
    163網易郵箱:smtp.163.com
    公司內部郵箱:mail.xxxxx.com
    qq郵箱:smtp.qq.com
    注意:163、公司內部郵箱用25和465埠均可以傳送郵件(SMTP對應25,可以省略;SMTP_SSL對應465不可以省略),而qq只能用smtplib.SMTP_SSL(host, 465)傳送!
    (3)smtp.login(username, password)
    username:登入郵箱的使用者名稱。
    password:若為網易郵箱,或者qq郵箱則只能用相應的授權碼,預設是關閉的,開啟時在相應的網頁郵箱設定處可以設定授權碼,此授權碼會隨著密碼的變更失效,那時需要重新獲取。qq的pop和imap的授權碼不同,但測試均可使用。
    (4)smtp.sendmail(sender, receiver, msg.as_string())
    from_addr:郵件傳送者地址,字串型別;
    receiver:若為單個地址直接用字串表示,若收件人有多個,則用字串列表:[‘接收地址1’,’接收地址2’,’接收地址3’,…]
    msg.as_string():為一個字串型別
    (5)smtp.quit()
    用於結束SMTP會話。
    所以,用以上幾步就可以實現一個郵件的傳送,但傳送的郵件無發件人,無主題,只有一個簡單的msg.as_string()字串作為內容。若需要新增各種附件等還需要email模組配合
    3)email模組
    email模組下有mime包(Multipurpose Internet Mail Extensions),即多用途網際網路郵件擴充套件,是目前網際網路電子郵件普遍遵循的郵件技術規範;
    該mime包下常用的有三個模組:text,image,multpart
    匯入方法如下:
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    MIMEText物件:文字郵件物件
    MIMEImage物件:表示一個作為附件的圖片
    MIMEMultipart物件:把多個物件組合起來
    MIMEBase物件:可表示任何物件
    Message物件:郵件物件
    (1)MIMEText物件說明
    郵件傳送程式為了防止有些郵件閱讀軟體不能顯示處理HTML格式的資料,通常都會用兩型別分別為”text/plain”和”text/html”
    MIMEText(text, _subtype=’plain’, _charset=None, *, policy=None)
    第一個引數為郵件正文,第二個引數預設為plain(純文字的普通檔案),還可以指定為”html”,最後一定要用utf-8編碼保證多語言相容性。
    a)新增普通文字(指定編碼為utf-8所以可以為中文)
    text = “Hi,All:\n How are you?\n我愛python”
    text_plain = MIMEText(text,’plain’, ‘utf-8’)
    b)新增html文字(可已有中文)
    這裡寫圖片描述

    c)新增附件
    這裡寫圖片描述
    這裡的filename為要重新命名顯示的檔名,這裡的方法附件名可以為中文,注意中間的那個空字串不能省略。
    2)新增圖片MIMEImage(直接顯示圖片內容)
    這裡寫圖片描述
    3)multpart說明
    常見的multipart型別有下面三種:
    multipart/alternative的郵件包括text/plain和text/html
    multipart/related:郵件正文中包括圖片,聲音等內嵌資源
    multipart/mixed:包含附件
    注意:向上相容,如果一個郵件有純文字正文,超文字正文,內嵌資源,附件,則選擇mixed型別。
    msg = MIMEMultipart(‘mixed’),一開始就要設定msg物件,然後文字、圖片、附件等用msg.attach(text_att/image)等附加。
    我們必須把Subject,From,To,Date新增到MIMEText物件或者MIMEMultipart物件中,郵件中才會顯示主題,發件人,收件人,時間(若無時間,就預設一般為當前時間,該值一般不設定)。
    subject = ‘歡迎加入XX大家庭’
    msg = MIMEMultipart(‘mixed’)
    msg[‘Subject’] = subject
    msg[‘From’] = ‘你
    [email protected]
    [email protected]
    msg[‘To’] = ‘好[email protected]
    這裡寫圖片描述
    說明:
    msg.add_header(_name,_value,**_params):新增郵件頭欄位。
    msg.as_string():是將msg(MIMEText物件或者MIMEMultipart物件)變為str,如果只有一個html超文字正文或者plain普通文字正文的話,一般msg的型別可以是MIMEText;如果是多個的話,就都新增到MIMEMultipart,msg型別就變為MIMEMultipart。
    msg.attach(MIMEText物件或MIMEImage物件):將MIMEText物件或MIMEImage物件新增到MIMEMultipart物件中。MIMEMultipart物件代表郵件本身,MIMEText物件或MIMEImage物件代表郵件正文。
    以上的構造的文字,超文字,附件,圖片都何以新增到MIMEMultipart(‘mixed’)中:
    msg.attach(text_plain)
    msg.attach(text_html)
    msg.attach(text_att)
    msg.attach(image)
    4)文字,html,圖片,附件實現例項
    這裡寫圖片描述

    這裡寫圖片描述
    這裡寫圖片描述