7

次のコードを使用して、PHP で電子メールを送信しています。

<?php
error_reporting(E_ALL);

# write mail
###############################################################################
$recipient  = "mail@server.tld";
$subject    = mb_encode_mimeheader("Subject äöü ");
$text       = "Hallo";
$header     = "From:".mb_encode_mimeheader("Name with [], ÄÖÜ and spaces")." <webmaster@example.com>"
                . "\r\n" . "Reply-To: webmaster@example.com"
                . "\r\n" . "X-Mailer: PHP/" . phpversion();

// send e-mail
mail($recipient, $subject, $text, $header);
?>

imap_fetch_overview()その後、次のコードを使用して電子メールを読み込もうとします。

<?php
# receive mails
###############################################################################
$mailbox        = imap_open("{imap.server.tld/norsh}", "mail@server.tld", "********");

$MC = imap_check($mailbox);
$result = imap_fetch_overview($mailbox,"1:{$MC->Nmsgs}",0);

echo "<table>";
foreach ($result as $overview) {
    echo "<tr>"
        ."<td>".$overview->msgno."</td>"
        ."<td>".$overview->uid."</td>"
        ."<td>".$overview->date."</td>"
        ."<td>".$overview->udate."</td>"
        ."<td>".$overview->from."</td>"
        ."<td>".$overview->to."</td>"
        ."<td>".$overview->size."</td>"
        ."<td>".$overview->subject."</td>"
        ."</tr>";
}
echo "</table>";
?>

次のエラーが表示されます。

Notice: Undefined property: stdClass::$from in /mail_test.php on line 34

そして$overview->from価値がない。

「From:」部分に角かっこが含まれていない場合は問題ありません。ブラケットもエンコードする必要がありますか? どのように?仕事をしていると思いmb_encode_mimeheader()ました。

編集:

の結果var_dump($overview)は次のとおりです。

object(stdClass)#18 (14) {
  ["subject"]=>
  string(40) "Subject =?UTF-8?B?w4PCpMODwrzDg8K2IA==?="
  ["to"]=>
  string(16) "mail@server.tld"
  ["date"]=>
  string(31) "Thu, 16 Aug 2012 16:58:23 +0200"
  ["message_id"]=>
  string(58) "<**************************************>"
  ["size"]=>
  int(1585)
  ["uid"]=>
  int(18)
  ["msgno"]=>
  int(17)
  ["recent"]=>
  int(1)
  ["flagged"]=>
  int(0)
  ["answered"]=>
  int(0)
  ["deleted"]=>
  int(0)
  ["seen"]=>
  int(0)
  ["draft"]=>
  int(0)
  ["udate"]=>
  int(1345129104)
}
4

3 に答える 3

3

問題は、

echo mb_encode_mimeheader("Name with [], ÄÖÜ and spaces");

戻り値

Name with [], =?UTF-8?B?w4PChMODwpbDg8KcIGFuZCBzcGFjZXM=?=

そうではない、あなたが望むもの。

php.net でこの関数を見つけました。これはあなたを助けるかもしれません:

function EncodeMime($Text, $Delimiter) { 
    $Text = utf8_decode($Text); 
    $Len  = strlen($Text); 
    $Out  = ""; 
    for ($i=0; $i<$Len; $i++) 
    { 
        $Chr = substr($Text, $i, 1); 
        $Asc = ord($Chr); 

        if ($Asc > 0x255) // Unicode not allowed 
        { 
            $Out .= "?"; 
        } 
        else if ($Chr == " " || $Chr == $Delimiter || $Asc > 127) 
        { 
            $Out .= $Delimiter . strtoupper(bin2hex($Chr)); 
        } 
        else $Out .= $Chr; 
    } 
    return $Out; 
} 
echo EncodeMime("Name with [], ÄÖÜ and spaces", '%');

戻る

Name%20with%20[],%20%C4%D6%DC%20and%20spaces
于 2012-08-24T14:22:58.653 に答える
3

FROM フィールドが追加されていないのは、from="john@doe.com"アクティブ (チェック;) がなく、必要に応じて変換さphp.inimb_encode_mimeheaderておらず、電子メールを正しく送信するために必要なためです。

UTF-8 文字と名前を含むメールの場合は、 と でエンコードする必要がUTF-8ありbase64_encodeます。

そのメールを送信する適切な方法は次のとおりです。

$recipient  = "mail@server.tld";
$subject    = "=?UTF-8?B?".base64_encode('Subject äöü')."?=";
$text       = "Hallo";
$from_user  = "=?UTF-8?B?".base64_encode('Name with [], ÄÖÜ and spaces')."?= <webmaster@example.com>";
$header     = "From: ".$from_user." "
                . "\r\n" . "Reply-To: ".$from_user." "
                . "\r\n" . "MIME-Version: 1.0"
                . "\r\n" . "Content-Transfer-Encoding: 8bit"
                . "\r\n" . "Content-type: text/plain; charset=UTF-8"
                . "\r\n" . "X-Mailer: PHP/" . phpversion();

// send e-mail
mail($recipient, $subject, $text, $header);

適切な名前、電子メール、件名が記載された電子メールを受信する必要があります。あなたはまだそれらをデコードする必要がありますiconv_mime_decode($overview->from,0, "UTF-8")

于 2012-08-29T23:25:50.230 に答える
1

私は少し前に括弧で同じ問題を抱えていました。mail-header-address-fields の角かっこの意味と、なぜ PHP がそれらを管理できないのか、誰も教えてくれませんでした。私の解決策は、を使用した後、アドレスフィールドから括弧を単純に削除することでしたimap_fetchheader()

于 2012-08-31T10:22:41.783 に答える