Облачная функция с триггером Pub/Sub не может сохранить вложения электронной почты в облачном хранилищеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Облачная функция с триггером Pub/Sub не может сохранить вложения электронной почты в облачном хранилище

Сообщение Anonymous »

Я создаю функцию Google Cloud с триггером Pub/Sub для обработки вложений электронной почты. Предполагается, что функция сохраняет вложения с разрешенных адресов электронной почты в указанную корзину Cloud Storage.
Пока триггер Pub/Sub работает и журналы подтверждают вызов функции, вложения в нее не сохраняются. ведро. Кроме того, в некоторых случаях журналы функций показывают сообщение «В электронном письме не обнаружено действительных вложений», даже если в тестовые электронные письма были включены действительные вложения.
Подробности настройки
Облачная функция:
Триггер: тема Pub/Sub
Среда выполнения: Python 3.9
Разрешения: все соответствующие роли (вызов облачных функций, издатель Pub/Sub, Администратор хранилища) были предоставлены связанным сервисным учетным записям.
Тема Pub/Sub:
Тема создана с настройками по умолчанию (добавление подписки, тип доставки по запросу, хранение сообщений в течение 7 дней). ).
Ожидаемый поток:
Вложения электронной почты принимаются через сообщения Pub/Sub.
Функция обрабатывает сообщение Pub/Sub, проверяет отправителя и тему и сохраняет вложения к указанный сегмент Cloud Storage.
Текущие наблюдения:
Сообщения Pub/Sub успешно публикуются, а журналы функций показывают вызов.
Однако вложения не сохраняются в ведро.
В некоторых случаях в журналах указывается «В сообщении электронной почты не найдено действительных вложений», несмотря на отправку действительных вложений.
Иногда электронные письма возвращаются как недоставленные, без каких-либо дополнительных сведений об ошибке в сообщении. журналы.
Фрагмент кода для справки
Вот код функции. Будем признательны за любые отзывы и предложения по выявлению проблемы:

Код: Выделить всё

@functions_framework.cloud_event
def handle_email_attachment(cloud_event):
"""Handles email attachments sent via Pub/Sub."""
try:
pubsub_message = base64.b64decode(cloud_event.data["message"]["data"]).decode("utf-8")
email_message = message_from_bytes(base64.b64decode(pubsub_message))

# Extract sender, recipient, and subject
sender_email = email_message.get("from", "").strip()
recipient_email = email_message.get("to", "").strip()
subject = email_message.get("subject", "").strip()

# Validate sender email
if sender_email not in ALLOWED_EMAILS:
print(f"Email from {sender_email} is not allowed. Ignoring.")
return

# Process attachments
for part in email_message.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue

file_name = part.get_filename()
file_data = part.get_payload(decode=True)
if file_name:
save_to_storage(sender_email, file_name, file_data)

except Exception as e:
print(f"Error processing email attachment: {e}")

def save_to_storage(sender_email, file_name, file_data):
"""Save the attachment to Cloud Storage."""
folder_name = sender_email.replace("@", "at").replace(".", "_")
bucket = storage_client.bucket(ATTACHMENT_BUCKET)
blob = bucket.blob(f"{folder_name}/{file_name}")
blob.upload_from_string(file_data)
print(f"File {file_name} uploaded to folder {folder_name} in bucket {ATTACHMENT_BUCKET}.")
Структура сообщения Pub/Sub:
Существует ли определенная структура сообщения Pub/Sub, необходимая для правильной обработки вложений электронной почты?
Проверка электронной почты.
Различается ли формат полей «от» или «кому» в сообщениях Pub/Sub, инициируемых поставщиками электронной почты, такими как Gmail или другими доменами?< /p>
Обработка вложений.
Существуют ли определенные типы контента (например, text/csv, application/vnd.ms-excel), которые должны явно обрабатываться в облачной функции?< /p>
Среда тестирования:
Необходимы ли дополнительные шаги для отладки облачных функций, запускаемых Pub/Sub, особенно для обработки вложений?
Среда тестирования:
Необходимы ли дополнительные шаги для отладки облачных функций, запускаемых Pub/Sub, особенно для обработки вложений?
Среда тестирования:
Необходимы ли дополнительные шаги для отладки облачных функций, запускаемых Pub/Sub?>

Подробнее здесь: https://stackoverflow.com/questions/792 ... -cloud-sto
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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