Разбор вложения электронной почты Base64 в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разбор вложения электронной почты Base64 в Python

Сообщение Anonymous »

Я создал агента для проверки пересылаемых ему писем. Электронные письма отправляются AWS SES, сохраняются в S3 и помещаются в очередь SQS, которую я читаю на своем сервере Python.
К сожалению, мне не удалось извлечь вложение 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»