Exemplo n.º 1
0
    def send_mail(self, mail: mailparser.MailParser) -> bool:

        subject = mail.subject

        sender_email_raw = mail.from_[0][1]

        if len(self.whitelist) > 0 and sender_email_raw not in self.whitelist:
            logger.info("Ignoring email from: %s", sender_email_raw)
            return False

        sender_email = " ".join(mail.from_[0])

        title = "{} from {}".format(subject, sender_email)

        logger.info("Sending mail: %s", title)

        if mail.text_html:

            text_html = "\n".join(mail.text_html)

            f = io.BytesIO(text_html.encode())
            f.name = title + ".html"

            self.bot.send_document(
                self.chat,
                f,
                caption=title,
            )

        elif mail.text_plain:

            message = "\n".join(mail.text_plain)

            self.bot.send_message(self.chat, split(message)[0])

            if len(message) >= 2:
                f = io.BytesIO("{}\n\n{}".format(title, message).encode())
                f.name = title + ".txt"
                self.bot.send_document(self.chat, f, caption=title)

        if mail.attachments:

            with tempfile.TemporaryDirectory() as tmp_dir:

                mail.write_attachments(tmp_dir)

                for file in os.listdir(tmp_dir):
                    self.bot.send_document(
                        self.chat, open(os.path.join(tmp_dir, file), "rb"))

        return True
Exemplo n.º 2
0
def send_email_telegram(bot: TeleBot, chat_id: str,
                        mail: mailparser.MailParser):
    subject = mail.subject
    from_ = " ".join(mail.from_[0])
    mail_name = "{} от {}".format(subject, from_)

    if mail.text_plain:  # Если существует текстовая версия письма
        message = "\n".join(mail.text_plain)
        bot.send_message(
            chat_id,
            split(message)[0])  # Отправляем ее первые 4092 символа
        # И высылаем файл письма целиком (если письмо содержит более 4092 символов)
        if len(message) >= 2:
            f = io.BytesIO("{}\n\n{}".format(mail_name, message).encode())
            f.name = mail_name + ".txt"
            bot.send_document(chat_id, f, caption="Полный текст письма")

    if mail.text_html:  # Если существует веб версия письма, то отправляем ее файлом
        text_html = "\n".join(mail.text_html)
        f = io.BytesIO(text_html.encode())
        f.name = mail_name + ".html"
        bot.send_document(
            chat_id,
            f,
            caption="{} (веб версия письма)".format("{} от {}".format(
                subject, from_)),
        )

    if mail.attachments:  # Если есть вложения в письме, то отправляем и их.
        with tempfile.TemporaryDirectory(
        ) as tmp_dir:  # Создание временной директории для хранения вложений
            mail.write_attachments(tmp_dir)  # Сохраняем вложения
            for file in os.listdir(tmp_dir):
                bot.send_document(chat_id,
                                  open(os.path.join(tmp_dir, file),
                                       "rb"))  # Отправляем вложения