5

メールを読んで、TOアドレスに応じて異なるメールアドレスに配信するスクリプトを書いています。すべてのメールは 1 つのアドレスに届きますが、メールを転送する方法や、新しいメールを作成して関連するメッセージ本文をすべて含める方法がわかりません。

現在、IMAP を使用してメールをダウンロードし、imap_fetchbody を使用してメールの内容を取得しています。

$email_body = imap_fetchbody($imapconnex, $msgnumber, 1);

=一部のメール本文は正しく表示されず、一部のメールには末尾に記号が付いた短い行が含まれているため、コンテンツが正しく表示されません。また、メール本文に random がランダムA0に印刷されています。

私の計画は、PHP の mail() 関数を使用して電子メールを送信先に送信し、From アドレスを実際の From アドレスに変更することでした。それは私のニーズには合っていますが、正しい本文​​を取得し、フォーマットして送信する方法がわかりません。

メールを送信するために使用しているコードは次のとおりです。

$header = imap_fetch_overview($imapconnex, $search[$i]);
$email_subject = $header[0]->subject;
$email_head = imap_fetchbody($imapconnex, $search[$i], 0); 
$email_body = imap_fetchbody($imapconnex, $search[$i], 1); 
mail("me@mydomain.com", $email_subject, $email_body, $email_head);

ヘッダーは正常に転送されているようですが、メッセージの本文はまだ=A0記号で表示されています。

4

2 に答える 2

1

マルク

いい答えで、簡単な解決策を提供します。また、いくつかのマイナーな変更を加えて、プレーン テキストを処理することもできます。

$mtype = array('text', 'multipart', 'message', 'application', 'audio', 
               'image', 'video', 'model', 'other');
$mailstructure = imap_fetchstructure($mbox, $msgno, FT_UID); //
$type = $mailstructure->type;
if ($type == 1 && $mailstructure->ifparameters == 1) {
    $parameters = $mailstructure->parameters;
    $attribute = $parameters[0]->attribute;
    $value = $parameters[0]->value;
    echo $attribute . "//" . $value . "<br />";
}
# prepare the mail
$to="";
$subject="";
//   line below (may) not (be) needed
//   $body="\r\nThis is a multipart message in MIME format.\r\n";
$body = imap_body($inbox, $uid, FT_UID);
$headers ="From:" . $from . "\r\n";
$headers .="Date: " . date("r") . "\r\n";
$headers .="MIME-Version: 1.0\r\n";
$headers .="Content-Type: " . $mtype[$mailstructure->type] . '/'
         . strtolower($mailstructure->subtype) . ";\r\n";
if ($type == 1) { // multipart
    $headers .= "\t boundary=\"" . $value . "\""."\r\n";
}
$sendmail = imap_mail($to, $subject, $body, $headers);
于 2018-10-10T06:51:17.703 に答える
0

今日、ほとんどのメッセージはマルチパートです。私はこれとその作品を使用しています。

$mailstructure = imap_fetchstructure($inbox, $uid, FT_UID); //
$type = $mailstructure->type;
if ($type == 1 && $mailstructure->ifparameters == 1) {
    $subtype = strtolower($mailstructure->subtype);
    echo "SubType is" . $subtype . "<br />";
    $parameters = $mailstructure->parameters;
    $attribute = $parameters[0]->attribute;
    $value = $parameters[0]->value;
    echo $attribute . "//" . $value . "<br />";
    # prepare the mail
$to="";
$subject="";
    $body="\r\nThis is a multipart message in MIME format.\r\n";
    $body.=imap_body($inbox, $uid, FT_UID);
    $headers ="From:" . $from . "\r\n";
    $headers .="Date: " . date("r") . "\r\n";
    $headers .="MIME-Version: 1.0\r\n";
    $headers .="Content-Type: multipart/" . $subtype . ";
        \t boundary=\"" . $value . "\""."\r\n";
   $sendmail = imap_mail($to, $subject, $body, $headers);

}

于 2015-03-22T19:58:34.037 に答える