如何在收到特定消息时自动发送电子邮件?

如何在收到特定消息时自动发送电子邮件?

我用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 标签:饮料,咖啡 账户:美国运通

支出:从“Amex”账户购买 5.45 美元咖啡,附带标签:“饮料”和“咖啡”

工资支票 +6952.32 状态:待定

收入:工资支票 6952.32。支票尚未兑现

ATM 提款 200 从:BoA 支票到:现金

转账:从美国银行 ATM 机取出 200 美元到钱包

每次交易后,我都会收到银行的电子邮件通知。示例电子邮件如下:

from: [email protected]
to: [myemail]@gmail.com
topic: Payment card transaction

亲爱的 [姓氏] 先生,

2017 年 11 月 5 日 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 操作系统的笔记本电脑,
  • 搭载 Ubuntu Mate 16.04 LTS 的 RaspberryPi 3B,
  • 搭载 Android 7.1.2 (AOSP Extended 4.6) 的智能手机

我尝试使用 Gmail 和 Thunderbird 中的过滤规则来做到这一点;寻找可以做到这一点的 Thunderbird 插件;在网上搜索合适的软件,但我只找到了批量发送电子邮件、电子邮件转发或自动回复的工具。

答案1

IFTTT 和类似的基于 Web 的在线自动化和集成服务可用于自动化此过程。IFTTT 平台提供广泛的可用服务,并可在 JavaScript 中自定义操作(技术上 TypeScript) 在触发器 (“if”) 之后和动作 (“then”) 之前执行的“过滤器代码”,但是需要创建自己的小程序。

作为触发器,我选择了 Gmail 服务并从“[电子邮件保护]

作为一项操作,我再次选择了 Gmail,并选择“发送电子邮件”到 Buxfer 帐户电子邮件并配置了以下字段:

  • 主题:{{Subject}}
  • 正文:{{BodyPlain}}

添加操作后,可以编写过滤器代码,允许从邮件消息中检索带有说明的金额,并按所需方式格式化它们(说明、空格、金额)。必须删除任何特殊字符,因为在发送的电子邮件中,它们已转换为 HTML 符号。但是,根据“文档“:

您可以在一条消息中发送多个费用报告,方​​法是将每个费用输入到单独的行中,或用分号 (;) 分隔。

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()
}

目前,该解决方案在支付卡交易中效果很好。跟踪收款需要处理多个账户。付款需要解决会计卡付款的问题。

答案2

我可以就 Unix 相关的内容做出回应,这里是 Ubuntu。

您需要一个本地 MTA(邮件传输代理),如“sendmail”,并进行必要的配置,尤其是要使用的安全协议以及对远程站点的身份验证。然后,您必须使用简单的文本编辑器或任何可以生成简单文本的工具来构建要发送的消息。一旦您的消息构建完成,您只需将其提供给“sendmail”,它将把它发送给收件人。如果配置正确,“sendmail”可以进行所有身份验证。

为了处理收到的消息,您可以安装并配置“fetchmail”,它可以使用适当的协议从远程服务器检索消息。考虑到您可能会收到大量消息,而不仅仅是与此支付系统相关的消息,您必须过滤收到的消息。“procmail”可能是帮助您完成此任务的好工具。

我承认这些工具的配置不是处于初学者水平。

相关内容