歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python實現發送郵件功能(可發送附件)

Python實現發送郵件功能(可發送附件)

日期:2017/3/1 10:21:20   编辑:Linux編程
在日常工作當中,我們經常要發送一些郵件,比如系統的監控、自動化運維、網站注冊後的確認信等各種方面。我們可以通過Python的smtplib模塊輕松的實現發送電子郵件。

smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

SMTP類構造函數,表示與SMTP服務器之間的連接,通過這個連接我們可以向SMTP服務器發送指令,執行相關操作(如:登陸、發送郵件)。該類提供了許多方法,將在下面介紹。它的所有參數都是可選的,其中host參數表示SMTP服務器主機名;port表示SMTP服務的端口,默認是25;如果在創建SMTP對象的時候提供了這兩個參數,在初始化的時候會自動調用connect方法去連接服務器。

smtplib模塊還提供了SMTP_SSL類和LMTP類,對它們的操作與SMTP基本一致。

SMTP.set_debuglevel(level)

設置是否為調試模式。默認為False,即非調試模式,表示不輸出任何調試信息。

SMTP.connect([host[, port]])

連接到指定的SMTP服務器。參數分別表示SMTP主機和端口。注意: 也可以在host參數中指定端口號(如:smtp.163.com:25),這樣就沒必要給出port參數。

SMTP.login(user, password)

登陸到SMTP服務器。現在幾乎所有的SMTP服務器,都必須在驗證用戶信息合法之後才允許發送郵件。

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

發送郵件。這裡要注意一下第三個參數,msg是字符串,表示郵件。我們知道郵件一般由標題,發信人,收件人,郵件內容,附件等構成,發送郵件的時候,要注意msg的格式。這個格式就是SMTP協議中定義的格式。

SMTP.quit()

斷開與SMTP服務器的連接,相當於發送"quit"指令。

Python中可以使用emial模塊用來處理郵件消息,包括MIME和其他基於RFC 2822的消息文檔。使用這些模塊來定義郵件的內容,是非常簡單的。

class email.mime.multipart.MIMEMultipart: 多個MIME對象的集合

class email.mime.audio.MIMEAudio: MIME音頻對象

class email.mime.image.MIMEImage: MIME二進制文件對象

class email.mime.text.MIMEText: MIME文本對象

以上介紹只是對Python中smtplib模塊和email模塊的基本介紹,詳細信息請參考官方手冊。OK,下面給出如何使用Python發送可以帶附件郵件的示例代碼,如下:

  1. #!/usr/bin/env python
  2. #-*-coding:utf8-*-
  3. import os, smtplib, mimetypes
  4. from email.mime.text import MIMEText
  5. from email.mime.image import MIMEImage
  6. from email.mime.multipart import MIMEMultipart
  7. MAIL_LIST = ["[email protected]"]
  8. MAIL_HOST = "smtp.linuxidc.com"
  9. MAIL_USER = "username"
  10. MAIL_PASS = "password"
  11. MAIL_POSTFIX = "linuxidc.com"
  12. MAIL_FROM = MAIL_USER + "<"+MAIL_USER + "@" + MAIL_POSTFIX + ">"
  13. def send_mail(subject, content, filename = None):
  14. try:
  15. message = MIMEMultipart()
  16. message.attach(MIMEText(content))
  17. message["Subject"] = subject
  18. message["From"] = MAIL_FROM
  19. message["To"] = ";".join(MAIL_LIST)
  20. if filename != None and os.path.exists(filename):
  21. ctype, encoding = mimetypes.guess_type(filename)
  22. if ctype is None or encoding is not None:
  23. ctype = "application/octet-stream"
  24. maintype, subtype = ctype.split("/", 1)
  25. attachment = MIMEImage((lambda f: (f.read(), f.close()))(open(filename, "rb"))[0], _subtype = subtype)
  26. attachment.add_header("Content-Disposition", "attachment", filename = filename)
  27. message.attach(attachment)
  28. smtp = smtplib.SMTP()
  29. smtp.connect(MAIL_HOST)
  30. smtp.login(MAIL_USER, MAIL_PASS)
  31. smtp.sendmail(MAIL_FROM, MAIL_LIST, message.as_string())
  32. smtp.quit()
  33. return True
  34. except Exception, errmsg:
  35. print "Send mail failed to: %s" % errmsg
  36. return False
  37. if __name__ == "__main__":
  38. if send_mail("測試信", "我的博客歡迎您:http://www.linuxidc.com/", r"G:\attachment.rar"):
  39. print "發送成功!"
  40. else:
  41. print "發送失敗!"
Copyright © Linux教程網 All Rights Reserved