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

Python實現(xiàn)一鍵收發(fā)郵件

 更新時間:2024年12月30日 08:47:15   作者:樂茵安全  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)一鍵收發(fā)郵件功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

基于 stmp 發(fā)送郵件-源碼

import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
# 郵件內容
subject = 'python 郵件測試'
body = '''
<div style='font-size:50px;color:blue;'>這是一個郵件正文</div>
'''
 
# 構建郵件
msg = MIMEText(body, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = '自己郵箱@qq.com'
msg['To'] = '對方郵箱@qq.com'
 
# 發(fā)送郵件
smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = '自己郵箱@qq.com'
password = '專屬key'  # 在QQ郵箱設置里拿到的碼
 
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))
 

基于 stmp 發(fā)送郵件-源碼分析

這段代碼的主要功能是使用 Python 的smtplib庫和email庫來發(fā)送一封 HTML 格式的電子郵件。下面是對代碼的詳細分析:

導入庫

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

smtplib:用于發(fā)送郵件。

email.mime.text.MIMEText:用于創(chuàng)建 MIME 格式的郵件正文。

email.header.Header:用于創(chuàng)建郵件的頭部信息。

郵件內容和格式設置

subject = 'python 郵件測試'
body = '''
<div style='font-size:50px;color:blue;'>這是一個郵件正文</div>
'''

subject:郵件的主題。

body:郵件的正文內容,這里使用了 HTML 格式。

構建郵件

msg = MIMEText(body, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = '自己郵箱@qq.com'
msg['To'] = '對方郵箱@qq.com'

使用MIMEText創(chuàng)建郵件正文,指定內容類型為html和字符編碼為utf-8。

設置郵件的主題、發(fā)件人和收件人。注意,Header用于處理主題的編碼。

發(fā)送郵件

smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = '自己郵箱@qq.com'
password = '專屬key'  # 在QQ郵箱設置里拿到的碼

設置 SMTP 服務器地址、端口、發(fā)件人郵箱和密碼。這里的密碼應該是 QQ 郵箱的授權碼,而不是 QQ 郵箱的登錄密碼。

嘗試發(fā)送郵件

try:
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()  # 啟動TLS加密
        server.login(sender_email, password)  # 登錄SMTP服務器
        server.sendmail(sender_email, [msg['To']], msg.as_string())  # 發(fā)送郵件
    print('郵件發(fā)送成功')
except smtplib.SMTPException as e:
    print('郵件發(fā)送失敗:', str(e))

使用with語句創(chuàng)建 SMTP 連接,確保在發(fā)送完郵件后自動關閉連接。

server.starttls():啟動 TLS 加密,保證郵件傳輸?shù)陌踩浴?/p>

server.login(sender_email, password):使用發(fā)件人的郵箱和密碼登錄 SMTP 服務器。

server.sendmail(sender_email, [msg['To']], msg.as_string()):發(fā)送郵件,指定發(fā)件人、收件人和郵件內容。

使用try...except語句捕獲可能發(fā)生的 SMTP 異常,并打印錯誤信息。

注意事項

確保 QQ 郵箱已經(jīng)開啟了 SMTP 服務,并獲取了授權碼。

如果使用其他郵箱服務提供商,需要修改 SMTP 服務器地址和端口。

郵件正文中的 HTML 代碼可能會被郵件客戶端解析為不同的樣式,具體效果取決于郵件客戶端的實現(xiàn)。

在實際應用中,建議使用更安全的方式存儲和處理密碼,例如使用環(huán)境變量或加密存儲。

基于 pop3 獲取郵件標題-源碼

import poplib
from email.parser import BytesParser
from email.header import make_header, decode_header
 
# 連接到POP3服務器
try:
    pop_server = poplib.POP3_SSL('pop.qq.com', 995)
    pop_server.user('自己郵箱@qq.com')
    pop_server.pass_('專屬key')
except poplib.error_proto as e:
    print(f"Error connecting to POP3 server: {e}")
    exit(1)
 
