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

python接收/發(fā)送QQ郵箱保姆級教程

 更新時間:2024年03月08日 10:00:14   作者:晦澀男董先生  
我們在日常python開發(fā)過程中,需求中常有實現(xiàn)發(fā)送郵箱的功能,可以說是非常常見,也非常重要的功能,下面這篇文章主要給大家介紹了關(guān)于python接收/發(fā)送QQ郵箱保姆級教程的相關(guān)資料,需要的朋友可以參考下

前言:

關(guān)于代碼中:

sender_email = 'XXXX@qq.com'   #這個就是你的郵箱地址,不多說了
password = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #在QQ郵箱設(shè)置里拿到的碼,自己去查.需要手機發(fā)信息過去,0.1/RMB一個;為期大概一個月!

1.發(fā)送郵箱:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 郵件內(nèi)容
subject = '郵件主題'
body = '郵件正文'

# 構(gòu)建郵件
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'XXXX@qq.com'
msg['To'] = 'XXXX@qq.com'

# 發(fā)送郵件
smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = 'XXXX@qq.com'
password = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #在QQ郵箱設(shè)置里拿到的碼

try:
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(sender_email, password)
        server.sendmail(sender_email, [msg['To']], msg.as_string())
    print('郵件發(fā)送成功')
except smtplib.SMTPException as e:
    print('郵件發(fā)送失敗:', str(e))

2.接收郵箱---(打印發(fā)件人/主題,解決收件人亂碼問題)

import base64
import poplib
from email.parser import BytesParser
import email.header as jiexi
import re

#這個代碼會檢查郵件發(fā)件人,如果發(fā)件人存在,才會進行解析和輸出,否則將直接跳過郵件。并且我改變了郵件解析的方法,使用了email.header.decode_header函數(shù)來解析郵件的頭部信息和主題。

# 連接到POP3服務(wù)器
pop_server = poplib.POP3_SSL('pop.qq.com', 995)
pop_server.user('xxxx@qq.com')
pop_server.pass_('xxxxxxxxxx')

# 獲取郵箱中的郵件信息
num_emails = len(pop_server.list()[1])

# 遍歷每封郵件
for i in range(num_emails):
    # 獲取郵件內(nèi)容
    response, lines, octets = pop_server.retr(i + 1)
    email_content = b'\r\n'.join(lines)

    # 解析郵件內(nèi)容
    email_parser = BytesParser()
    email = email_parser.parsebytes(email_content)

    # 解析郵件頭部信息
    email_from = email.get('From').strip()
    email_from = str(jiexi.make_header(jiexi.decode_header(email_from)))

    if email_from:  # 只處理存在發(fā)件人的郵件
        # 解析郵件主題
        subject = email.get('Subject').strip()
        decoded_subject = str(jiexi.make_header(jiexi.decode_header(subject))) if subject else None

        print("------------------")
        print("From:", email_from)
        print("Subject:", decoded_subject)
    else:
        continue  # 跳過缺失發(fā)件人的郵件

# 關(guān)閉連接
pop_server.quit()

3.接收郵箱v02---(打印出郵件的正文body部分)

import poplib
from email import policy
from email.parser import BytesParser
from email.header import decode_header, make_header

#在這段代碼中,我定義了一個函數(shù)get_html_payload()來提取郵件的payload。
# 如果郵件的主題是多部分的(即包含多個部分,例如文本和HTML),那么我們會遍歷每個部分,
# 找出HTML部分并返回。如果郵件主題只有一個部分且是HTML,則直接返回該部分。如果沒有合適的部分,
# 那么函數(shù)將返回None。
def get_html_payload(email_message):
    if email_message.is_multipart():
        for part in email_message.iter_parts():
            content_type = part.get_content_type()
            if content_type == 'text/html':
                return part.get_content()
            else:
                continue
    elif email_message.get_content_type() == 'text/html':
        return email_message.get_content()

# 連接到POP3服務(wù)器
pop_server = poplib.POP3_SSL('pop.qq.com', 995)
pop_server.user('xxxxxx@qq.com')
pop_server.pass_('xxxxxxx')

# 獲取郵箱中的郵件信息
num_emails = len(pop_server.list()[1])

