天天看點

python發郵件

python發郵件需要掌握兩個子產品的用法,smtplib和email,這倆子產品是python自帶的,隻需import即可使用。smtplib子產品主要負責發送郵件,email子產品主要負責構造郵件。

smtplib子產品主要負責發送郵件:是一個發送郵件的動作,連接配接郵箱伺服器,登入郵箱,發送郵件(有發件人,收信人,郵件内容)。

email子產品主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。

python發郵件

1.smtplib子產品

smtplib使用較為簡單。以下是最基本的文法。

導入及使用方法如下:

說明:

smtplib.smtp():執行個體化smtp()

connect(host,port):

host:指定連接配接的郵箱伺服器。常用郵箱的smtp伺服器位址如下:

新浪郵箱:smtp.sina.com,新浪vip:smtp.vip.sina.com,搜狐郵箱:smtp.sohu.com,126郵箱:smtp.126.com,139郵箱:smtp.139.com,163網易郵箱:smtp.163.com。

port:指定連接配接伺服器的端口号,預設為25.

login(user,password):

user:登入郵箱的使用者名。

password:登入郵箱的密碼,像筆者用的是網易郵箱,網易郵箱一般是網頁版,需要用到用戶端密碼,需要在網頁版的網易郵箱中設定授權碼,該授權碼即為用戶端密碼。

sendmail(from_addr,to_addrs,msg,...):

from_addr:郵件發送者位址

to_addrs:郵件接收者位址。字元串清單['接收位址1','接收位址2','接收位址3',...]或'接收位址'

msg:發送消息:郵件内容。一般是msg.as_string():as_string()是将msg(mimetext對象或者mimemultipart對象)變為str。

quit():用于結束smtp會話。

2.email子產品

email子產品下有mime包,mime英文全稱為“multipurpose internet mail extensions”,即多用途網際網路郵件擴充,是目前網際網路電子郵件普遍遵循的郵件技術規範。

該mime包下常用的有三個子產品:text,image,multpart。

導入方法如下:

構造一個郵件對象就是一個<code>message</code>對象,如果構造一個<code>mimetext</code>對象,就表示一個文本郵件對象,如果構造一個<code>mimeimage</code>對象,就表示一個作為附件的圖檔,要把多個對象組合起來,就用<code>mimemultipart</code>對象,而<code>mimebase</code>可以表示任何對象。它們的繼承關系如下:

2.1 text說明

郵件發送程式為了防止有些郵件閱讀軟體不能顯示處理html格式的資料,通常都會用兩類型分别為"text/plain"和"text/html"

構造mimetext對象時,第一個參數是郵件正文,第二個參數是mime的subtype,最後一定要用utf-8編碼保證多語言相容性。

2.1.1添加普通文本

檢視mimetext屬性:可以觀察到mimetext,mimeimage和mimemultipart的屬性都一樣。

['__contains__', '__delitem__', '__doc__', '__getitem__', '__init__', '__len__', '__module__', '__setitem__', '__str__', '_charset', '_default_type', '_get_params_preserve', '_headers', '_payload', '_unixfrom', 'add_header', 'as_string', 'attach', 'defects', 'del_param', 'epilogue', 'get', 'get_all', 'get_boundary', 'get_charset', 'get_charsets', 'get_content_charset', 'get_content_maintype', 'get_content_subtype', 'get_content_type', 'get_default_type', 'get_filename', 'get_param', 'get_params', 'get_payload', 'get_unixfrom', 'has_key', 'is_multipart', 'items', 'keys', 'preamble', 'replace_header', 'set_boundary', 'set_charset', 'set_default_type', 'set_param', 'set_payload', 'set_type', 'set_unixfrom', 'values', 'walk']

2.1.2添加超文本

2.1.3添加附件

2.2 image說明

添加圖檔:

檢視mimeimage屬性:

2.3 multpart說明

常見的multipart類型有三種:multipart/alternative, multipart/related和multipart/mixed。

郵件類型為"multipart/alternative"的郵件包括純文字正文(text/plain)和超文本正文(text/html)。

郵件類型為"multipart/related"的郵件正文中包括圖檔,聲音等内嵌資源。

郵件類型為"multipart/mixed"的郵件包含附件。向上相容,如果一個郵件有純文字正文,超文本正文,内嵌資源,附件,則選擇mixed類型。

我們必須把subject,from,to,date添加到mimetext對象或者mimemultipart對象中,郵件中才會顯示主題,發件人,收件人,時間(若無時間,就預設一般為目前時間,該值一般不設定)。

檢視mimemultipart屬性:

結果:

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')中:

3.文字,html,圖檔,附件實作執行個體