try:
    # 獲取郵箱中的郵件信息
    num_emails = len(pop_server.list()[1])
 
    # 遍歷每封郵件
    for i in range(num_emails):
        # 獲取郵件內容
        response, lines, octets = pop_server.retr(i + 1)
        email_content = b'\r\n'.join(lines)
 
        # 解析郵件內容
        email_parser = BytesParser()
        email = email_parser.parsebytes(email_content)
 
        # 解析郵件頭部信息
        email_from = make_header(decode_header(email.get('From').strip()))
        subject = make_header(decode_header(email.get('Subject').strip())) if email.get('Subject') else None
 
        if email_from:  # 只處理存在發(fā)件人的郵件
            print("------------------")
            print("From:", email_from)
            print("Subject:", subject)
        else:
            continue  # 跳過缺失發(fā)件人的郵件
except Exception as e:
    print(f"An error occurred: {e}")
finally:
    # 確保連接關閉
    pop_server.quit()

基于 pop3 獲取郵件正文-源碼分析

這段代碼的主要功能是連接到 POP3 服務器,獲取郵箱中的所有郵件,并解析每封郵件的發(fā)件人和主題。以下是對代碼的詳細分析:

導入庫

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

poplib:用于連接和操作 POP3 服務器。

email.parser.BytesParser:用于解析郵件內容。

email.header.make_header 和 email.header.decode_header:用于解析和解碼郵件頭部信息。

連接到 POP3 服務器

try:
    pop_server = poplib.POP3_SSL('pop.qq.com', 995)
    pop_server.user('自己郵箱@qq.com')
    pop_server.pass_('專屬key')
except poplib.error_proto as e:
    print(f"Error connecting to POP3 server: {e}")
    exit(1)

使用POP3_SSL連接到 POP3 服務器,指定服務器地址和端口(POP3S 默認端口為 995)。

使用user和pass_方法登錄到郵箱,其中pass_是password的別名,因為password是 Python 的保留字。

如果連接或登錄失敗,捕獲poplib.error_proto異常并打印錯誤信息,然后退出程序。

獲取和解析郵件

try:
    # 獲取郵箱中的郵件數(shù)量
    num_emails = len(pop_server.list()[1])
 
    # 遍歷每封郵件
    for i in range(num_emails):
        # 獲取郵件內容
        response, lines, octets = pop_server.retr(i + 1)
        email_content = b'\r\n'.join(lines)
 
        # 解析郵件內容
        email_parser = BytesParser()
        email = email_parser.parsebytes(email_content)
 
        # 解析郵件頭部信息
        email_from = make_header(decode_header(email.get('From').strip()))
        subject = make_header(decode_header(email.get('Subject').strip())) if email.get('Subject') else None
 
        # 打印發(fā)件人和主題
        if email_from:
            print("------------------")
            print("From:", email_from)
            print("Subject:", subject)
        else:
            continue
except Exception as e:
    print(f"An error occurred: {e}")

使用list方法獲取郵箱中的郵件列表,并計算郵件數(shù)量。

遍歷每封郵件,使用retr方法獲取郵件內容。

使用BytesParser解析郵件內容。

解析和解碼郵件的發(fā)件人和主題,并打印出來。如果郵件缺少發(fā)件人信息,則跳過該郵件。

捕獲并打印可能發(fā)生的任何異常。

關閉連接

finally:
    pop_server.quit()

使用quit方法確保在程序結束前關閉與 POP3 服務器的連接。

注意事項

安全性:在實際應用中,不建議將郵箱密碼硬編碼在代碼中??梢允褂铆h(huán)境變量或配置文件來存儲敏感信息。

錯誤處理:代碼已經(jīng)包含了一些基本的錯誤處理,但在生產(chǎn)環(huán)境中可能需要更詳細的錯誤處理和日志記錄。

性能考慮:如果郵箱中有大量郵件,逐封下載和解析可能會很慢??梢钥紤]使用更高效的郵件處理方法,如分頁獲取郵件或使用 IMAP 協(xié)議。

郵件內容處理:當前代碼只解析了郵件的發(fā)件人和主題。如果需要處理郵件正文或其他附件,需要進一步擴展代碼。

基于 pop3 獲取郵件內容-源碼

import poplib
from email.parser import BytesParser
from email.policy import default
from email.header import make_header, decode_header
import logging
 
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
 
 
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()
    elif email_message.get_content_type() == 'text/html':
        return email_message.get_content()
 
 