# 遍歷每封郵件
for i in range(num_emails):
    # 獲取郵件內(nèi)容
    response, lines, octets = pop_server.retr(i + 1)
    email_content = b'\r\n'.join(lines)

    # 解析郵件內(nèi)容
    email_parser = BytesParser(policy=policy.default)
    email = email_parser.parsebytes(email_content)

    # 解析郵件頭部信息
    email_from = email.get('From').strip()
    email_from = str(make_header(decode_header(email_from)))
    if email_from:  # 只處理存在發(fā)件人的郵件
        # 解析郵件主題
        subject = email.get('Subject').strip()
        decoded_subject = str(make_header(decode_header(subject))) if subject else None

        # 提取郵件正文
        email_body = get_html_payload(email)
        print("------------------")
        print("From:", email_from)
        print("Subject:", decoded_subject)
        print("Body:", email_body)
    else:
        continue  # 跳過缺失發(fā)件人的郵件

# 關(guān)閉連接
pop_server.quit()

4.接收郵箱v03---(打印出郵件的正文body部分,并分類存文件到目錄,以html/圖片/text分類)

import os
import base64
import poplib
from email import policy
from email.parser import BytesParser
from email.header import decode_header, make_header


def sanitize_folder_name(name):
    #清理郵箱地址,移除或替換那些非法字符
    invalid_characters = "<>:\"/\\|?*@"
    for char in invalid_characters:
        name = name.replace(char, "_")
    return name


def get_payload(email_message):
    #------------------解析正文-------------------
    # 我在循環(huán)中使用了這個新的信息,根據(jù)正文的類型執(zhí)行不同的操作。對于純文本類型,它只打印正文;
    # 對于html和image類型,它創(chuàng)建一個目錄(如果還不存在),然后將正文寫入一個文件。對于image,
    # 我還添加了一個把數(shù)據(jù)從base64格式解碼回二進制格式的步驟,這是因為圖片通常會以base64格式存儲在郵件中。
    if email_message.is_multipart():
        for part in email_message.iter_parts():
            content_type = part.get_content_type()
            if content_type == 'text/html':
                return part.get_content(), 'html'
            elif content_type == 'text/plain':
                return part.get_content(), 'text'
            elif content_type.startswith('image/'):
                return part.get_content(), 'image', part.get_content_type().split('/')[-1]
            else:
                continue
    elif email_message.get_content_type() == 'text/html':
        return email_message.get_content(), 'html'
    elif email_message.get_content_type() == 'text/plain':
        return email_message.get_content(), 'text'


# 連接到POP3服務(wù)器
pop_server = poplib.POP3_SSL('pop.qq.com', 995)
pop_server.user('xxxx@qq.com')
pop_server.pass_('xxxxxx')

# 獲取郵箱中的郵件信息
num_emails = len(pop_server.list()[1])

# 遍歷每封郵件
for i in range(num_emails):
    # 獲取郵件內(nèi)容
    response, lines, octets = pop_server.retr(i + 1)
    email_content = b'\r\n'.join(lines)

    # 解析郵件內(nèi)容
    email_parser = BytesParser(policy=policy.default)
    email = email_parser.parsebytes(email_content)

    # 解析郵件頭部信息
    email_from = email.get('From').strip()
    email_from = str(make_header(decode_header(email_from)))
    if email_from:  # 只處理存在發(fā)件人的郵件
        # 解析郵件主題
        subject = email.get('Subject').strip()
        decoded_subject = str(make_header(decode_header(subject))) if subject else None

        # 提取郵件正文
        email_body, body_type, *extras = get_payload(email)

        # 創(chuàng)建安全的文件夾名和文件名
        safe_folder_name = sanitize_folder_name(email_from)
        safe_subject = sanitize_folder_name(decoded_subject)

        print("------------------")
        print("From:", email_from)
        print("Subject:", decoded_subject)
        print("Body Type:", body_type)

        # 根據(jù)正文類型處理
        if body_type == 'text':
            print("Body:", email_body)
        elif body_type == 'html':
            directory = safe_folder_name
            if not os.path.exists(directory):
                os.makedirs(directory)
            with open(f'{directory}/{safe_subject}.html', 'w') as f:
                f.write(email_body)
        elif body_type == 'image':
            directory = safe_folder_name
            if not os.path.exists(directory):
                os.makedirs(directory)
            image_data = base64.b64decode(email_body)
            image_extension = extras[0]  # Get the image extension
            with open(f'{directory}/{safe_subject}.{image_extension}', 'wb') as f:
                f.write(image_data)
    else:
        continue  # 跳過缺失發(fā)件人的郵件

