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

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);

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/06/14 14:38:13
  • 終了:2009/06/16 00:39:40

回答(5件)

id:kntr1 No.1

kntr1回答回数82ベストアンサー獲得回数142009/06/14 15:03:30

ポイント20pt

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

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

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

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/

id:xv1700

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

本文が送信できません。

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

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

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

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

2009/06/14 17:43:59
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/06/14 17:42:18

ポイント20pt

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

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


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

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

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

id:xv1700

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

mb_internal_encoding("EUC-JP") ;

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

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

2009/06/15 13:09:49
id:kn1968 No.3

kn1968回答回数17ベストアンサー獲得回数02009/06/14 18:48:50

ポイント20pt

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

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


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

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

id:xv1700

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

参考にします。

2009/06/15 21:06:04
id:kntr1 No.4

kntr1回答回数82ベストアンサー獲得回数142009/06/14 19:40:35

ポイント20pt

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/

id:xv1700

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

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

2009/06/16 00:31:40
id:pahoo No.5

pahoo回答回数5960ベストアンサー獲得回数6332009/06/15 13:54:19

ポイント100pt

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

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

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

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

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

id:xv1700

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

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

2009/06/16 00:38:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません