欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python自動(dòng)發(fā)送和收取郵件的方法

 更新時(shí)間:2020年08月12日 09:37:06   作者:易長(zhǎng)安  
這篇文章主要介紹了Python自動(dòng)發(fā)送和收取郵件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

作為課代表,經(jīng)常要做的兩件事是:幫忙發(fā)作業(yè)和幫忙收作業(yè),而且很多時(shí)候是通過(guò)郵件來(lái)完成的,如果手動(dòng)一封一封的收取和發(fā)送就很浪費(fèi)時(shí)間——人生苦短,我用Python。

直接上代碼,不想了解細(xì)節(jié)原理直接拉到最后,我封裝成了兩個(gè)函數(shù),根據(jù)提示,輸入?yún)?shù),直接調(diào)用就行。親測(cè)可行

不想看細(xì)節(jié)這部分可以直接跳過(guò),但是運(yùn)行的時(shí)候要把這一塊也粘貼進(jìn)去。

導(dǎo)入相關(guān)庫(kù)
import smtplib,ssl
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import formatdate
from email import encoders
import poplib
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from email.header import Header

#解析消息頭中的字符串,沒(méi)有這個(gè)函數(shù),print出來(lái)的會(huì)使亂碼的頭部信息。如'=?gb18030?B?yrXWpL3hufsueGxz?='這種,通過(guò)decode,將其變?yōu)橹形?
def decode_str(s):
  value, charset = decode_header(s)[0]
  if charset:
    value = value.decode(charset)
  return value
#解碼郵件信息分為兩個(gè)步驟,第一個(gè)是取出頭部信息:首先取頭部信息,主要取出['From','To','Subject']
def get_header(msg):
  for header in ['From', 'To', 'Subject']:
    value = msg.get(header, '')
    if value:
      if header == 'Subject': #文章的標(biāo)題有專門的處理方法
        value = decode_str(value)
      elif header in ['From','To']:
        hdr, addr = parseaddr(value) #地址也有專門的處理方法
        name = decode_str(addr)
        value=name
    print(header + ':' + value)
#頭部信息已取出,獲取郵件的字符編碼,首先在message中尋找編碼,如果沒(méi)有,就在header的Content-Type中尋找
def guess_charset(msg):
  charset = msg.get_charset()
  if charset is None:
    content_type = msg.get('Content-Type', '').lower()
    pos = content_type.find('charset=')
    if pos >= 0:
      charset = content_type[pos+8:].strip()
  return charset
#郵件正文部分:取附件,郵件的正文部分在生成器中,msg.walk(),如果存在附件,則可以通過(guò).get_filename()的方式獲取文件名稱
def get_file(path, msg):
  for part in msg.walk():
    filename=part.get_filename()
    if filename!=None:                  #如果存在附件
      filename = decode_str(filename)         #獲取的文件是亂碼名稱,通過(guò)一開(kāi)始定義的函數(shù)解碼
      data = part.get_payload(decode = True)      #取出文件正文內(nèi)容
      f = open(path+filename, 'wb')          #此處可以自己定義文件保存位置
      f.write(data)
      f.close()
      print('附件',filename,'下載成功')
def get_content(msg):
  for part in msg.walk():
    content_type = part.get_content_type()
    charset = guess_charset(part)
    if part.get_filename()!=None: #如果有附件,則直接跳過(guò)
      continue
    email_content_type = ''
    content = ''
    if content_type == 'text/plain':
      email_content_type = 'text'
    elif content_type == 'text/html':
      print('html 格式 跳過(guò)')
      continue #不要html格式的郵件
      email_content_type = 'html'
    if charset:
      try:
        content = part.get_payload(decode=True).decode(charset)
      except AttributeError:
        print('type error')
      except LookupError:
        print("unknown encoding: utf-8")
    if email_content_type =='':
      continue  #如果內(nèi)容為空,也跳過(guò)
    print(email_content_type + ' ----- ' + content)
 # -------------------- 收取和發(fā)送郵件兩個(gè)函數(shù) --------------------------
