Как автоматизировать отправку электронной почты при получении конкретного сообщения?
Я использую приложение Buxfer.com для управления капиталом. Этот сервис позволяет сообщать о расходах, отправляя электронную почту на специальный частный адрес электронной почты, назначенный пользователю Buxfer.
Формат, необходимый для сообщения о расходах, доходах или переводах:
<description> [+]<amount> [tags:<tags>] [acct:<account>] [from:<account>] [to:<account>] [date:<date>] [status:<status>] [memo:<memo>]
Элементы в [квадратных скобках] являются необязательными. Текст может быть написан в поле заголовка или в содержании сообщения.
Примеры:
кофе 5.45
Простейший пример с минимальной информацией, необходимой для обработки запроса. Расход: 5.45 от учетной записи по умолчанию, описание: "кофе".
кофе 5.45 теги: напитки, кофе acct:amex
Расход: 5,45 на кофе со счета "Амекс", прикрепленные теги: "напитки" и "кофе"
Оплатить чек +6952.32 статус: в ожидании
Доход: платежный чек 6952,32. Чек еще не очищен
Снятие банкомата 200 с:BoA Проверка на: Наличные
Перевод: снял 200 с банкомата Банка Америки в кошелек
После каждой транзакции я получаю уведомление по электронной почте от банка. Образец электронного письма выглядит так:
from: info@equabank.cz
to: [myemail]@gmail.com
topic: Payment card transaction
Уважаемый мистер [Фамилия],
05.11.2017 в 10:08 на вашей платежной карте была совершена транзакция на сумму 536,80 крон. Детали оплаты: KOSIK RETAIL SRO>PRAHA 9 CZ.
Для получения дополнительной информации, пожалуйста, посетите ваш интернет-банк.
Эква банк
[...]
Я ищу решение для автоматической обработки входящей электронной почты, чтения информации о транзакции и отправки электронной почты на предопределенный адрес от Buxfer.
Желаемый результат в этом примере:
from: [myemail]@gmail.com
to: [privateemail]@buxfer.com
topic: KOSIK RETAIL S.R.O.>PRAHA 9 CZ 536.80
Мое доступное оборудование:
- ноутбук с Windows 10,
- RaspberryPi 3B с Ubuntu Mate 16.04 LTS,
- смартфон с Android 7.1.2 (AOSP Extended 4.6)
Я пытался сделать это с помощью правил фильтрации в Gmail и Thunderbird; найти дополнение к Thunderbird, которое могло бы это сделать; искал в Интернете подходящее программное обеспечение, но я нашел только инструменты для пакетной отправки электронных писем, пересылки электронной почты или автоматических ответов.
3 ответа
IFTTT и аналогичные веб-сервисы для онлайн-автоматизации и интеграции могут быть использованы для автоматизации этого процесса. Платформа IFTTT предоставляет широкий спектр доступных сервисов с возможностью настраивать действия в JavaScript ( технически TypeScript) в "Filter code", который выполняется после Trigger ("if") и перед Action ("then"), однако требуется создать собственный апплет.
В качестве триггера я выбрал службу Gmail и выбрал "Новое электронное письмо в почтовом ящике" по адресу "info@equabank.cz".
В качестве действия я снова выбрал Gmail, выбрал "Отправить письмо" на адрес электронной почты учетной записи Buxfer и настроил следующие поля:
- Тема: {{Subject}}
- Body: {{BodyPlain}}
После добавления действия можно было написать код фильтра, который позволял извлекать сумму с описанием из почтового сообщения и форматировать их требуемым образом (описание, пространство, сумма). Необходимо было удалить любые специальные символы, потому что в отправленном электронном письме они были преобразованы в символы HTML. Однако Buxfer анализировал входящие электронные письма как обычный текст и рассматривал точку с запятой (;) в конце любого специального символа как начало новой транзакции, согласно " документации":
Вы можете отправить отчет о нескольких расходах в одном сообщении, напечатав каждое в отдельной строке или разделив их точкой с запятой (;)
if (Gmail.newEmailFrom.Subject === "Payment card transaction") {
var body = Gmail.newEmailFrom.BodyPlain;
var lines = body.split("\n\n");
var targetLine = lines[1];
var words = lines[1].split(" ");
var amount = words[16];
var description = targetLine.substring(
targetLine.lastIndexOf("Payment detail: ") + 16
);
description = description.replace(/[^\w\s:]/gi, ' ');
var targetBody = description + amount;
Gmail.sendAnEmail.setBody(targetBody);
} else if (Gmail.newEmailFrom.Subject === "Incoming payment to your account") {
...
} else if (Gmail.newEmailFrom.Subject === "Outgoing payment from your account") {
...
} else {
Gmail.sendAnEmail.skip()
}
В настоящее время это решение хорошо работает с транзакциями по платежным картам. Отслеживание входящих платежей потребует обработки нескольких учетных записей. Исходящие платежи должны были бы решить проблему с учетными карточками платежей.
Я могу ответить по отношению к Unix, здесь Ubuntu.
Вам нужен локальный MTA (агент передачи почты), такой как "sendmail", настроенный необходимым образом, особенно в отношении используемых безопасных протоколов и вашей аутентификации на удаленном сайте. Затем вы должны создать сообщение для отправки с помощью простого текстового редактора или любого инструмента, который может создавать простой текст. Как только ваше сообщение будет создано, вы можете просто отправить его в "sendmail", которое отправит его получателю. При правильной настройке "sendmail" может выполнить всю аутентификацию.
Для обработки входящих сообщений вы можете установить и настроить "fetchmail", которая может получать сообщения с удаленного сервера по соответствующему протоколу. Учитывая, что вы, вероятно, будете получать многочисленные сообщения, не только связанные с этой платежной системой, вам придется фильтровать входящие сообщения. "procmail", вероятно, хороший инструмент, чтобы помочь вам в этой задаче.
Признаюсь, что настройка этого инструмента не на начальном уровне.
Вам нужен POP/IMAP-сервер на вашем почтовом сервере, чтобы вы могли получать электронные письма на вашем локальном компьютере. На Linux-машине я рекомендую Dovecot. Для автоматизации операции fetchmail сделает все остальное.