2

将电子邮件转发到 Mailgun 后,如何获取原始发件人的地址?

事件链如下所示:

  1. originalSender 向 someUser 发送消息
  2. someUser 将消息转发到 Mailgun
  3. Mailgun 将解析后的消息发布到我的服务器

换一种说法:

orignalSender (send)->  someUser (forward)->  mailgun (POST)->  myserver

我能得到的最好的结果是在“body-plain”属性上做一个正则表达式。
问题是电子邮件客户端发送的方式不同。这里有两个例子。

从 GMail 转发(我添加了 ...):

body-plain: "---------- Forwarded message ----------\r\nFrom: Kalle Kalleson <kalle.kalleson@mail.com>\r\nDate: 2014-02-13\r\n ..."

从 Apple 的邮件转发(我添加了 ...):

body-plain: "(...)Begin forwarded message:\r\n\r\n> From: Kalle Kalleson <kalle.kalleson@mail.com>\r\n> Subject: New color printer\r\n> Date: 11 February, 2014 15:47:19 GMT+1\r\n> 

必须有更好的方法来做到这一点,对吧?
提前致谢!

4

4 回答 4

1

我刚刚与 Mailgun 支持人员取得了联系,他们无法提供不同的策略。
也就是说,自己解析正文,考虑到电子邮件客户端之间的差异。
我会说跛脚,:-(

在这里,您可以对功能请求进行投票。
http://mailgun.uservoice.com/forums/156243-general/suggestions/5528656-extract-the-original-sender-of-a-forwarded-email

有没有人想出更好的答案?

于 2014-02-16T22:39:08.937 回答
0

也许我错过了您要查找的内容,但是当 Mailgun POST 到您的服务器时,您应该能够从 POST 数据中提取 From 字段。我正在使用 node.js 应用程序来解析我的消息,但是,在 PHP 中它看起来像:

<?php
    $from = $_POST["From"];
    echo "This message is from: ".$from;
?>

如果我错过了您的要求,我深表歉意。

于 2014-07-09T16:08:50.503 回答
0

在任何一种情况下,使用正则表达式都应该可以解决问题。尝试:

/(From:.*>)/g
于 2014-09-02T10:50:05.993 回答
0

不可能把电子邮件的原始发件人扔掉任何邮件服务。

因此,我们实现了正则表达式并从邮件 html 正文中获取匹配的第一次出现。

Regex.Match仅返回第一个匹配项,因此将其与以下正则表达式一起使用。

From:\s(.*?)>

https://regex101.com/r/1pUpPU/1

于 2019-12-06T07:13:55.677 回答