def sent_email(from_addr,password, to_addrs,title,content,path=None):
  '''
  from_addr:發(fā)件人郵箱
  password:發(fā)件人密碼(如果是QQ或者網(wǎng)易郵箱,這里寫(xiě)授權(quán)碼)
  to_addrs:收件郵箱列表
  title:郵件標(biāo)題
  content:郵件內(nèi)容
  path:如果需要發(fā)送附件,這里填寫(xiě)附件的路徑
  '''
  smtp_server = 'smtp.'+ from_addr.split('@')[-1]    # 發(fā)信服務(wù)器
  msg = MIMEMultipart()            # 創(chuàng)建一封空郵件
  msg['From'] = Header(from_addr)       # 添加郵件頭信息
  msg['Subject'] = Header(title)        # 添加郵件標(biāo)題
  msg.attach(MIMEText(content,'plain','utf-8')) # 正文內(nèi)容
  if path != None:
    # 添加附件
    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(path, "rb").read())  # 讀取附件
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment', filename=path.split('/')[-1])
    msg.attach(part) # 把附件添加到郵件中
  server = smtplib.SMTP_SSL(smtp_server) # 開(kāi)啟發(fā)信服務(wù),這里使用的是加密傳輸
  server.connect(smtp_server,465) # 登錄發(fā)信郵箱
  for to_addr in to_addrs: # 遍歷發(fā)送給每個(gè)賬號(hào)
    msg['To'] = Header(to_addr)
    server.login(from_addr, password) # 發(fā)送郵件
    server.sendmail(from_addr, to_addr, msg.as_string())
  server.quit() # 關(guān)閉服務(wù)器
  print('發(fā)送成功')
def get_email(email,password,path):
  '''
  email:郵箱地址
  password:密碼(如果是qq郵箱或者網(wǎng)易郵箱,這里填授權(quán)碼)
  path:附件保留的位置
  '''
  server=poplib.POP3_SSL('pop.'+email.split('@')[-1])  #修改對(duì)應(yīng)的郵箱服務(wù)器
  server.user(email)
  server.pass_(password)
  resp, mails, octets = server.list() #登錄的過(guò)程
  index = len(mails)    #郵件的總數(shù)
  resp, lines, octets = server.retr(index) #讀取最近一封郵件
  msg_content = b'\r\n'.join(lines).decode('utf-8','ignore')
  msg = Parser().parsestr(msg_content)
  #server.dele(index) 刪除郵件
  get_header(msg) # 顯示郵件信息,包括發(fā)件人,收件人,標(biāo)題
  get_file(path,msg)  # 保留附件
  get_content(msg) # 顯示文件內(nèi)容
  server.quit()
  print('收取成功')

直接看這里!

1、發(fā)送郵件函數(shù):sent_email(from_addr, password, to_addrs, title, content, path=None)

按順序輸入括號(hào)中的參數(shù)

from_addr:發(fā)件人郵箱

password:發(fā)件人密碼(如果是QQ或者網(wǎng)易郵箱,這里寫(xiě)授權(quán)碼)

to_addrs:收件郵箱列表

title:郵件標(biāo)題

content:郵件正文內(nèi)容

path:如果需要發(fā)送附件,這里填寫(xiě)附件的路徑,如果沒(méi)有,則直接忽略

from_addr = '20182*****@mail.scut.edu.cn'  # 打個(gè)碼,這里輸入你自己的郵箱就行
password = 'scut_827*****' # 輸入你的密碼(如果是qq或者網(wǎng)易郵箱,這里要輸入授權(quán)碼)
to_addrs = ['lly****@163.com', '12375947@qq.com'] # 這里就寫(xiě)需要發(fā)送的郵箱 
title = '這是一封測(cè)試郵件' # 郵件標(biāo)題
content = '隨便寫(xiě)點(diǎn)東西' # 正文內(nèi)容
path = 'C:/Users/要發(fā)的文件.xlsx' # 如果你想要發(fā)送一封帶附件的郵件,那么這里就填寫(xiě)你的附件路徑
sent_email(from_addr, password, to_addrs, title, content, path) # 發(fā)送郵件

