最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python2.7實現(xiàn)郵件發(fā)送功能

 更新時間:2018年12月12日 11:11:05   作者:Lockeyi  
這篇文章主要為大家詳細介紹了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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 如何使用 Poetry 進行 Python 項目管理

    如何使用 Poetry 進行 Python 項目管理

    本文介紹了如何安裝、卸載和管理Poetry,以及如何查看其版本和位置,此外,還詳細說明了如何使用Poetry安裝項目依賴,包括依賴解析、鎖定、虛擬環(huán)境管理等優(yōu)勢,感興趣的朋友一起看看吧
    2024-11-11
  • Python數(shù)據類型和常用操作

    Python數(shù)據類型和常用操作

    這篇文章主要介紹了Python數(shù)據類型和常用操作,數(shù)值數(shù)據類型用于存儲數(shù)值,數(shù)據類型不可改變,改變會分配一個新的對象,下文更多相關內容介紹需要的小伙伴可以參考一下
    2022-04-04
  • Python爬蟲之重放攻擊原理實例詳解

    Python爬蟲之重放攻擊原理實例詳解

    重放攻擊是一種網絡攻擊方式,攻擊者通過截獲合法用戶的請求,并將其重新發(fā)送,以模擬合法用戶的行為,在Python爬蟲領域,了解重放攻擊的原理和防范方法至關重要,本文將深入介紹重放攻擊的概念、示例代碼演示以及防范措施,幫助大家更好地理解和應對這一威脅
    2023-12-12
  • 使用TensorFlow實現(xiàn)二分類的方法示例

    使用TensorFlow實現(xiàn)二分類的方法示例

    這篇文章主要介紹了使用TensorFlow實現(xiàn)二分類的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Python的Django框架可適配的各種數(shù)據庫介紹

    Python的Django框架可適配的各種數(shù)據庫介紹

    這篇文章主要介紹了Python的Django框架可適配的各種數(shù)據庫,簡單總結為就是流行的幾種數(shù)據庫Python基本上全部能用XD 需要的朋友可以參考下
    2015-07-07
  • python中tkinter的應用:修改字體的實例講解

    python中tkinter的應用:修改字體的實例講解

    今天小編就為大家分享一篇python中tkinter的應用:修改字體的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python利用Guetzli批量壓縮圖片

    python利用Guetzli批量壓縮圖片

    本篇文章主要介紹了python利用Guetzli批量壓縮圖片,詳細的介紹了谷歌的開源圖片壓縮工具Guetzli,非常具有實用價值,需要的朋友可以參考下。
    2017-03-03
  • pytorch使用指定GPU訓練的實例

    pytorch使用指定GPU訓練的實例

    今天小編就為大家分享一篇pytorch使用指定GPU訓練的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python讀取txt數(shù)據的操作步驟

    python讀取txt數(shù)據的操作步驟

    這篇文章主要介紹了python讀取txt數(shù)據的操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Python實現(xiàn)統(tǒng)計單詞出現(xiàn)的個數(shù)

    Python實現(xiàn)統(tǒng)計單詞出現(xiàn)的個數(shù)

    這篇文章主要介紹了Python實現(xiàn)統(tǒng)計單詞出現(xiàn)的個數(shù),本文給出了實現(xiàn)代碼以及使用方法,需要的朋友可以參考下
    2015-05-05

最新評論

阳谷县| 连州市| 防城港市| 会同县| 清徐县| 阿拉善右旗| 鹤庆县| 乌拉特中旗| 绥江县| 宁夏| 雷州市| 资源县| 安陆市| 泗洪县| 大城县| 五华县| 湘潭市| 团风县| 句容市| 邯郸县| 盐池县| 焦作市| 金秀| 安阳市| 南开区| 丹寨县| 龙山县| 龙泉市| 莱州市| 馆陶县| 绍兴市| 惠州市| 马边| 正蓝旗| 南昌市| 贵德县| 金山区| 光山县| 玉溪市| 深泽县| 惠来县|