# 連接到POP3服務器
try:
    pop_server = poplib.POP3_SSL('pop.qq.com', 995)
    pop_server.user('自己郵箱@qq.com')
    pop_server.pass_('專屬key')  # 確保密碼正確
    logging.info("Successfully connected to POP3 server.")
except poplib.error_proto as e:
    logging.error(f"Failed to connect to POP3 server: {e}")
    exit(1)
except Exception as e:
    logging.error(f"An unexpected error occurred while connecting to POP3 server: {e}")
    exit(1)
 
# 獲取郵箱中的郵件信息
try:
    num_emails = len(pop_server.list()[1])
    logging.info(f"Found {num_emails} emails in the inbox.")
except poplib.error_proto as e:
    logging.error(f"Failed to list emails: {e}")
    pop_server.quit()
    exit(1)
except Exception as e:
    logging.error(f"An unexpected error occurred while listing emails: {e}")
    pop_server.quit()
    exit(1)
 
# 遍歷每封郵件
for i in range(num_emails):
    try:
        # 獲取郵件內容
        response, lines, octets = pop_server.retr(i + 1)
        email_content = b'\r\n'.join(lines)
 
        # 解析郵件內容
        email_parser = BytesParser(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)
            if email_body:
                print("------------------")
                print("From:", email_from)
                print("Subject:", decoded_subject)
                print("Body:", email_body.decode('utf-8', errors='ignore'))
            else:
                logging.warning(f"No HTML body found in email {i + 1}.")
        else:
            logging.warning(f"No sender found in email {i + 1}.")
    except poplib.error_proto as e:
        logging.error(f"Failed to process email {i + 1}: {e}")
    except UnicodeDecodeError as e:
        logging.error(f"Failed to decode email body in email {i + 1}: {e}")
    except Exception as e:
        logging.error(f"An unexpected error occurred while processing email {i + 1}: {e}")
 
# 關閉連接
pop_server.quit()

基于 pop3 獲取郵件內容-源碼解析

這段代碼的主要功能是連接到 POP3 服務器,獲取郵箱中的所有郵件,并解析每封郵件的發(fā)件人、主題和 HTML 正文。以下是對代碼的詳細分析:

導入庫和配置日志

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

導入所需的庫。

配置日志記錄,設置日志級別為 INFO,并定義日志格式。

定義函數(shù)get_html_payload

def get_html_payload(email_message):
    ...

這個函數(shù)用于從郵件消息中提取 HTML 正文。它首先檢查郵件是否為多部分郵件,然后遍歷每個部分,查找內容類型為text/html的部分并返回其內容。如果郵件不是多部分的,但內容類型為text/html,則直接返回其內容。

連接到 POP3 服務器

try:
    ...
except poplib.error_proto as e:
    ...
except Exception as e:
    ...

這部分代碼嘗試連接到 POP3 服務器,并處理可能發(fā)生的異常。如果連接成功,它會記錄一條 INFO 級別的日志。如果連接失敗,它會記錄一條 ERROR 級別的日志并退出程序。

獲取和解析郵件

try:
    ...
except poplib.error_proto as e:
    ...
except Exception as e:
    ...

這部分代碼獲取郵箱中的郵件列表,并遍歷每封郵件進行處理。對于每封郵件,它執(zhí)行以下操作:

使用retr方法獲取郵件內容。

使用BytesParser解析郵件內容。

解析郵件的發(fā)件人和主題,并對它們進行解碼。

使用get_html_payload函數(shù)提取 HTML 正文。

如果找到 HTML 正文,則打印發(fā)件人、主題和正文。否則,記錄一條 WARNING 級別的日志。

在處理每封郵件時,代碼都會捕獲并處理可能發(fā)生的異常,包括poplib.error_proto(POP3 協(xié)議錯誤)、UnicodeDecodeError(解碼錯誤)和其他意外錯誤。

關閉連接

pop_server.quit()

在處理完所有郵件后,代碼使用quit方法關閉與 POP3 服務器的連接。

注意事項和改進點

安全性:密碼硬編碼在代碼中是不安全的。建議使用環(huán)境變量或配置文件來存儲敏感信息。