2、收取郵件函數(shù):get_email(email, password, path)

email:郵箱地址

password:密碼(如果是qq郵箱或者網(wǎng)易郵箱,這里填授權(quán)碼)

path:附件保留的位置

email = '1234567@163.com' # 填寫(xiě)你的郵箱賬號(hào)(你要收取郵件的那個(gè)郵箱)
password = 'LXSHS*****'  # 填寫(xiě)你的郵箱密碼(如果是qq或者網(wǎng)易郵箱,這里要輸入授權(quán)
path = 'C:/Users/Desktop/' # 如果對(duì)方的郵件有附件,那么附件將下載到這里地方
get_email(email,password,path)

到此這篇關(guān)于Python自動(dòng)發(fā)送和收取郵件的方法的文章就介紹到這了,更多相關(guān)Python自動(dòng)發(fā)送和收取郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模擬登陸淘寶并統(tǒng)計(jì)淘寶消費(fèi)情況的代碼實(shí)例分享

    Python模擬登陸淘寶并統(tǒng)計(jì)淘寶消費(fèi)情況的代碼實(shí)例分享

    借助urllib、urllib2和BeautifulSoup等幾個(gè)模塊的常用爬蟲(chóng)開(kāi)發(fā)組合,我們能夠輕易實(shí)現(xiàn)一份淘寶對(duì)賬單,這里我們就來(lái)看一則Python模擬登陸淘寶并統(tǒng)計(jì)淘寶消費(fèi)情況的代碼實(shí)例分享:
    2016-07-07
  • python實(shí)現(xiàn)狄克斯特拉算法

    python實(shí)現(xiàn)狄克斯特拉算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)狄克斯特拉算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Jupyter notebook如何實(shí)現(xiàn)打開(kāi)數(shù)據(jù)集

    Jupyter notebook如何實(shí)現(xiàn)打開(kāi)數(shù)據(jù)集

    這篇文章主要介紹了Jupyter notebook如何實(shí)現(xiàn)打開(kāi)數(shù)據(jù)集問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 詳解Python3 pickle模塊用法

    詳解Python3 pickle模塊用法

    pickle模塊中的兩個(gè)主要函數(shù)是dump()和load(),這篇文章主要介紹了Python3 pickle模塊用法,需要的朋友可以參考下
    2019-09-09
  • Django配置kafka消息隊(duì)列的實(shí)現(xiàn)

    Django配置kafka消息隊(duì)列的實(shí)現(xiàn)

    本文主要介紹了Django配置kafka消息隊(duì)列的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式

    Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式

    今天小編就為大家分享一篇Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python數(shù)據(jù)解析BeautifulSoup爬取三國(guó)演義章節(jié)示例

    python數(shù)據(jù)解析BeautifulSoup爬取三國(guó)演義章節(jié)示例

    這篇文章主要介紹了python數(shù)據(jù)解析BeautifulSoup爬取三國(guó)演義章節(jié)示例,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Python設(shè)計(jì)模式行為型觀察者模式

    Python設(shè)計(jì)模式行為型觀察者模式

    這篇文章主要介紹了Python設(shè)計(jì)模式行為型觀察者模式,觀察者模式即Publish?Subscribe?Pattern,定義了一種一對(duì)多的關(guān)系,讓多個(gè)觀察對(duì)象同時(shí)監(jiān)聽(tīng)一個(gè)主題對(duì)象,當(dāng)主題對(duì)象狀態(tài)發(fā)生變化時(shí)會(huì)通知所有觀察者,是它們能夠自動(dòng)更新自己,下面和小編一起進(jìn)入文章學(xué)習(xí)詳細(xì)內(nèi)容吧
    2022-02-02
  • 淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤

    淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤

    今天小編就為大家分享一篇淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • python如何通過(guò)protobuf實(shí)現(xiàn)rpc

    python如何通過(guò)protobuf實(shí)現(xiàn)rpc

    這篇文章主要為大家詳細(xì)介紹了python通過(guò)protobuf實(shí)現(xiàn)rpc的方法,感興趣的朋友可以參考一下
    2016-03-03

最新評(píng)論