2011-04-22 15 views
1

PHPにパイプ:私は限りメールはOutlookから送信されないよう....電子メールの配管、および添付ファイル/ボディ完全に解析する作業を取得することができたparse emails解析の電子メールは、このぇを使用

gmailとthunderbirdから完全に実行されますが、Outlookから受信メールが送信されるとスクリプトは失敗します。私はOutlookのチュートリアルの様子に誰かがOutlookに準拠していないというコメントを書いてOutlookの見た目をどのようにしているのかを判断しますが、問題は私の頭の上です。どんな助けでも感謝します、ありがとう。

fyi:これはOutlookの最新バージョン(win7)です。

+0

具体的なエラーはありますか?私は同じチュートリアルのMIMEパーサークラスをOutlookでも成功させました。 – Compeek

+0

データを解析する前にデータを印刷して、そのデータがどのように見えるかを確認するだけです。次に、さまざまな出力をここに掲示することができ、コードのどの部分が失敗するかを指摘するのに役立ちます。 – rzetterberg

答えて

0

ok ...

私はそれを修正しました。私はCpanelでパイプをセットアップしていましたが、これは簡単です。私はパイプを "アカウントレベルのフィルタリング"の下に置いて、見通し以外は何のためにもうまくいった。私はデバッグのためにスクリプトの印刷データを持つのが好きでしたが、電子メールがOutlookから来たときには実行されませんでした。メールログで見た...何も明らかではない。私の管理者は、パイプをcpanelの "forwarders"セクションに移動することを提案しました。さて、それは完璧に動作します。 cpanelのバグでなければなりません。なぜあなたはコンピュータのことが分からなくなっていくのかが分かります。

私が実装しなければならなかっただけのカップル他の微調整:Windows環境でスクリプトを編集/書き込み時に

A)、隠された文字が追加されます。これを修正するために、私はPHPファイルをアップロードし、cpanelファイルマネージャ(us-ascii)で開き、保存します。これにより、文字が削除されます。 (明らかに* nixでも開くことができる) B)私は755にchmodしなければならなかった、またはそれは動かないだろう。 \ wwwの外に置かれているスクリプトなので心配はありません。 C)私のシバンは#!/ usr/bin/php -qでなければなりませんでした。それを稼働させるにはqが必要でした。

これは他の人に役立つことを願っています。

1

あなたが遭遇したように、Outlookは電子メールユニバースの惨劇です。使用しているチュートリアルで提供されているソースが、複数回、text/plainとしてエンコードされたコンテンツを参照していることがわかります。 Outlookから送信される電子メールには、平文の代わりに、または平文に加えて、text/htmlの内容が含まれている可能性があります。

あなたは電子メールの内容をどうしたい内容に応じて、あなたがそうのような既存の1以下の重複体の検索を挿入することにより、同様text/htmlエンコードされたコンテンツを受け入れるために、スクリプトを適応することができる場合があります

//get the message body 
if(substr($decoded[0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Body'])){ 

    $body = $decoded[0]['Body']; 

} elseif(substr($decoded[0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Body'])) { 

    $body = $decoded[0]['Parts'][0]['Body']; 

} elseif(substr($decoded[0]['Parts'][0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Parts'][0]['Body'])) { 

    $body = $decoded[0]['Parts'][0]['Parts'][0]['Body']; 

} 

確かにきれいではありませんが、それが検出された場合Outlookから来るHTMLコンテンツを取得する必要があります。

実際にHTMLコンテンツを解析する必要がある場合、問題はもう少し複雑になります。あなたの次のステップは、この質問の答えのいくつかを見てみることです:Robust, Mature HTML Parser for PHP

幸運を祈る!

関連する問題