錯誤處理:代碼已經(jīng)包含了一些基本的錯誤處理,但在生產(chǎn)環(huán)境中可能需要更詳細的錯誤處理和日志記錄。

性能考慮:如果郵箱中有大量郵件,逐封下載和解析可能會很慢??梢钥紤]使用更高效的郵件處理方法,如分頁獲取郵件或使用 IMAP 協(xié)議。

郵件內容處理:當前代碼只解析了郵件的發(fā)件人、主題和 HTML 正文。如果需要處理郵件附件或其他類型的內容,需要進一步擴展代碼。

日志記錄:可以考慮使用更高級的日志記錄庫(如loguru),以提供更豐富的日志功能和更好的性能。

基于 pop3 獲取郵件完整-源碼

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服務器并從指定的郵件地址獲取郵件
class EmailClient:
    # 在初始化函數(shù)中,設置POP3服務器的來源、用戶、密碼和待查詢的目標郵件地址
    def __init__(self, host, user, password, target_email):
        self.pop_server = poplib.POP3_SSL(host)  # 使用POP3協(xié)議通過SSL安全連接到郵件服務器
        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(有效載荷,即郵件主體內容)
    def get_payload(self, 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':  # 如果內容類型為HTML,則返回該部分內容
                    return part.get_content()
                elif content_type == 'text/plain':  # 如果內容類型為純文本,則返回該部分內容
                    return part.get_content()
        elif email_message.get_content_type() == 'text/html':  # 如果郵件非多部分形式,且為HTML類型,則返回郵件內容
            return email_message.get_content()
        elif email_message.get_content_type() == 'text/plain':  # 如果郵件非多部分形式,且為純文本類型,則返回郵件內容
            return email_message.get_content()
 
    # 定義一個函數(shù),用以獲取郵件信息
    def fetch_email(self):
        num_emails = len(self.pop_server.list()[1])  # 獲取郵箱內的郵件數(shù)量
 
        # 遍歷每一封郵件
        for i in range(num_emails):
            # 獲取郵件內容
            response, lines, octets = self.pop_server.retr(i + 1)  # retr函數(shù)返回指定郵件的全部文本
            email_content = b'\r\n'.join(lines)  # 將所有行連接成一個bytes對象
 
            # 解析郵件內容
            email_parser = BytesParser(policy=policy.default)  # 創(chuàng)建一個郵件解析器
            email = email_parser.parsebytes(email_content)  # 解析郵件內容,返回一個郵件對象
 
            # 解析郵件頭部信息并提取發(fā)件人信息
            email_from = email.get('From').strip()  # 獲取發(fā)件人信息,并去除尾部的空格
            email_from = str(make_header(decode_header(email_from)))  # 解碼發(fā)件人信息,并將其轉換為字符串
            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)  # 如果沒有從目標郵件地址收到新郵件,打印相應信息
        return None, None  # 返回None
 
 
client = EmailClient('pop.qq.com', '自己自己@qq.com', '專屬key', '對方郵箱@qq.com')
body, time = client.fetch_email()
print("Time:", time)
print("Body:", body)

基于 pop3 獲取郵件完整-源碼解析

這段代碼定義了一個EmailClient類,用于連接到 POP3 服務器并從指定的郵件地址獲取郵件。以下是對代碼的詳細分析:

導入庫

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

這些庫用于實現(xiàn)郵件的接收和處理功能。poplib用于連接 POP3 服務器,email庫用于解析郵件內容。

EmailClient 類

EmailClient類包含以下方法:

__init__: 構造函數(shù),用于初始化 POP3 服務器連接、用戶名、密碼和目標郵件地址。

sanitize_folder_name: 清除文件名中的無效字符,但在這段代碼中并未使用。

get_payload: 提取郵件的有效載荷(郵件主體內容),支持 HTML 和純文本格式。

fetch_email: 獲取郵件信息,遍歷郵箱內的所有郵件,解析郵件頭部信息,提取發(fā)件人、時間和正文。

代碼執(zhí)行流程

創(chuàng)建EmailClient實例,傳入 POP3 服務器地址、用戶名、密碼和目標郵件地址。

