dポイントプレゼントキャンペーン実施中!

環境:WinXP+Apache2+PHP5
mb_send_mail()でタイトルに
”時間は何時でもokです。”
を入力すると、送信に失敗します。
コードは以下の通りです。よろしくお願いします。
<?php
$address=$_POST['address'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$header="Content-Type: text/plain;charset=iso-2022-jp";
mb_language("Japanese");
if(mb_send_mail($address,$subject,mb_convert_encoding($message,"JIS","EUC-JP"),$header)){
print("送信完了しました");
}else{
print("エラー:送信に失敗しました");
}
?>
($subject="時間は何時でもokです。"にするとエラーになります。)

A 回答 (5件)

以下動作環境です


PHP Version 4.3.11
Apache 1.3.27
OS:FreeBSD 4.9

HTML,スクリプト,共にEUC-JPで統一してあります。

php.ini 設定のマルチバイトに関する設定は以下
mbstring.internal_encoding = EUC-JP
mbstring.http_input = EUC-JP,SJIS
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.func_overload = 0
    • good
    • 0
この回答へのお礼

環境情報をありがとうございました。
どうやら、WINXP環境下よりUNIX系のほうが
安定してるのかな・・
PHP.INIの情報まで教えていただき参考になります。
一旦、質問を閉じて、もっと研究しようかと思います。
また、見かけましたらよろしくお願いします。

お礼日時:2005/12/13 23:26

ごめんなさい。

訂正です。(Return-Path削除)
Content-Type や、Content-Transfer-Encoding,MIME-Version 属性は
自動でつけられるようです。

//==============(ここから)===============
mb_language("Japanese");
mb_internal_encoding("EUC-JP"); // EUC-JPの部分はPHPスクリプトコードの文字コードを指定
// 以下はヘッダの例
$header= "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "Date: ".date("r")."\r\n" . "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
"X-Mailer: PHP/" . phpversion() . "\r\n");
if(mb_send_mail($address,$subject,$message,$header)){
print("送信完了しました");
}else{
print("エラー:送信に失敗しました");
}
//===========(ここまで)===================
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分のPHPはVer5で、参考WEBの症状は
再現しませんでした。
出来れば、hegemonismさんのPHPの動作環境(OS)を教えていただけないでしょうか?。(WinXP+Apache2+PHP特有の問題かも知れません)

お礼日時:2005/12/12 22:18

補足です。


PHP 4.4.1 ではサブジェクトに特定の文字においてエンコーディングに不具合があって文字化けすると聞いたことがあります。

参考URL参照してください

参考URL:http://ns1.php.gr.jp/pipermail/php-users/2005-Ju …
    • good
    • 0

以下のようにしてみてください。


$header には各パラメータの末尾にはCRLFが必要です。
mb_convert_encodingはmb_send_mail()が勝手にやるようですので不要です。

//==============(ここから)===============
mb_language("Japanese");
mb_internal_encoding("EUC-JP"); // EUC-JPの部分はPHPスクリプトコードの文字コードを指定
// 以下はヘッダの例
$header="From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "Return-Path: $email\r\n" . "Date: ".date("r")."\r\n" . "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
"X-Mailer: PHP/" . phpversion() . "\r\n");
if(mb_send_mail($address,$subject,$message,$header)){
print("送信完了しました");
}else{
print("エラー:送信に失敗しました");
}
//===========(ここまで)===================
私の環境ではこれできちんと送信されます。

PHP Version 4.3.11
Apache 1.3.27
    • good
    • 0

サブジェクトもエンコードしましょうね。


(さらにbase64エンコードをかけると吉)
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2005/12/12 22:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!