2

受信メールを handler.php にパイプしています。私はそれを正常にパイプすることができ、それは機能していますが、メールヘッダーから変数、たとえば「件名」、「宛先」、または「メッセージ本文」を取得するときに、いくつかの問題が発生しています。これが私がここから得たコードです

コードは次のとおりです。

 <?php
//Assumes $email contains the contents of the e-mail
//When the script is done, $subject, $to, $message, and $from all contain appropriate values

//Parse "subject"
$subject1 = explode ("\nSubject: ", $email);
$subject2 = explode ("\n", $subject1[1]);
$subject = $subject2[0];

//Parse "to"
$to1 = explode ("\nTo: ", $email);
$to2 = explode ("\n", $to1[1]);
$to = str_replace ('>', '', str_replace('<', '', $to2[0]));

$message1 = explode ("\n\n", $email);

$start = count ($message1) - 3;

if ($start < 1)
{
    $start = 1;
}

//Parse "message"
$message2 = explode ("\n\n", $message1[$start]);
$message = $message2[0];

//Parse "from"
$from1 = explode ("\nFrom: ", $email);
$from2 = explode ("\n", $from1[1]);

if(strpos ($from2[0], '<') !== false)
{
    $from3 = explode ('<', $from2[0]);
    $from4 = explode ('>', $from3[1]);
    $from = $from4[0];
}
else
{
    $from = $from2[0];
}
?> 

Gmail のメールの場合、件名、from、to、およびメッセージ本文は正常に取得されますが、Yahoo からの受信メールでは機能しません。

すべての有名な電子メール サービス プロバイダーと互換性のあるユニバーサル php クラスはありますか? 誰かが RoundCube または別の電子メール送信者から電子メールを送信した場合はどうなりますか? 変数を正常に検出するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

非常に単純なものが必要な場合は、これが出発点です。

list($headers, $message) = explode("\n\n", $email);

$header = imap_rfc822_parse_headers($headers);

// You can now access
$header->from;
$header->to;
$header->subject;

電子メールの部分 (単独の場合でも) を使用して解析することもできますimap_rfc822_parse_adrlist()

于 2012-09-25T23:24:04.083 に答える
1

コメントで説明するメッセージ形式は、Multi-Part Mimeエンコーディングです。

考慮すべきことがたくさんあります。メールが HTMLプレーンテキストで、画像や添付ファイルなどが埋め込まれている場合はどうでしょうか。

使用している PHP のバージョンがMailParse拡張機能を使用してビルドされている場合、使用するツールのかなり単純なセットが提供されるはずです。

Google コードで利用できるMime Email Parserもあります。これは以前は使用したことがありませんが、かなり単純に思えます。

于 2012-09-25T23:09:49.143 に答える