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發送可以帶附件郵件的示例代碼,如下:
- #!/usr/bin/env python
- #-*-coding:utf8-*-
- import os, smtplib, mimetypes
- from email.mime.text import MIMEText
- from email.mime.image import MIMEImage
- from email.mime.multipart import MIMEMultipart
- MAIL_LIST = ["[email protected]"]
- MAIL_HOST = "smtp.linuxidc.com"
- MAIL_USER = "username"
- MAIL_PASS = "password"
- MAIL_POSTFIX = "linuxidc.com"
- MAIL_FROM = MAIL_USER + "<"+MAIL_USER + "@" + MAIL_POSTFIX + ">"
- def send_mail(subject, content, filename = None):
- try:
- message = MIMEMultipart()
- message.attach(MIMEText(content))
- message["Subject"] = subject
- message["From"] = MAIL_FROM
- message["To"] = ";".join(MAIL_LIST)
- if filename != None and os.path.exists(filename):
- ctype, encoding = mimetypes.guess_type(filename)
- if ctype is None or encoding is not None:
- ctype = "application/octet-stream"
- maintype, subtype = ctype.split("/", 1)
- attachment = MIMEImage((lambda f: (f.read(), f.close()))(open(filename, "rb"))[0], _subtype = subtype)
- attachment.add_header("Content-Disposition", "attachment", filename = filename)
- message.attach(attachment)
- smtp = smtplib.SMTP()
- smtp.connect(MAIL_HOST)
- smtp.login(MAIL_USER, MAIL_PASS)
- smtp.sendmail(MAIL_FROM, MAIL_LIST, message.as_string())
- smtp.quit()
- return True
- except Exception, errmsg:
- print "Send mail failed to: %s" % errmsg
- return False
- if __name__ == "__main__":
- if send_mail("測試信", "我的博客歡迎您:http://www.linuxidc.com/", r"G:\attachment.rar"):
- print "發送成功!"
- else:
- print "發送失敗!"