2017-02-22 13 views
1

PayPalから寄付された電子メールを私のE-Mailアドレスに自動処理します。 (cronjobとPHPスクリプトを介して) これまでは、とても良い。私はテスト寄付を行い、さらにテストするために、このメールをOutlookでINBOXに何度かコピーします。 コピーされたメールはすべて正常に動作しました(メール本文の文字列をチェックしています) 今、別のテスト寄付を行いましたが、それは機能しませんでした。 E-Mail-Bodyが正しく解析されていないことが判明しました。 私はすでにDelphiでArarat Synapseを試しましたが、同じ結果が得られました。Paypalで奇妙な電子メール解析エラーが発生しました。

Gutenタグピーター・マイヤー:コピーされたメールから

正しいEメール本文は、次のようになります!ディーゼルEメールは、ピーター・マイヤー([email protected])から€1.50ユーロ以上お支払いいただきます。オンラインでの取引をオンラインでお楽しみください。 Spendendetails Gesamtbetrag:€1,50 EUR

しかし、ペイパルから元のメールが

PGh0bWwgPgogICA8aGVhZD4KICAgCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUi IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI + CiAgIAkJPG1ldGEgbmFtZT0i dmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MS4wLG1pbmltdW0tc2NhbGU9MS4w LG1heGltdW0tc2NhbGU9MS4wLHdpZHRoPWRldmljZS13aWR0aCxoZWlnaHQ9ZGV2aWNlLWhl aWdodCx0YXJnZXQtZGVuc2l0eWRwaT1kZXZpY2UtZHBpLHVzZX ...ように

そして、copiedmailとして解析されます.h tmlは3KB、元は28KBです。

マイコード:NineBerry、 へ

$connection = imap_open("{imap.gmx.net:993/imap/ssl}", "[email protected]", "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

可能な複製を働いた(http://stackoverflow.com/questions/15539902/php -imap-decoding-messages) – NineBerry

+0

特定のPayPalメールの処理に関する問題に加えて、PayPalにはいくつかの異なる形式の確認メールがあり、定期的に新しい画像やレイアウトなどが変更されることに注意してください。 「完全に」動作させるには、フォーマットの変更をキャッチして、新しい/更新された処理スクリプトのためにそれらのメッセージを保存するためのエラーチェックを含める必要があります。 – manassehkatz

+0

@NineBerry投稿からの解決策は私にこれを与えます: 未定義変数:行34のC:\ xampp \ htdocs \ test \ stackoverflow.phpの部分 注意:Cで非オブジェクトのプロパティを取得しようとしています: \ xampp \ htdocs \ test \ stackoverflow.php on line 34 注意:未定義の変数:C:\ xampp \ htdocs \ test \ stackoverflow.phpの行37にあります。 – computerjulian

答えて

1

おかげで私は、PayPalはそのメールにbase64エンコーディングを使用していることが分かりました。 だから、体が提案されているようエンコーディングを確認するには、このコード

$body = imap_fetchbody ($connection, $msgno, 1); //read E-Mail-Body 
$body = imap_base64($body); 
echo $body; 

によって正しく解析された、あなたができる:もちろんエコーの

$structure = imap_fetchstructure($connection, $msgno); 
$encoding = $structure->encoding; 
$body = imap_fetchbody ($connection, $msgno, 1); 
$body=decodebody($encoding, $body); 
echo $body; 

function decodebody($encoding, $body) 
{ 
switch ($encoding) 
{ 
    # 7BIT 
    case ENC7BIT: 
     echo "7BIT<br>";// 
     return $body; 
     break; 
    # 8BIT 
    case ENC8BIT: 
     echo "8BIT<br>";// 
     return quoted_printable_decode(imap_8bit($body)); 
     break; 
    # BINARY 
    case ENCBINARY: 
     echo "BINARY<br>";// 
     return imap_binary($body); 
     break; 
    # BASE64 
    case ENCBASE64: 
     echo "BASE64<br>";// 
     return imap_base64($body); 
     break; 
    # QUOTED-PRINTABLE 
    case ENCQUOTEDPRINTABLE: 
     echo "QUOTED<br>";// 
     return quoted_printable_decode($body); 
     break; 
    # OTHER 
    case ENCOTHER: 
     echo "OTHER<br>";// 
     return $body; 
     break; 
    # UNKNOWN 
    default: 
     echo "UNKNOWN<br>";// 
     return $body; 
     break; 
} 
} 

を機能では、あなたがチェックするだけのためです。 はところで、私はこのオンラインデコーダに私の元の質問からスニペットを貼り付け: https://www.base64decode.org、それはまた、[メッセージのデコードPHPのIMAP]の:)

関連する問題