人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

メール送信の文字化けで悩んでいます。
X-Meler

問題箇所が2つあります。
?Docomoに送信するさいにsubjectが10文字以上が文字化けします。
?本文(message)が20文字くらいしかはいりません。それ以上だとメールが送信されません。

とあるサイトから拾ってきたサンプルです。そのままコピーしました。
殆ど変えてません。

$subject="あいうえおかきくけこさしすせそたちつてと";
$subject=mb_convert_encoding($subject, 'JIS', 'AUTO');
$subject=mb_encode_mimeheader($subject,'ISO-2022-JP',"B");

$to="you@hoge.com";
$message="テスト12345678901234567890";
$message=mb_convert_encoding($message, 'JIS', 'AUTO');

$headers ="From: me@hoge.com\n";
$headers.="MIME-Version: 1.0\n";
$headers.="Content-Type: text/plain; charset=iso-2022-jp\n";
$headers.="Content-Transfer-Encoding: 7bit\n";
$headers.="X-Mailer: PHP/" . phpversion() . "\n";

mail($to,$subject,$message,$headers);

●質問者: xv1700
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:?D hoge ISO-2022-JP JIS MESSAGE
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kntr1
●20ポイント

問題箇所の指摘ではありませんが、参考にどうぞ

//相手先, 表題, 内容, 送信者名,送信者アドレス, 戻り先(エラーの時の戻り先)

//戻り先を指定しているのは、

function i_send_mail($to,$subject,$body,$fromName, $fromMail, $rp){

$subject = mb_convert_kana( $subject, "KHV", "SJIS" );

$subject = "=?ISO-2022-JP?B?".base64_encode(mb_convert_encoding($subject,"JIS","SJIS"))."==?=";

$fromName = mb_convert_kana( $fromName, "KHV", "SJIS" );

$fromName = "=?ISO-2022-JP?B?".base64_encode(mb_convert_encoding($fromName,"JIS","SJIS"))."==?=";

$from = $fromName." <".$fromMail.">";

$body = mb_convert_kana( $body, "KHV", "SJIS" );

$body = str_replace(chr(92).chr(92),chr(92),$body);

/*****************************************************

Content-Type: text/plain; charset=iso-2022-jp

Content-Transfer-Encoding: 7bit

******************************************************/

$header="Return-Path: ".$rp."\nContent-Type: text/plain; charset=iso-2022-jp\nContent-Transfer-Encoding: 7bit\nFrom: ".$from."";

$jis_body=mb_convert_encoding($body,"JIS","SJIS");

mail($to,$subject,$jis_body,$header);

}

自作で私が使っている関数ですが、各キャリアに対応できています。

http://q.hatena.ne.jp/

◎質問者からの返答

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

本文が送信できません。

空白になってしまいます。

$body = 'ああああああああああああ';

$body .= ’いいいいいいいいいい';

このやり方も問題あるのでしょうか・・・??


2 ● pahoo
●20ポイント

「X-Meler」というのは何でしょうか。「X-Mailer」のことでしょうか。

質問の状況ですとPHPでメール送信しているようなので、その前提で回答します。


日本語のメールを送るときは、関数mb_send_mailを使った方が簡単です。

文字化けしないように送る方法などについては、拙作「PHPでメール送信」を参考にしていただければと思います。

このスクリプトで、ご質問の件名が文字化けすることなく DoCoMo のiモードメールへ送信できることを確認しました。確認した環境は PHP 4.4.8および5.2.9です。

◎質問者からの返答

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

mb_internal_encoding("EUC-JP") ;

どこの文字を指定すればよいのでしょうか?

encoding=utf-8だったらUTF-8を指定すればよいのでしょうか。。


3 ● kn1968
●20ポイント

$body = 'ああああああああああああ';

$body .= ’いいいいいいいいいい';


こんな日本語はあり得ないので文字化けするのです。

http://www.stackasterisk.jp/tech/php/php03_04.jsp

◎質問者からの返答

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

参考にします。


4 ● kntr1
●20ポイント

function i_send_mail($to,$subject,$body,$fromName, $fromMail, $rp){

/*** 生身は省略 ***/

}

$to = 'test@hoge.jp';

$subject = 'ああああああ';

$body = 'あああああああああああああああ';

$body.= 'いいいいいいいいいい';

$fromName = '送信者';

$fromMail = 'sender@hogemail.jp';

$rp = 'sender@hogemail.jp';

i_send_mail($to,$subject,$body,$fromName, $fromMail, $rp);


?>

とされていますよね。

あと、このテストメールは、SJISの本文に対応させています。

もし本文がSJIS以外でも認識させたいなら SJISをautoでもかまいませんが

autoは "ASCII,JIS,Shift_JIS,EUC-JP,SJIS"

となっているため、UTF対応していないので

mb_convert_kana( $subject, "KHV", "SJIS" );

mb_convert_encoding($body,"JIS","SJIS");

の SJISのところを

"SJIS,EUC-JP,UTF-8,ASCII,Shift_JIS"

としてもいいです。

mb_convert_encoding($body,"JIS","SJIS,EUC-JP,UTF-8,ASCII,Shift_JIS");

このmb_で始まる関数は、書かれた順番に調べていきます。

携帯から送信される文字コードはほとんどのケースがSJISなので、SJISを一番最初に持って行っています。


http://q.hatena.ne.jp/

◎質問者からの返答

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

まだ解決しないのですが、日本語が38バイトしかはいりません。。。


5 ● pahoo
●100ポイント

どこの文字を指定すればよいのでしょうか?

encoding=utf-8だったらUTF-8を指定すればよいのでしょうか。。

PHPでメール送信」からダウンロードできるスクリプト(昨日アップデートしましたので、新しいファイルをダウンロードしてください)の9行目の変数を

$InternalEncoding = 'EUC-JP';
    ↓
$InternalEncoding = 'UTF-8';

と変更してください。スクリプト・ファイル自身をUTF-8に変換することもお忘れ無く。

◎質問者からの返答

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

実現できました。mb_send_mailの方が簡単ですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