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

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)題有專(zhuān)門(mén)的處理方法
        value = decode_str(value)
      elif header in ['From','To']:
        hdr, addr = parseaddr(value) #地址也有專(zhuān)門(mén)的處理方法
        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()的方式獲取文件名稱(chēng)
def get_file(path, msg):
  for part in msg.walk():
    filename=part.get_filename()
    if filename!=None:                  #如果存在附件
      filename = decode_str(filename)         #獲取的文件是亂碼名稱(chēng),通過(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退出循環(huán)的方法

    python退出循環(huán)的方法

    在本篇文章里小編給大家整理的是關(guān)于python如何退出循環(huán)的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以參考下。
    2020-06-06
  • 使用Python批量刪除MySQL數(shù)據(jù)庫(kù)的全部外鍵

    使用Python批量刪除MySQL數(shù)據(jù)庫(kù)的全部外鍵

    這篇文章主要為大家詳細(xì)介紹了如何使用Python批量刪除MySQL數(shù)據(jù)庫(kù)的全部外鍵,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • python實(shí)現(xiàn)錄音小程序

    python實(shí)現(xiàn)錄音小程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)錄音小程序,實(shí)現(xiàn)錄音播放功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 10個(gè)python爬蟲(chóng)入門(mén)基礎(chǔ)代碼實(shí)例 + 1個(gè)簡(jiǎn)單的python爬蟲(chóng)完整實(shí)例

    10個(gè)python爬蟲(chóng)入門(mén)基礎(chǔ)代碼實(shí)例 + 1個(gè)簡(jiǎn)單的python爬蟲(chóng)完整實(shí)例

    這篇文章主要介紹了10個(gè)python爬蟲(chóng)入門(mén)基礎(chǔ)代碼實(shí)例和1個(gè)簡(jiǎn)單的python爬蟲(chóng)爬蟲(chóng)貼吧圖片的實(shí)例,需要的朋友可以參考下
    2020-12-12
  • Python實(shí)現(xiàn)順序查找的示例代碼

    Python實(shí)現(xiàn)順序查找的示例代碼

    順序查找(Sequential?Search)是一種簡(jiǎn)單直觀的搜索算法,用于在無(wú)序數(shù)組中查找特定元素,本文將介紹順序查找的基本原理,并通過(guò)Python代碼進(jìn)行詳細(xì)講解,需要的可以參考一下
    2023-08-08
  • 使用PyQt5實(shí)現(xiàn)一個(gè)鼠標(biāo)連點(diǎn)器

    使用PyQt5實(shí)現(xiàn)一個(gè)鼠標(biāo)連點(diǎn)器

    這篇文章主要為大家詳細(xì)介紹了如何使用PyQt5實(shí)現(xiàn)一個(gè)鼠標(biāo)連點(diǎn)器,從而對(duì)QVBoxLayout、QHBoxLayout和QStackedWidget進(jìn)行一個(gè)回顧復(fù)習(xí),需要的可以參考一下
    2023-12-12
  • 利用Python繪制隨機(jī)游走圖的詳細(xì)過(guò)程

    利用Python繪制隨機(jī)游走圖的詳細(xì)過(guò)程

    隨機(jī)游走(random walk)也稱(chēng)隨機(jī)漫步,隨機(jī)行走等,是以隨機(jī)的方式采取連續(xù)步驟的過(guò)程,下面這篇文章主要給大家介紹了關(guān)于利用Python繪制隨機(jī)游走圖的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Python處理不同接口間參數(shù)依賴(lài)的方法總結(jié)

    Python處理不同接口間參數(shù)依賴(lài)的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫(xiě)接口自動(dòng)化測(cè)試,以有效地處理不同接口之間的參數(shù)依賴(lài),并提供豐富的示例代碼,希望對(duì)大家有所幫助
    2024-01-01
  • Ubuntu18.04安裝 PyCharm并使用 Anaconda 管理的Python環(huán)境

    Ubuntu18.04安裝 PyCharm并使用 Anaconda 管理的Python環(huán)境

    這篇文章主要介紹了Ubuntu18.04安裝 PyCharm并使用 Anaconda 管理的Python環(huán)境的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python三維繪圖之Matplotlib庫(kù)的使用方法

    Python三維繪圖之Matplotlib庫(kù)的使用方法

    這篇文章主要給大家介紹了關(guān)于Python三維繪圖之Matplotlib庫(kù)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

乌什县| 临邑县| 潮州市| 富川| 井研县| 历史| 松溪县| 井陉县| 本溪市| 高青县| 兴业县| 白朗县| 中阳县| 和林格尔县| 霍城县| 东乌| 库尔勒市| 北票市| 都安| 龙山县| 聊城市| 喀喇| 日喀则市| 美姑县| 临朐县| 庄河市| 乐亭县| 剑川县| 乐安县| 微博| 北碚区| 镇江市| 扎兰屯市| 庆阳市| 凤阳县| 玉山县| 加查县| 海伦市| 濮阳市| 旬邑县| 离岛区|