利用規約の変更について

PHPのmb_send_mail関数でメールを送信しています。
メールサーバーはGoogleAppsのを使っています
PHPのバージョンは5.1.6

--- 下記ソース ---
//日本語と内部文字エンコードの指定
mb_language('ja');
mb_internal_encoding('UTF-8');
$parameter = "-f hoge@example.co.jp";//return_path設定

// ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け
//$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));
$header = "";
$header .= "From: {$subject}<{$from}>";
$message = str_replace("\r", "", $message);
$res = mb_send_mail($to, $subject, $message, $header, $parameter);

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>mb_language('ja');


>mb_internal_encoding('UTF-8');

これが設定されているのであればmb_encode_mimeheaderは、utf-8→JISを行います。なので自前での変換(mb_convert_encoding)は入れない方が無難です。

というか、$subjectはfromに入れる(自前でJISにしている)と同時にmb_send_mailでもsubjectとして渡しています。なおさらutf-8のままでないとマズイです。

(e.g.)
mb_language('ja');
mb_internal_encoding('UTF-8');
$header = "";
$header .= "From: " . mb_encode_mimeheader($subject) . "<{$from}>";
$message = str_replace("\r", "", $message);
$parameter = "-f hoge@example.co.jp";
$res = mb_send_mail($to, $subject, $message, $header, $parameter);

なお「文字化け」は、どのメーラでどうなるといったことを基準にすると間違いの元です(メーラは自動補正して修正してくれるものが多いので)。popサーバから生のメールデータをダウンロードして中身を確認すべきです。
    • good
    • 0
この回答へのお礼

お返事が遅れてしまい大変申し訳ございません。。。

とても勉強になりました。
そのまま使わせていただいたところ上手くいきました。
ありがとうございます。大変助かりました。

お礼日時:2012/05/12 19:50

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpフォームで携帯へメール送信した場合の文字化け

過去のよく似た事象を検索しましたが解決しなかったので
質問します。よろしくお願いします。

携帯電話のメールアドレスに送信するWEBフォームをphpで
作成したいのですが、文字化けが直らずに困っています。

コードは次のような感じです。
PCへのメールは文字化けせず、DoCoMoへ送るとsubjectは正常で本文が化けます。
またauとvodafoneへ送るとすべて化けます。

$to = "$_REQUEST['$email']";
$from = "info@aaa.bbb";
$subject = "テスト送信";
$message = "テストメールです" .
$headers ='From: '. $from . "\r\n"
     .'MIME-Version: 1.0' . "\r\n"
     .'Content-Type: text/plain; charset=iso-2022-jp' . "\r\n"
     .'Content-Transfer-Encoding:7bit' . "\r\n"
     .'X-Mailer: PHP/' . phpversion();

if(mail($to, $subject, $message, $headers)==TRUE)
print("メールを送信しました");
else print("メール送信に失敗しました");


動作環境はSunOS5.7、Apache2.0、php5.0.3です。
コードはEUCで書いています。

過去のよく似た事象を検索しましたが解決しなかったので
質問します。よろしくお願いします。

携帯電話のメールアドレスに送信するWEBフォームをphpで
作成したいのですが、文字化けが直らずに困っています。

コードは次のような感じです。
PCへのメールは文字化けせず、DoCoMoへ送るとsubjectは正常で本文が化けます。
またauとvodafoneへ送るとすべて化けます。

$to = "$_REQUEST['$email']";
$from = "info@aaa.bbb";
$subject = "テスト送信";
$message = "テストメールです" .
$headers ='...続きを読む

Aベストアンサー

マイムは文字長制限もあるのでいかのように
処理するとよいでしょう。

function conv_auto_mime($str){
$pos = 0;
$str=mb_convert_encoding($str,"JIS","EUC-JP");
while ($pos < mb_strlen($str, "JIS")){
$output = mb_strimwidth($str,$pos,36,"","JIS");
$pos += mb_strlen($output, "JIS");
$TempStr .=(($TempStr)?" ":"")."=?ISO-2022-JP?B?".base64_encode($output)."?=";
}
return $TempStr;
}

$subject = "テスト送信";
$subject =conv_auto_mime($subject);

bodyはたんにコンバートすればよいでしょう

$message=mb_convert_encoding($message, 'JIS','EUC-JP');

マイムは文字長制限もあるのでいかのように
処理するとよいでしょう。

function conv_auto_mime($str){
$pos = 0;
$str=mb_convert_encoding($str,"JIS","EUC-JP");
while ($pos < mb_strlen($str, "JIS")){
$output = mb_strimwidth($str,$pos,36,"","JIS");
$pos += mb_strlen($output, "JIS");
$TempStr .=(($TempStr)?" ":"")."=?ISO-2022-JP?B?".base64_encode($output)."?=";
}
return $TempStr;
}

$subject = "テスト送信";
$subject =conv_auto_mime($subject);

bodyはた...続きを読む

Qチェックボックスから複数のvalueを取り出す

HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。

例:
グループAのラジオボタン1にチェック、送信
→グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A
→value==Aの場合に表示する文章を変数に受け渡し、その変数で表示

ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。
チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

Aベストアンサー

チェックボックスはちょっと特殊

まずHTML部分で、以下のように定義します
<input type="checkbox" name="sample[]" value="test1">test1
<input type="checkbox" name="sample[]" value="test2">test2

ここでは、nameの部分に[]をつけるのがポイント


次にphpで受け取る方法として、
$sample = $_POST["sample"];
で問題ありません。

受け取ったデータを使うときは、$sampleは配列になっていますので、
仮に上記のtest1とtest2両方にチェックが付いているとしたら、
$sample[0]にはtest1が、$sample[1]にはtest2が入っています。

$sampleをforeachで使うか、$sampleのデータ数を調べてforでループさせるなどで使えます。


人気Q&Aランキング

おすすめ情報