# 關(guān)閉連接
pop_server.quit()

5.接收郵箱v04--(接收指定的郵箱,并把它封裝好!完整版,可直接使用)

import os
import base64
import poplib
from email import policy
from email.parser import BytesParser
from email.header import decode_header, make_header


# 定義EmailClient類,用于連接到POP3服務(wù)器并從指定的郵件地址獲取郵件
class EmailClient:
    # 在初始化函數(shù)中,設(shè)置POP3服務(wù)器的來源、用戶、密碼和待查詢的目標郵件地址
    def __init__(self, host, user, password, target_email):
        self.pop_server = poplib.POP3_SSL(host)  # 使用POP3協(xié)議通過SSL安全連接到郵件服務(wù)器
        self.pop_server.user(user)  # 輸入用戶郵箱
        self.pop_server.pass_(password)  # 輸入用戶郵箱密碼
        self.target_email = target_email  # 輸入待查詢的目標郵件地址

    # 定義一個函數(shù),用以清除文件名中的無效字符
    def sanitize_folder_name(self, name):
        invalid_characters = "<>:\"/\\|?*@"
        for char in invalid_characters:  # 遍歷所有無效字符
            name = name.replace(char, "_")  # 將無效字符替換為下劃線
        return name  # 返回清理后的名稱

    # 定義一個函數(shù),用以提取郵件的payload(有效載荷,即郵件主體內(nèi)容)
    def get_payload(self, email_message):
        if email_message.is_multipart():  # 判斷郵件是否為多部分郵件
            for part in email_message.iter_parts():  # 如果是,則遍歷其中的每一部分
                content_type = part.get_content_type()  # 獲取該部分的內(nèi)容類型
                if content_type == 'text/html':  # 如果內(nèi)容類型為HTML,則返回該部分內(nèi)容
                    return part.get_content()
                elif content_type == 'text/plain':  # 如果內(nèi)容類型為純文本,則返回該部分內(nèi)容
                    return part.get_content()
        elif email_message.get_content_type() == 'text/html':  # 如果郵件非多部分形式,且為HTML類型,則返回郵件內(nèi)容
            return email_message.get_content()
        elif email_message.get_content_type() == 'text/plain':  # 如果郵件非多部分形式,且為純文本類型,則返回郵件內(nèi)容
            return email_message.get_content()

    # 定義一個函數(shù),用以獲取郵件信息
    def fetch_email(self):
        num_emails = len(self.pop_server.list()[1])  # 獲取郵箱內(nèi)的郵件數(shù)量

        # 遍歷每一封郵件
        for i in range(num_emails):
            # 獲取郵件內(nèi)容
            response, lines, octets = self.pop_server.retr(i + 1)  # retr函數(shù)返回指定郵件的全部文本
            email_content = b'\r\n'.join(lines)  # 將所有行連接成一個bytes對象

            # 解析郵件內(nèi)容
            email_parser = BytesParser(policy=policy.default)  # 創(chuàng)建一個郵件解析器
            email = email_parser.parsebytes(email_content)  # 解析郵件內(nèi)容,返回一個郵件對象

            # 解析郵件頭部信息并提取發(fā)件人信息
            email_from = email.get('From').strip()  # 獲取發(fā)件人信息,并去除尾部的空格
            email_from = str(make_header(decode_header(email_from)))  # 解碼發(fā)件人信息,并將其轉(zhuǎn)換為字符串
            if email_from == self.target_email:  # 如果發(fā)件人地址與指定的目標郵件地址一致,對郵件進行處理
                # 解析郵件時間
                email_time = email.get('Date')  # 獲取郵件時間

                # 提取郵件正文
                email_body = self.get_payload(email)  # 獲取郵件正文

                return email_body, email_time  # 返回郵件正文和時間

        print("No new emails from", self.target_email)  # 如果沒有從目標郵件地址收到新郵件,打印相應(yīng)信息
        return None, None  # 返回None

-------封裝他------------

from shou_self import EmailClient
client = EmailClient('pop.qq.com', '你的郵箱', '郵箱提取出的密碼', '需要針對的目標郵箱')
body, time = client.fetch_email()
print("Time:", time)
print("Body:", body)

總結(jié) 

