Использование managesieve для получения вложения и повторной отправки его в новом сообщении?

Вопрос или проблема

Я новичок в использовании фильтров roundcube и уже некоторое время ищу в интернете решение своей проблемы, но ничего не смог найти.
Я хочу извлечь вложение из письма, если это pdf, и хочу переслать его на другой внутренний почтовый адрес с вложением. Конечно, я мог бы просто отправить копию на другую почту, но проблема в том, что письмо должно исходить от конкретного адреса, на который оно было отправлено изначально.

Например, A@ отправляет письмо с pdf на B@. Теперь письмо должно быть отправлено на C@, но ОТ B@, а не просто как копия от A@.

Ответ или решение

Использование ManageSieve для обработки вкладений и их повторной отправки — задача, связанная с программированием и настройкой серверных фильтров электронной почты. Рассмотрим теоретическую основу, практические примеры и способ реализации этой задачи с учетом требований, изложенных в вашем описании проблемы.

Теория

Sieve и ManageSieve

Sieve — это язык программирования, специально разработанный для фильтрации электронной почты на стороне сервера. Он предназначен для автоматизации обработки входящих писем, что позволяет пользователю настраивать фильтры, которые могут выполнять различные действия с электронной почтой, такие как перемещение в нужную папку или удаление нежелательной почты.

ManageSieve — это серверный протокол, который позволяет удаленно управлять сценариями Sieve, обычно через почтовые клиенты или веб-интерфейсы, такие как Roundcube. Это удобный инструмент, позволяющий пользователям управлять правилами фильтрации без необходимости административного доступа к серверной части.

Задача

На основе предоставленной вами информации задача заключается в следующем:

  1. Обработать входящее письмо и извлечь из него вложение, если оно является файлом PDF.
  2. Создать новое письмо, содержащее это вложение.
  3. Отправить новое письмо от имени почтового ящика получателя первоначального письма, а не от отправителя.

Пример

Настройка Sieve-фильтра

Для извлечения вложений и повторной отправки писем необходимо использовать возможности сценариев фильтрации Sieve в сочетании с серверной поддержкой почтовых обработчиков. Сам по себе Sieve не предоставляет возможности работы с вложениями, но может быть использован для перенаправления сообщений на пользовательский скрипт на сервере, который выполнит более сложные операции.

Реализация

  1. Конфигурация Sieve

    Напишите сеансовый Sieve-сценарий, который будет использовать для фильтрации почты и выполнения действия:

    if header :contains "Content-Type" "application/pdf" {
       redirect "script@server.local";
    }

    Этот сценарий проверяет заголовки входящих писем на наличие вложений с типом контента "application/pdf". Если такой заголовок обнаружен, письмо перенаправляется на специальный почтовый ящик, который будет обрабатывать такие сообщения.

  2. Разработка серверного скрипта

    На стороне сервера создайте скрипт, который обрабатывает письма, поступающие на почтовый ящик "script@server.local". Этот скрипт выполнит следующие действия:

    • Извлечение вложения (PDF).
    • Создание нового сообщения.
    • Отправка нового письма от имени первоначального получателя ("B@").

    Пример скрипта на Python с использованием библиотеки imaplib и smtplib:

    import email
    import imaplib
    import smtplib
    from email.parser import BytesParser
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    
    IMAP_SERVER = 'imap.server.local'
    SMTP_SERVER = 'smtp.server.local'
    USERNAME = 'script@server.local'
    PASSWORD = 'password'
    
    # Подключение к IMAP серверу и получение писем
    def fetch_email():
       mail = imaplib.IMAP4_SSL(IMAP_SERVER)
       mail.login(USERNAME, PASSWORD)
       mail.select('inbox')
       _, message_numbers_raw = mail.search(None, 'ALL')
       for message_number in message_numbers_raw[0].split():
           _, msg_data = mail.fetch(message_number, '(RFC822)')
           return BytesParser().parsebytes(msg_data[0][1])
    
    # Извлечение вложения PDF
    def extract_and_resend_email(msg):
       for part in msg.walk():
           if part.get_content_type() == 'application/pdf':
               attachment = MIMEBase('application', 'pdf')
               attachment.set_payload(part.get_payload(decode=True))
               encoders.encode_base64(attachment)
               attachment.add_header('Content-Disposition', 'attachment', filename=part.get_filename())
    
               send_email(msg['To'], msg['Subject'], part.get_filename(), attachment)
    
    # Отправка нового письма с вложением
    def send_email(from_addr, subject, filename, attachment):
       msg = MIMEMultipart()
       msg['From'] = from_addr
       msg['To'] = 'C@server.local'
       msg['Subject'] = subject
    
       msg.attach(attachment)
    
       with smtplib.SMTP(SMTP_SERVER) as server:
           server.login(USERNAME, PASSWORD)
           server.sendmail(from_addr, 'C@server.local', msg.as_string())
    
    if __name__ == "__main__":
       email_message = fetch_email()
       extract_and_resend_email(email_message)

Применение

После настройки Sieve-фильтра и разработки серверного скрипта вы можете автоматизировать процесс обработки писем с PDF-вложениями и их повторного отправления от имени первоначального получателя к нужному адресату. Это решение требует интеграции серверных технологий, точной настройки учётных данных и корректного управления доступом, чтобы обеспечить безопасность и конфиденциальность перехватываемых писем.

Помимо этого, важно убедиться в том, что используемые серверы IMAP и SMTP надёжно защищены современными средствами заверения и шифрования соединений, что позволит избежать потенциальных утечек данных при передаче и хранении информации.

Общая эффективность реализованного решения будет зависеть от правильности реализации всех компонентов, описанных выше, и их корректной интеграции в существующую IT-инфраструктуру.

Оцените материал
Добавить комментарий

Капча загружается...