調用fetch_email方法獲取郵件正文和時間。

打印郵件時間和正文。

詳細分析

連接 POP3 服務器:使用poplib.POP3_SSL方法連接到 POP3 服務器,確保數(shù)據(jù)傳輸?shù)陌踩浴?/p>

登錄郵箱:使用user和pass_方法登錄到郵箱。

獲取郵件列表:使用list方法獲取郵箱內的郵件數(shù)量。

遍歷郵件:使用retr方法獲取每封郵件的全部文本,然后使用BytesParser解析郵件內容。

解析郵件頭部信息:使用get方法獲取發(fā)件人、時間等信息,并使用decode_header和make_header解碼發(fā)件人信息。

提取郵件正文:使用get_payload方法提取郵件正文,支持 HTML 和純文本格式。

返回結果:如果找到目標郵件,返回郵件正文和時間;否則,打印提示信息并返回 None。

注意事項

安全性:密碼硬編碼在代碼中是不安全的,建議使用環(huán)境變量或配置文件存儲敏感信息。

錯誤處理:代碼中沒有進行詳細的錯誤處理,例如網(wǎng)絡異常、登錄失敗等情況,建議添加相應的異常處理。

資源釋放:在完成郵件操作后,應該調用quit方法關閉與 POP3 服務器的連接。

編碼問題:在處理郵件正文時,可能會遇到編碼問題,建議添加相應的編碼處理邏輯。

功能擴展:可以根據(jù)需求擴展功能,例如支持附件下載、郵件過濾等。

以上就是Python實現(xiàn)一鍵收發(fā)郵件的詳細內容,更多關于Python收發(fā)郵件的資料請關注腳本之家其它相關文章!

相關文章

  • vscode搭建之python?Django環(huán)境配置方式

    vscode搭建之python?Django環(huán)境配置方式

    這篇文章主要介紹了vscode搭建之python?Django環(huán)境配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python Log文件大小設置及備份的方法

    Python Log文件大小設置及備份的方法

    這篇文章主要介紹了Python Log文件大小設置及備份的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • PyCharm關閉礙眼的波浪線圖文詳解

    PyCharm關閉礙眼的波浪線圖文詳解

    這篇文章主要介紹了PyCharm關閉礙眼的波浪線的實現(xiàn),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 解決pycharm不能自動補全第三方庫的函數(shù)和屬性問題

    解決pycharm不能自動補全第三方庫的函數(shù)和屬性問題

    這篇文章主要介紹了解決pycharm不能自動補全第三方庫的函數(shù)和屬性問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python如何批量處理經(jīng)緯度數(shù)據(jù)并生成位置信息

    Python如何批量處理經(jīng)緯度數(shù)據(jù)并生成位置信息

    這篇文章主要介紹了Python如何批量處理經(jīng)緯度數(shù)據(jù)并生成位置信息問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python set內置函數(shù)的具體使用

    python set內置函數(shù)的具體使用

    這篇文章主要介紹了python set內置函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python辦公自動化PPT批量轉換操作

    Python辦公自動化PPT批量轉換操作

    本文介紹如何使用 python 操作 PPT,用到的模塊就是 python-pptx,以下的示例基本滿足日常需求,如果要知道更多,可以訪問 python-pptx 的官方文檔
    2021-09-09
  • Python中22個萬用公式的小結

    Python中22個萬用公式的小結

    在大家的日常python程序的編寫過程中,都會有自己解決某個問題的解決辦法,或者是在程序的調試過程中,用來幫助調試的程序公式,本文總結了22個萬用公式,感興趣的可以了解一下
    2021-07-07
  • python數(shù)據(jù)結構leetcode338比特位計數(shù)算法

    python數(shù)據(jù)結構leetcode338比特位計數(shù)算法

    這篇文章主要介紹了力扣刷題中python數(shù)據(jù)結構leetcode338比特位計數(shù)算法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 基于python + django + whoosh + jieba 分詞器實現(xiàn)站內檢索功能

    基于python + django + whoosh + jieba 分詞器實現(xiàn)站內檢索功能

    這篇文章主要介紹了基于python + django + whoosh + jieba 分詞器實現(xiàn)站內檢索功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論