【发布时间】:2017-07-12 21:27:05
【问题描述】:
我想自动处理我从 Paypal 收到的用于向我的电子邮件地址捐款的电子邮件。 (通过 cronjob 和 php 脚本) 到目前为止,一切都很好。我做了一个测试捐赠,为了进一步测试,我把这封邮件用 Outlook 复制到收件箱几次。 复制的邮件一切正常(我正在检查电子邮件正文中的字符串) 但现在我又进行了一次测试捐赠,但没有奏效。 事实证明,E-Mail-Body 没有正确解析。 我已经在 Delphi 中尝试过 Ararat Synapse,但结果相同。
来自复制邮件的正确电子邮件正文如下所示:
古腾标签彼得迈耶! Diese E-Mail bestätigt den Erhalt einer Spende über €1,50 EUR von Peter Meier (peter.meier@gmx.de )。 Sie können die Transaktionsdetails 在线 abrufen 。 Spendendetails Gesamtbetrag:1.50 欧元
但是来自 Paypal 的原始邮件被解析为
PGh0bWwgPgogICA8aGVhZD4KICAgCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUi IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI + CiAgIAkJPG1ldGEgbmFtZT0i dmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MS4wLG1pbmltdW0tc2NhbGU9MS4w LG1heGltdW0tc2NhbGU9MS4wLHdpZHRoPWRldmljZS13aWR0aCxoZWlnaHQ9ZGV2aWNlLWhl aWdodCx0YXJnZXQtZGVuc2l0eWRwaT1kZXZpY2UtZHBpLHVzZX ... P>
以此类推,copymail.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
}
【问题讨论】:
-
除了处理特定 PayPal 电子邮件的任何问题之外,您应该知道 PayPal 实际上有几种不同格式的确认电子邮件并定期更改它们 - 新图像、不同布局等。所以一旦你让它“完美”工作,您需要包含一些错误检查以捕获格式更改并将这些消息保存为新的/更新的处理脚本。
-
@NineBerry 帖子中的解决方案给了我这个:注意:未定义的变量:第 34 行的 C:\xampp\htdocs\test\stackoverflow.php 中的一部分注意:试图获取非第 34 行 C:\xampp\htdocs\test\stackoverflow.php 中的对象 注意:未定义变量:第 37 行 C:\xampp\htdocs\test\stackoverflow.php 中的消息
-
@manassehkatz 谢谢,我已经讨厌贝宝给我这个垃圾了:D