PHPでメールを送信したいのですが、mb_send_mailがサーバーの環境にありません。

それでも、日本語送信するには、どうすればよろしいでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/07/13 23:21:44
  • 終了:2007/07/20 23:25:03

回答(4件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/07/14 00:21:32

ポイント23pt

PHP: mail - Manual

mail関数でもヘッダー(第4引数)にてメッセージ本文で使っているキャラクタセットを指定してけば日本語のメールを送る事は可能ですよ。


マニュアルのサンプルでは

$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

となってますがHTMLではなくテキストの場合は

$headers .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n";

と読み替えてください。

iso-8859-1の部分はお使いのキャラクタセットにあわせてください。

id:makocan

ありがとうございます。

ただ、まだ、タイトルが化けます。。。

2007/07/14 00:52:29
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012007/07/14 01:20:02

ポイント23pt

タイトルだけが文字化けしているのだとすれば

(1)メッセージ本文とは違うキャラクタセットを用いてしまっている

  →ソースを見直してみてください。

(2)タイトル内に改行コードが含まれてしまっている

  →文字列を変えて試してみてください。

  →SJISなどでソースを書いているのであればEUCなどで書くようにしてみてください。

のではないかなどと思います。

PHP: mb_send_mail - Manual

mb_send_mailでは自動的に行ってくれる調整を手動で行うのは面倒ではありますが

原因を1つ1つ潰していくしか手はないので、あせらずじっくり調整していってください。


余談ですが、コメント欄を使用可能にしておくと、やりとりが楽になりますよ。

id:makocan

mail()のすぐ前に、$subject='テスト'とテスト的にやっても文字化けしてしまいました。。。

※内容はしません。

ちなみに、UTF-8ですが、これが悪いのでしょうか?

コメント欄は良く分かりませんでした。

すみません。。。

2007/07/14 02:25:00
id:tezcello No.3

tezcello回答回数460ベストアンサー獲得回数692007/07/14 12:01:46

ポイント22pt

mail() では勝手にエンコードしてくれないのはご存知ですよね。

そして、subject は通常と違う形でエンコードしないといけないようです。(今お使いのメーラで、ソースを表示してみればわかります。)

http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html

このページの「日本語でのヘッダの利用」参照


$subject='テスト';
$subject=mb_convert_encoding($subject, 'JIS', 'UTF-8');  // UTF-8 から JIS に変換
$subject=base64_encode($subject);  // base64 でエンコード
$subject='=?ISO-2022-JP?B?'.$subject;  // 文字コードとエンコードに関する記述を追加

こんな感じでしょうか(ごめんなさい。スクリプトは実行確認していません。)

UTF-8 -> JIS に変換していますが、subject内に記述するエンコードとして UTF-8 が使えるかが不明な為です。(特にケータイなどで)


ところで、mb_send_mail() が使えない環境で、mb_系関数を使ってもいいんでしょうか?

もしmb_系が全てダメなら、

  • subject内に記述するエンコードを UTF-8 にしてみる
  • nkf等の外部での変換を利用する
  • 文字コード変換を自作する

となってしまうかも知れませんが。

id:makocan

日本語関連の関数が使えません。。。

自作は時間がかかりそうなため、オープンソースでご存知ありませんでしょうか?

2007/07/14 15:05:27
id:phantazy No.4

phantazy回答回数4ベストアンサー獲得回数02007/07/14 12:58:10

ポイント22pt

mb_convert_encodingで"JIS"に変換してみてください。

  • id:kn1967
    OutlookExpressだとタイトルが化けるという曖昧な記憶があります。
    別質問 http://q.hatena.ne.jp/1184217893 (まだ未解決?)によると
    マルチバイト関数すべてが利用不可という事でも無いようなので
    他のキャラクタセットに変更してみてください。
  • id:tezcello
    subject ヘッダで UTF-8 は使えそうなので、試してみる事をお勧めします。(=JISには変換しない)
    ケータイに送るのなら、実際に送って試してみるのが手っ取り早いでしょう。最近は本文をUTF-8で送っても良いみたいですし、スクリプトをUTF-8で書かれているのなら、変換の手間がいらないわけですし。

    サーバ環境に依って使えない場合もありますが、nkf というものをご存じないですか?
    http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/
    これを system(), exec() などで実行してやる事で、文字コードを変換出来ます。
    (海外のサーバ等ではインストールされていないかも知れませんが)

    > 自作は時間がかかりそうなため、オープンソースでご存知ありませんでしょうか?
    世の中には奇特な方がいらっしゃるもので、コード変換のライブラリを公開されている方がみえる様です。
    jcode.php http://www.spencernetwork.org/
    mbstringエミュレータ http://www.matsubarafamily.com/blog/mbemu.php

    ただ、いずれの場合も(先の回答のスクリプトも)RFCに準拠する為には1行の文字数を76文字まで(たしか改行文字も含むだったような...)にしないといけないので、その辺りはこちらを参照されてはどうでしょう?
    http://www.securehtml.jp/utf-8/long_subject.html

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

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

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

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