我想自动处理从Paypal获得的电子邮件,以便捐赠给我的电子邮件地址。 (通过cronjob和php脚本) 到现在为止还挺好。我做了一个测试捐赠,为了进一步测试,我用Outlook将这封邮件复制到INBOX几次。 复制的邮件(我正在检查电子邮件正文中的字符串)一切正常 但是现在我又做了一次测试捐赠而且没有用。 事实证明,电子邮件正文未被正确解析。 我已经尝试过Delphi中的Ararat Synapse但结果相同。
复制邮件中的正确电子邮件正文如下所示:
Guten Tag Peter Meier! Diese电子邮件bestätigtdenErhalt einerSpendeüber€1,50 EUR von Peter Meier(peter.meier@gmx.de)。 SiekönnenmieTransaktionsdetails在线abrufen。 Spendendetails Gesamtbetrag:€1,50 EUR
但Paypal的原始邮件被解析为
PGh0bWwgPgogICA8aGVhZD4KICAgCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUi IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI + CiAgIAkJPG1ldGEgbmFtZT0i dmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MS4wLG1pbmltdW0tc2NhbGU9MS4w LG1heGltdW0tc2NhbGU9MS4wLHdpZHRoPWRldmljZS13aWR0aCxoZWlnaHQ9ZGV2aWNlLWhl aWdodCx0YXJnZXQtZGVuc2l0eWRwaT1kZXZpY2UtZHBpLHVzZX ...
依此类推,copiedmail.html为3KB,原文为28KB。
我的代码:
$connection = imap_open("{imap.gmx.net:993/imap/ssl}", "peter.meier@gmx.de", "password"); //connect
$count = imap_num_msg($connection); //get E-Mail count in INBOX
for($msgno = 1; $msgno <= $count; $msgno++) //walk through INBOX mails
{
$headers = imap_headerinfo($connection, $msgno); //read E-Mail header
$subject = $headers->subject; //read subject
//decode subject
$elements = imap_mime_header_decode($subject);
$decodedsubject="";
for ($i=0; $i<count($elements); $i++)
{
$decodedsubject = $decodedsubject.$elements[$i]->text;
}
$body = imap_fetchbody ($connection, $msgno, 1); //read body
echo $body; <--- Here I get long cryptic Text in original Mail
}
答案 0 :(得分:1)
感谢NineBerry, 我发现paypal使用base64编码为他们的邮件。 所以这个代码
正确解析了正文<div class="flex">
<div class="wide">
<div class="stretchy-wrapper">
<div>Wide container</div>
</div>
</div>
<div class="tall">
<div class="stretchy-wrapper">
<div>Tall container</div>
</div>
</div>
</div>
要按建议检查编码,您可以执行以下操作:
$body = imap_fetchbody ($connection, $msgno, 1); //read E-Mail-Body
$body = imap_base64($body);
echo $body;
当然回声功能仅供您检查。 顺便说一句,我将原始问题的片段粘贴到这个在线解码器: https://www.base64decode.org它也有效:)