到此這篇關(guān)于python接收/發(fā)送QQ郵箱的文章就介紹到這了,更多相關(guān)python接收發(fā)送QQ郵箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python檢測是文件還是目錄的方法

    python檢測是文件還是目錄的方法

    這篇文章主要介紹了python檢測是文件還是目錄的方法,涉及Python針對文件及目錄的檢測技巧,需要的朋友可以參考下
    2015-07-07
  • Tensorflow的常用矩陣生成方式

    Tensorflow的常用矩陣生成方式

    今天小編就為大家分享一篇Tensorflow的常用矩陣生成方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python 通過xpath屬性爬取豆瓣熱映的電影信息

    Python 通過xpath屬性爬取豆瓣熱映的電影信息

    我喜歡看電影,可以說大部分熱門電影我都看過。處理愛好的目的,我看了看豆瓣熱映的電影列表。于是我寫了這個爬蟲把豆瓣熱映的電影都爬了下來。對頁面的處理主要是需要點擊顯示全部電影,然后爬取影片屬性,最后輸出文本。采用的還是scrapy框架。順便聊聊我的實現(xiàn)過程吧
    2021-11-11
  • Python print不能立即打印的解決方式

    Python print不能立即打印的解決方式

    今天小編就為大家分享一篇Python print不能立即打印的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用國內(nèi)鏡像源創(chuàng)建離線PyPI鏡像的完整方案

    使用國內(nèi)鏡像源創(chuàng)建離線PyPI鏡像的完整方案

    根據(jù)知識庫信息,清華鏡像已明確會阻斷大量下載行為的請求,為避免此問題,我將提供一個安全使用國內(nèi)鏡像源的完整方案,確保能夠一次性準備指定Python版本的所有包,然后導(dǎo)出到內(nèi)網(wǎng)環(huán)境,需要的朋友可以參考下
    2025-09-09
  • Python統(tǒng)計純文本文件中英文單詞出現(xiàn)個數(shù)的方法總結(jié)【測試可用】

    Python統(tǒng)計純文本文件中英文單詞出現(xiàn)個數(shù)的方法總結(jié)【測試可用】

    這篇文章主要介紹了Python統(tǒng)計純文本文件中英文單詞出現(xiàn)個數(shù)的方法,結(jié)合實例形式總結(jié)分析了Python針對文本文件的讀取,以及統(tǒng)計文本文件中英文單詞個數(shù)的4種常用操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python函數(shù)中的全局變量詳解

    Python函數(shù)中的全局變量詳解

    大家好,本篇文章主要講的是Python函數(shù)中的全局變量詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • pycharm設(shè)置虛擬環(huán)境與更換鏡像教程

    pycharm設(shè)置虛擬環(huán)境與更換鏡像教程

    這篇文章主要介紹了pycharm設(shè)置虛擬環(huán)境與更換鏡像教程,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • django js實現(xiàn)部分頁面刷新的示例代碼

    django js實現(xiàn)部分頁面刷新的示例代碼

    今天小編就為大家分享一篇django js實現(xiàn)部分頁面刷新的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Pytorch pth 格式轉(zhuǎn)ONNX 格式的詳細過程

    Pytorch pth 格式轉(zhuǎn)ONNX 格式的詳細過程

    PyTorch 訓(xùn)練的模型,需要在Jetson nano 上部署,jetson 原生提供了TensorRT 的支持,所以一個比較好的方式是把它轉(zhuǎn)換成ONNX 格式,然后在通過ONNX 轉(zhuǎn)換成TensorRT 格式,這篇文章主要介紹了Pytorch pth 格式轉(zhuǎn)ONNX 格式,需要的朋友可以參考下
    2023-05-05

最新評論

柞水县| 瓦房店市| 来安县| 海原县| 巴南区| 阳原县| 昭平县| 新干县| 永城市| 禹城市| 宁阳县| 麻城市| 浦北县| 益阳市| 广德县| 桓仁| 雷州市| 孟州市| 介休市| 达日县| 莲花县| 延安市| 鹤山市| 惠东县| 桓仁| 呼伦贝尔市| 海伦市| 垫江县| 图们市| 双牌县| 张家界市| 长乐市| 南通市| 灵璧县| 婺源县| 临桂县| 自贡市| 沙坪坝区| 资中县| 浦北县| 嘉兴市|