使用python發郵件

來源:互聯網
上載者:User

 

        下面簡單介紹下如何使用python發送郵件,包括普通常值內容,也可以帶附件,或者HTML內容的郵件。可以說有了python,一切都變得非常的容易。

        smtplib 模組是用來發送email的標準module,另外配合email.mime內的幾個module實現起來就非常的簡單。

[python]
view plaincopyprint?
  1. def sendmail(message):  
  2.     try:  
  3.         smtp = smtplib.SMTP(EMAIL_HOST)  
  4.         smtp.login(EMAIL_USER, EMAIL_PWD)    
  5.         smtp.sendmail(EMAIL_USER+"@"+EMAIL_POSTFIX, TO_EMAIL, message)    
  6.         smtp.quit()    
  7.         print 'email send success.'  
  8.     except Exception ,e:  
  9.         print e  
  10.         print 'email send failed.'  
def sendmail(message):    try:        smtp = smtplib.SMTP(EMAIL_HOST)        smtp.login(EMAIL_USER, EMAIL_PWD)          smtp.sendmail(EMAIL_USER+"@"+EMAIL_POSTFIX, TO_EMAIL, message)          smtp.quit()          print 'email send success.'    except Exception ,e:        print e        print 'email send failed.'

    首先要匯入smtplib模組,加入import smtplib,初始化的時候直接連上郵箱伺服器,也就是上面的EMAIL_HOST(我使用的是163郵箱,所以定義EMAIL_HOST = 'smtp.163.com'),由於目前的郵箱基本都需要登入才可以使用,所以要調用smtp.login()函數,輸入使用者和密碼。

[python]
view plaincopyprint?
  1. def sendwithoutattachment():  
  2.     msg = MIMEText(getcontent(), 'plain','utf-8')  
  3.     getheader(msg)  
  4.       
  5.     sendmail(msg.as_string())  
def sendwithoutattachment():    msg = MIMEText(getcontent(), 'plain','utf-8')    getheader(msg)        sendmail(msg.as_string())

    我將發送簡單常值內容的郵件單獨獨立為一個函數,使用MIMEText產生,注意這裡用到了utf-8,因為內容有可能是中文,所以要特別指定。如果要發送html內容,則講plain更改為html即可。

[python]
view plaincopyprint?
  1. def getheader(msg):  
  2.     msg['From'] = ME  
  3.     msg['To'] = ";".join(TO_EMAIL)  
  4.     msg['Subject'] = EMAIL_HEADER  
  5.     msg['Date'] = formatdate(localtime=True)  
def getheader(msg):    msg['From'] = ME    msg['To'] = ";".join(TO_EMAIL)    msg['Subject'] = EMAIL_HEADER    msg['Date'] = formatdate(localtime=True)

    getheader函數是用來設定寄件者,接受者,主題和發送時間的。

[python]
view plaincopyprint?
  1. def getcontent():  
  2.     path = os.getcwd()  
  3.     file = os.path.join(path, CONTENT_FILE_NAME)  
  4.     content = open(file, 'rb')  
  5.     data = content.read()  
  6.     try:  
  7.         data = data.decode('gbk')  
  8.     except :  
  9.         data = data.decode('gbk','ignore')  
  10.     content.close()  
  11.     return data  
def getcontent():    path = os.getcwd()    file = os.path.join(path, CONTENT_FILE_NAME)    content = open(file, 'rb')    data = content.read()    try:        data = data.decode('gbk')    except :        data = data.decode('gbk','ignore')    content.close()    return data

    至於郵件內文,我是事先寫到一個TXT文檔中,讀取出來。這樣也比較隱蔽。:)要主意中文編碼。

[python]
view plaincopyprint?
  1. def getattachment(msg):  
  2.     ctype, encoding = mimetypes.guess_type(ACCESSORY_FULLPATH)  
  3.     if ctype is None or encoding is not None:    
  4.         ctype = 'application/octet-stream'    
  5.     maintype, subtype = ctype.split('/', 1)  
  6.   
  7.     #Formating accessory data
      
  8.     data = open(ACCESSORY_FULLPATH, 'rb')  
  9.     file_msg = MIMEBase(maintype, subtype)  
  10.     file_msg.set_payload(data.read( ))  
  11.     data.close( )  
  12.     encode_base64(file_msg)   
  13.     #file_msg["Content-Type"] = ctype # if add type then return error 10054
      
  14.     file_msg.add_header('Content-Disposition', 'attachment', filename = ACCESSORY_NAME)  
  15.     msg.attach(file_msg)  
def getattachment(msg):    ctype, encoding = mimetypes.guess_type(ACCESSORY_FULLPATH)    if ctype is None or encoding is not None:          ctype = 'application/octet-stream'      maintype, subtype = ctype.split('/', 1)    #Formating accessory data    data = open(ACCESSORY_FULLPATH, 'rb')    file_msg = MIMEBase(maintype, subtype)    file_msg.set_payload(data.read( ))    data.close( )    encode_base64(file_msg)     #file_msg["Content-Type"] = ctype # if add type then return error 10054    file_msg.add_header('Content-Disposition', 'attachment', filename = ACCESSORY_NAME)    msg.attach(file_msg)

   附件同樣獨立為一個函數來建立,這裡要注意的是不要指定“Content-Type”類型,否則無法發送郵件。這個問題還沒有解決。

    以上基本包括了發送郵件的主要幾個函數,具體smtplib模組和MIME等內容,資料很多,這裡就不詳細講解了,有感興趣的可以上網search。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.