Как автоматизировать отправку электронной почты при получении конкретного сообщения?

366
Sebastian

Я использую приложение 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, которое могло бы это сделать; искал в Интернете подходящее программное обеспечение, но я нашел только инструменты для пакетной отправки электронных писем, пересылки электронной почты или автоматических ответов.

0

3 ответа на вопрос

2
Sebastian

IFTTT и аналогичные веб-сервисы для онлайн-автоматизации и интеграции могут быть использованы для автоматизации этого процесса. Платформа IFTTT предоставляет широкий спектр доступных сервисов с возможностью настраивать действия в JavaScript ( технически TypeScript ) в «Filter code», который выполняется после Trigger («if») и перед Action («then»), однако требуется создать собственный апплет.

В качестве триггера я выбрал службу Gmail и выбрал «Новое письмо в почтовом ящике» по адресу «info@equabank.cz».

В качестве действия я снова выбрал Gmail, выбрал «Отправить письмо» на адрес электронной почты учетной записи Buxfer и настроил следующие поля:

  • Тема: {}
  • Body: {}

После добавления действия можно было написать код фильтра, который позволял извлекать сумму с описанием из почтового сообщения и форматировать их требуемым образом (описание, пространство, сумма). Необходимо было удалить любые специальные символы, потому что в отправленном электронном письме они были преобразованы в символы 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() } 

В настоящее время это решение хорошо работает с транзакциями по платежным картам. Отслеживание входящих платежей потребует обработки нескольких учетных записей. Исходящие платежи должны были бы решить проблему с учетными карточками платежей.

0
Claude Frantz

Я могу ответить по отношению к Unix, здесь Ubuntu.

Вам нужен локальный MTA (агент передачи почты), такой как «sendmail», настроенный необходимым образом, особенно в отношении безопасных протоколов для использования и в отношении вашей аутентификации на удаленном сайте. Затем вы должны создать сообщение для отправки с помощью простого текстового редактора или любого инструмента, который может создавать простой текст. Как только ваше сообщение будет создано, вы можете просто отправить его в «sendmail», которое отправит его получателю. При правильной настройке «sendmail» может выполнить всю аутентификацию.

Для обработки входящих сообщений вы можете установить и настроить «fetchmail», которая может получать сообщения с удаленного сервера по соответствующему протоколу. Учитывая, что вы, вероятно, будете получать многочисленные сообщения, не только связанные с этой платежной системой, вам придется фильтровать входящие сообщения. «procmail», вероятно, хороший инструмент, чтобы помочь вам в этой задаче.

Признаюсь, что настройка этого инструмента не на начальном уровне.

Спасибо, что посоветовали мне инструменты Linux, я попытаюсь взглянуть на них дальше, но я все еще не вижу способа соединить fetchmail и sendmail, я имею в виду: как получить информацию из входящей почты, поместить ее в правильно отформатированный текст и передать его в sendmail Sebastian 6 лет назад 0
В обычном режиме конфигурации fetchmail отправляет входящие сообщения в sendmail для доставки в локальные почтовые ящики. Claude Frantz 6 лет назад 0
В обычном режиме конфигурации fetchmail отправляет входящие сообщения в sendmail для доставки в локальные почтовые ящики. Отправляемое сообщение должно иметь строки From :, a To :, Subject:, затем пустую строку и содержимое сообщения. Наконец, используйте «sendmail -G -t <messagefile» для отправки сообщения в sendmail. Claude Frantz 6 лет назад 0
-1
HelpBox

Вам нужен POP / IMAP-сервер на вашем почтовом сервере, чтобы вы могли получать электронные письма на вашем локальном компьютере. На Linux-машине я рекомендую Dovecot. Для автоматизации операции fetchmail сделает все остальное.

Похожие вопросы