python2.7實現(xiàn)郵件發(fā)送功能
要想實現(xiàn)一個能夠發(fā)送帶有文本、圖片、附件的python程序,首先要熟悉兩大模塊:
email以及smtplib
然后對于MIME(郵件擴展)要有一定認知,因為有了擴展才能發(fā)送附件以及圖片這些媒體或者非文本信息
最后一個比較細節(jié)的方法就是MIMEMultipart,要理解其用法以及對應參數(shù)所實現(xiàn)的功能區(qū)別
發(fā)送郵件三部曲:
創(chuàng)建協(xié)議對象
連接郵件服務器
登陸并發(fā)送郵件
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import mimetypes
from email.mime.multipart import MIMEMultipart
import os
import smtplib
from email import Encoders as email_encoders
class Message(object):
def __init__(self, from_addr, to_addr, subject="", html="", text=None, cc_addr=[], attachment=[]):
self.from_addr = from_addr
self.subject = subject
if to_addr:
if isinstance(to_addr, list):
self.to_addr = to_addr
else:
self.to_addr = [d for d in to_addr.split(',')]
else:
self.to_addr = []
if cc_addr:
if isinstance(cc_addr, list):
self.cc_addr = cc_addr
else:
self.cc_addr = [d for d in cc_addr.split(',')]
else:
self.cc_addr = []
if html is not None:
self.body = html
self.body_type = "html"
else:
self.body = text
self.body_type = "plain"
self.parts = []
if isinstance(attachment, list):
for file in attachment:
self.add_attachment(file)
def add_attachment(self, file_path, mimetype=None):
"""
If *mimetype* is not specified an attempt to guess it is made. If nothing
is guessed then `application/octet-stream` is used.
"""
if not mimetype:
mimetype, _ = mimetypes.guess_type(file_path)
if mimetype is None:
mimetype = 'application/octet-stream'
type_maj, type_min = mimetype.split('/')
with open(file_path, 'rb') as fh:
part_data = fh.read()
part = MIMEBase(type_maj, type_min)
part.set_payload(part_data)
email_encoders.encode_base64(part)
part_filename = os.path.basename(file_path)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% part_filename)
part.add_header('Content-ID', part_filename)
self.parts.append(part)
def __to_mime_message(self):
"""Returns the message as
:py:class:`email.mime.multipart.MIMEMultipart`."""
## To get the message work in iOS, you need use multipart/related, not the multipart/alternative
msg = MIMEMultipart('related')
msg['Subject'] = self.subject
msg['From'] = self.from_addr
msg['To'] = ','.join(self.to_addr)
if len(self.cc_addr) > 0:
msg['CC'] = ','.join(self.cc_addr)
body = MIMEText(self.body, self.body_type)
msg.attach(body)
# Add Attachment
for part in self.parts:
msg.attach(part)
return msg
def send(self, smtp_server='localhost'):
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.sendmail(from_addr=self.from_addr, to_addrs=self.to_addr + self.cc_addr, msg=self.__to_mime_message().as_string())
smtp.close()
對于實際發(fā)送程序,要注意個參數(shù)的類型,比如from_addr是字符串,to_addr和cc_addr以及attachment都是列表
from mail_base import Message
import datetime
from_addr = 'xxx'
mail_to = 'xxx'
def send_go():
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
attach_files = ['testcsv.xlsm','test1.jpg','test2.jpg','test3.jpg']
mail_msg = """
<p>Hi Lockey:</p>
<p><img src="cid:test1.jpg"></p>####要特別注意這里,正文插入圖片的特殊格式?。?!
<hr/>
<p style="text-indent:16px">Here is the latest paper link from The Economist, you can click <a rel="external nofollow" >Go</a> for a full view!</p>
<hr/>
<p>Best Regards</p>
<p>
Any question please mail to <a href='mailto:iooiooi23@163.com'>Lockey23</a>.
</p>
<p>Sent at {} PST</p>
""".format(time_now)
subject = '[Halo] - ' + 'A new paper published!'
msg = Message(from_addr=from_addr,
to_addr=[mail_to],
cc_addr=[mail_to],
subject=subject,
attachment=attach_files,
html=mail_msg
)
msg.send()
if __name__ == '__main__':
send_go()
對于測試程序我們命名為sendGo.py,運行測試程序
~$ python sendGo.py

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- python實現(xiàn)郵件發(fā)送功能
- python生成每日報表數(shù)據(Excel)并郵件發(fā)送的實例
- python實現(xiàn)QQ郵箱/163郵箱的郵件發(fā)送
- python3.4實現(xiàn)郵件發(fā)送功能
- python模塊smtplib實現(xiàn)純文本郵件發(fā)送功能
- python郵件發(fā)送smtplib使用詳解
- Python實現(xiàn)的查詢mysql數(shù)據庫并通過郵件發(fā)送信息功能
- Python實現(xiàn)定時備份mysql數(shù)據庫并把備份數(shù)據庫郵件發(fā)送
- python實現(xiàn)12306搶票及自動郵件發(fā)送提醒付款功能
- python實現(xiàn)自動發(fā)送郵件發(fā)送多人、群發(fā)、多附件的示例
- 利用python實現(xiàn)簡單的郵件發(fā)送客戶端示例
- python定時利用QQ郵件發(fā)送天氣預報的實例
- python實現(xiàn)SMTP郵件發(fā)送功能
- python使用smtplib模塊通過gmail實現(xiàn)郵件發(fā)送的方法
- python實現(xiàn)郵件自動發(fā)送
相關文章
Python的Django框架可適配的各種數(shù)據庫介紹
這篇文章主要介紹了Python的Django框架可適配的各種數(shù)據庫,簡單總結為就是流行的幾種數(shù)據庫Python基本上全部能用XD 需要的朋友可以參考下2015-07-07
Python實現(xiàn)統(tǒng)計單詞出現(xiàn)的個數(shù)
這篇文章主要介紹了Python實現(xiàn)統(tǒng)計單詞出現(xiàn)的個數(shù),本文給出了實現(xiàn)代碼以及使用方法,需要的朋友可以參考下2015-05-05

