[Python]發送email的幾種方式
python發送email還是比較簡單的,可以通過登入郵件服務來發送,linux下也可以使用調用sendmail命令來發送,還可以使用本地或者是遠端smtp服務來發送郵件,不管是單個,群發,還是抄送都比較容易實現。
先把幾個最簡單的發送郵件方式記錄下,像html郵件,附件等也是支援的,需要時查文檔即可
1 登入郵件服務
#!/usr/bin/env python# -*- coding: utf-8 -*-#python2.7x#send_simple_email_by_account.py @2014-07-30#author: orangleliu'''使用python寫郵件 simple使用126 的郵箱服務'''import smtplibfrom email.mime.text import MIMETextSMTPserver = 'smtp.126.com'sender = 'liuzhizhi123@126.com'password = "xxxx"message = 'I send a message by Python. 你好'msg = MIMEText(message)msg['Subject'] = 'Test Email by Python'msg['From'] = sendermsg['To'] = destinationmailserver = smtplib.SMTP(SMTPserver, 25)mailserver.login(sender, password)mailserver.sendmail(sender, [sender], msg.as_string())mailserver.quit()print 'send email success'
2調用sendmail命令 (linux)
# -*- coding: utf-8 -*-#python2.7x#send_email_by_.py#author: orangleliu#date: 2014-08-15'''用的是sendmail命令的方式這個時候郵件還不定可以發出來,hostname配置可能需要更改'''from email.mime.text import MIMETextfrom subprocess import Popen, PIPEdef get_sh_res(): p = Popen(['/Application/2.0/nirvana/logs/log.sh'], stdout=PIPE) return str(p.communicate()[0])def mail_send(sender, recevier): print "get email info..." msg = MIMEText(get_sh_res()) msg["From"] = sender msg["To"] = recevier msg["Subject"] = "Yestoday interface log results" p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE) res = p.communicate(msg.as_string()) print 'mail sended ...'if __name__ == "__main__": s = "957748332@qq.com" r = "zhizhi.liu@chinacache.com" mail_send(s, r)
3 使用smtp服務來發送(本地或者是遠程伺服器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#python2.7x#send_email_by_smtp.py#author: orangleliu#date: 2014-08-15'''linux 下使用本地的smtp服務來發送郵件前提要開啟smtp服務,檢查的方法#ps -ef|grep sendmail#telnet localhost 25這個時候郵件還不定可以發出來,hostname配置可能需要更改'''import smtplibfrom email.mime.text import MIMETextfrom subprocess import Popen, PIPEdef get_sh_res(): p = Popen(['/Application/2.0/nirvana/logs/log.sh'], stdout=PIPE) return str(p.communicate()[0])def mail_send(sender, recevier): msg = MIMEText(get_sh_res()) msg["From"] = sender msg["To"] = recevier msg["Subject"] = "Yestoday interface log results" s = smtplib.SMTP('localhost') s.sendmail(sender, [recevier], msg.as_string()) s.quit() print 'send mail finished...'if __name__ == "__main__": s = "zhizhi.liu@chinacache.com" r = s mail_send(s, r)
本文出自 “orangleliu筆記本” 部落格,請務必保留此出處 http://blog.csdn.net/orangleliu/article/details/38591513