Tim*_*ers 3 php email pop3 imap
我不确定它是否在标题中,但我正在寻找一种方法来判断我收到的电子邮件是否是对我发送的电子邮件的回复,如果是,则只抓取新文本,而不是"引用"文本"
一点背景:我正在创建一个自动发送电子邮件的脚本.我正在创建一个cron作业,定期运行以检查是否有任何回复.如果有回复,我只想抓住新东西,而不是旧东西.
在过去,我会发送主题中有id的电子邮件(你有一个新的回复[1234]),然后检查主题在[和]之间的东西.然后我会抓住所有消息并存储它,因为每个Web浏览器/电子邮件使用不同的字符或样式来引用文本.有些人做">"有些做横向规则,有些做什么都没做.
无论如何,我只是在电子邮件标题中寻找可以表明他们正在回复的内容以及新文本可能是什么.如果不可能,我会继续做我正在做的事情.
您可知道,如果邮件是另一封电子邮件或不使用的组合的答复In-Reply-To和References.
每个电子邮件在其标题中都有一个唯一的ID Message-ID,根据此RFC 1,您可以跟踪任何电子邮件的祖先.
我检查了它,它在所有客户端(Outlook,Thunderbird)工作
我会给出一个例子来使用.
1-在您第一次发送的电子邮件的标题中,您(您的邮件服务器或代码中的您)发送ID (Message-ID)了一封邮件,如果您打开电子邮件来源,您将在顶部看到它:
... // You (your code) send:
Message-ID: <1@your-domain-mandatory.com>
...
Run Code Online (Sandbox Code Playgroud)
你只需要Message-ID在你的程序中保留它.任何后续回复都会提到这一点ID.
2-客户将回复电子邮件1给您.客户将发送一封信crucial header给您,告诉您此回复的电子邮件除了自己的回复Message-ID.
... // Client(Thunderbird) send:
Message-ID: <2@your-domain-mandatory.com>
In-Reply-To: <1@your-domain-mandatory.com>
...
Run Code Online (Sandbox Code Playgroud)
当您收到第二封电子邮件时,您可以轻松跟踪之前发送的电子邮件,因为ID邮件(1)位于In-Reply-To邮件标题中(2).
3-如果你想在你的代码中再次回复这封电子邮件,你只需要将Message-ID邮件(2)放在In-Reply-To标题中,Message-ID将邮件(1)和邮件(2)放在References标题中.因此客户端将正确理解链.
... // You (your code) send:
Message-ID: <3@your-domain-mandatory.com>
In-Reply-To: <2@your-domain-mandatory.com>
References: <1@your-domain-mandatory.com> <2@your-domain-mandatory.com>
...
Run Code Online (Sandbox Code Playgroud)
通过此标题,您告诉客户端此电子邮件是对邮件(2)的回复,而祖先是邮件(1)和邮件(2).
我和他们一起工作并阅读了它们并且它正在运行,我现在的问题是只获取最后一封电子邮件的文本而不是回复中引用的文本.(我们正在运行自己的票务系统,我们为每封电子邮件创建评论)
不幸的是,电子邮件客户端基本上可以对您的消息执行任何他们想要的操作,并且没有可靠的标准来确定客户端收到的消息的来源。此外,IMAP 与此没有任何关系。电子邮件可以通过多种不同的方式发送,包括网络邮件。
您能做的最好的事情就是在主题行中查找 ID 号(假设人们不更改它,但他们很少这样做)。您还可以执行 Google 所做的操作...将回复文本与您发送到该地址的电子邮件进行模糊匹配。如果匹配,请将其视为回复的一部分。但这需要付出很大的努力。