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

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

 更新時間:2018年12月12日 11:11:05   作者:Lockeyi  
這篇文章主要為大家詳細(xì)介紹了python2.7實(shí)現(xiàn)郵件發(fā)送功能包,含文本、附件、正文圖片等,具有一定的參考價值,感興趣的小伙伴們可以參考一下

要想實(shí)現(xiàn)一個能夠發(fā)送帶有文本、圖片、附件的python程序,首先要熟悉兩大模塊:

email以及smtplib

然后對于MIME(郵件擴(kuò)展)要有一定認(rèn)知,因?yàn)橛辛藬U(kuò)展才能發(fā)送附件以及圖片這些媒體或者非文本信息

最后一個比較細(xì)節(jié)的方法就是MIMEMultipart,要理解其用法以及對應(yīng)參數(shù)所實(shí)現(xiàn)的功能區(qū)別

發(fā)送郵件三部曲:

創(chuàng)建協(xié)議對象
連接郵件服務(wù)器
登陸并發(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()

對于實(shí)際發(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,運(yùn)行測試程序

~$ python sendGo.py

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用 Poetry 進(jìn)行 Python 項(xiàng)目管理

    如何使用 Poetry 進(jìn)行 Python 項(xiàng)目管理

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

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

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

    Python爬蟲之重放攻擊原理實(shí)例詳解

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

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

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

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

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

    python中tkinter的應(yīng)用:修改字體的實(shí)例講解

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

    python利用Guetzli批量壓縮圖片

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

    pytorch使用指定GPU訓(xùn)練的實(shí)例

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

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

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

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

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

最新評論

嘉鱼县| 徐水县| 邛崃市| 蕲春县| 略阳县| 长泰县| 舒兰市| 克什克腾旗| 金堂县| 北安市| 涪陵区| 通州市| 海盐县| 时尚| 西宁市| 沈丘县| 西昌市| 彰武县| 江永县| 老河口市| 盐亭县| 石屏县| 宽甸| 富平县| 海原县| 栾城县| 宜州市| 徐闻县| 皋兰县| 桐梓县| 沧州市| 图片| 昌江| 葵青区| 突泉县| 观塘区| 北安市| 志丹县| 静海县| 和龙市| 宁津县|