Как юристу направить поток рабочей почты gmail в телеграм

Сгенерировано с помощью dall-e-3
Сгенерировано с помощью dall-e-3

Мне очень нравится телеграм. В нем вся новостная лента, общение с друзьями и коллегами, боты-помощники и т.д. В нем я постоянно на связи, а вот важное письмо в рабочей почте могу и пропустить. Так почему бы не перенаправить поток рабочей почты в телеграм? В этой заметке расскажу как это сделать.

Для начала потребуется развернуть скрипт (GAS) на аккаунте из которого хотите выгружать почту. Как это делать рассказывал здесь.

Для удобства можно сделать две вкладки. В первой будет код отправки сообщений в бота, во второй - парсер почты.

Код для отправки сообщение в бот:

const API_TOKEN = "ЗДЕСЬ УКАЖИТЕ ТОКЕН ВАШЕГО ТГ-БОТА" function sendMessage (message, chatId){ var data = { method: "post", payload: { method: "sendMessage", chat_id: String(chatId), text: message, parse_mode: "HTML", disable_web_page_preview: true } } UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data); } function sendTextAsFileToTelegram(text, fileName, chatId) { let blob = Utilities.newBlob(text, 'text/html', fileName); let url = `https://api.telegram.org/bot${API_TOKEN}/sendDocument`; let formData = { 'chat_id': chatId, 'document': blob }; let options = { 'method': 'post', 'payload': formData }; let response = UrlFetchApp.fetch(url, options); Logger.log(response.getContentText()); }

Предполагается, что бот у вас уже есть и вы знаете где взять токен бота для переменной API_TOKEN. Если нет, то начните с этой заметки.

В редакторе это будет выглядеть так:

Как юристу направить поток рабочей почты gmail в телеграм

Код для парсинга почты:

const chatId = "ЗДЕСЬ УКАЖИТЕ КОД ВАШЕГО ТГ-ЧАТА" function getUnreadMessagessss() { let unreadCount = GmailApp.getInboxUnreadCount(); if (unreadCount > 0) { let threads = GmailApp.getInboxThreads(0, 100); for (let i = 0; i < threads.length; i++) { for (msg of threads[i].getMessages()){ if(msg.isUnread()) { let msgId = msg.getId() console.log(msgId) let msg_subject = msg.getSubject() let msg_body = msg.getBody() let gmail_quote = msg_body.indexOf('<div class="gmail_quote">') if (gmail_quote != -1){ msg_body = sanitizeMessage(msg_body.substring(0,gmail_quote)) } else { msg_body = sanitizeMessage(msg.getPlainBody()) } let msg_from = msg.getFrom() let notification_msg = `На рабочую почту пришло письмо: <strong>от:</strong> ${extractEmail(msg_from)} <strong>тема:</strong> ${sanitizeMessage(msg_subject)} <strong>Содержание:</strong> ${msg_body}`.slice(0, 4096) console.log(notification_msg) sendMessage(notification_msg, chatId) msg.markRead() sendTextAsFileToTelegram(`<!DOCTYPE html><html><head><meta charset="UTF-8">${msg.getBody()}`, 'text.html', chatId) } } } } } function sanitizeMessage(message) { let sanitizedMessage = message.replace(/(?!<br\s*\/?>)<[^>]+>/gi, ""); sanitizedMessage = sanitizedMessage.replace(/<br\s*\/?>/gi, '\n'); sanitizedMessage = sanitizedMessage.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); sanitizedMessage = sanitizedMessage.replace(/\s+/g, ' ').trim(); return sanitizedMessage; } function extractEmail(str) { const emailRegex = /<([^>]+)>/; const match = str.match(emailRegex); return match ? match[1] : str; }

В редакторе это будет выглядеть так:

Как юристу направить поток рабочей почты gmail в телеграм

Тут всего три функции:
- getUnreadMessagessss: Эта функция проверяет количество непрочитанных сообщений в почтовом ящике Gmail. Если есть непрочитанные сообщения, она получает их и обрабатывает каждое из них. Для каждого непрочитанного сообщения она извлекает информацию (от кого, тема, содержание), очищает содержание от HTML-тегов и лишних пробелов, формирует уведомление и отправляет его в указанный Telegram-чат. После обработки сообщение помечается как прочитанное.
- sanitizeMessage: Эта функция очищает сообщение от HTML-тегов, заменяет <br> на переносы строк и экранирует специальные символы. Она также удаляет лишние пробелы и обрезает сообщение до нужного формата.
- extractEmail: Эта функция извлекает email-адрес из строки, которая может содержать email в угловых скобках. Если email найден, возвращается его значение; в противном случае возвращается исходная строка.

Дальше просто настраиваете триггер, который будет с определенной периодичностью взывать функцию getUnreadMessagessss, чтобы проверить почту и отправить вам сообщение, если среди них есть непрочитанные.

Вот и всё, Вы великолепны!)

Весь код лежит на гитхаб

Кому, как и мне, интересно автоматизировать юридические процессы, присоединяйтесь ко мне в телеграме

22
1 комментарий

че то сложно как то. но идея супер

1