К сожалению, мне не удалось извлечь вложение base64 из электронная почта. Хотя мне удается прочитать метаданные отправителя, получателя и другие метаданные.
Пример электронного письма, это последняя часть с вложением:
Код: Выделить всё
-000000000000c4fbc8062271c50c
Content-Type: application/pdf;
name="291693497-2024-07-31-093548-64235128.pdf"
Content-Disposition: attachment;
filename="291693497-2024-07-31-093548-64235128.pdf"
Content-Transfer-Encoding: base64
Content-ID:
X-Attachment-Id: 19208a4c905d7a58eae1
JVBERi0xLjMgCjEgMCBvYmoKPDwKL1BhZ2VzIDIgMCBSCi9UeXBlIC9DYXRhbG9nCj4+CmVuZG9i
Код: Выделить всё
import os
import base64
import email
def extract_email_info(msg):
# Extract basic email details
email_data = {
'sender': msg.get('From', 'Unknown Sender'),
'recipient': msg.get('To', 'Unknown Recipient'),
'subject': msg.get('Subject', 'No Subject'),
'date': extract_date(msg),
'body_plain': None,
'attachments': [],
}
for part in msg.walk():
process_part(part, email_data)
# Ensure plain text body has a fallback message
if not email_data['body_plain']:
email_data['body_plain'] = "No plain text content found"
return email_data
def process_part(part, email_data):
content_type = part.get_content_type()
disposition = str(part.get("Content-Disposition", ""))
if content_type == "message/rfc822":
forwarded_msg = email.message_from_bytes(part.get_payload(decode=True))
extract_email_info(forwarded_msg) # Process forwarded message
elif content_type == "text/plain" and "attachment" not in disposition:
if not email_data['body_plain']:
email_data['body_plain'] = part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8')
elif part.get_filename() or "attachment" in disposition or content_type.startswith('application/'):
attachment = {
'file_name': part.get_filename() or "unnamed_attachment",
'content_type': content_type,
'data': part.get_payload(decode=True),
'content_id': part.get('Content-ID'),
}
email_data['attachments'].append(attachment)
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python