• ベストアンサー

PHPのmailメソッドで件名先頭に*が付く

PHPのメールメソッドで日本語を件名に入れると、件名の先頭に*が付いて送信されてくるのですが、この原因と、付かなくなるようにする方法を教えてください。 メソッドは、以下のようなものです。 よろしくお願いいたします。 mail("xxx@xxx.xxx", "日本語(件名)", "内容", "From: yyy@yyy.yyy")) ;

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8542/19421)
回答No.2

mailメソッドの件名や内容に、多バイト文字を入れてはいけません。 mailメソッドを使う場合は、以下のように、自分でエンコードして、何でエンコードしたのか明示しなければなりません。 mb_internal_encoding("UTF-8"); mail( 'xxx@xxx.xxx', mb_encode_mimeheader('日本語(件名)', 'ISO-2022-JP-MS'), mb_convert_encoding('内容', 'ISO-2022-JP-MS'), "Content-Type: text/html; charset=\"ISO-2022-JP\";\n" ); なお、mb_send_mailを使う場合は mb_language('ja'); mb_internal_encoding("UTF-8"); mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のように「直前にオマジナイを入れる必要」があり、オマジナイ無しで mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のみだと、内容が文字化けします。

h_mp
質問者

お礼

ご回答ありがとうございます。 ご回答いただいた内容と同じようにmb_send_mailを用いて記述したところ、指定した通りの文字列が送れました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

mail関数を使っているとのことですが、php.iniでmbstring.func_overload は 1以上になっているのでしょうか?そうでなければ(mailが)mb_send_mailをoverloadしないのでキチンとmb_send_mailを使わないとダメです。またmb_languageは何になっていますか('ja'なのか'uni'なのかでcharsetがiso-2022-jpかutf-8かが違ってきます)。 まさかmb_send_mailをoverloadしていない状態で日本語を使っている(メーラが何とかして表示しようとしているだけ)ということはありませんよね。生のメールデータがどうなっているか確認してください。

h_mp
質問者

お礼

ご回答ありがとうございます。 確認させていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • t_ohta
  • ベストアンサー率38% (5104/13336)
回答No.1

日本語の入ったメールを送る場合は mb_send_mail() を使うか、ご自身でMIMEエンコード処理した文字列を渡す必要があります。

h_mp
質問者

お礼

ご回答ありがとうございます。 mailメソッドを、mb_send_mailメソッドに変更し、以下の記述を前に追加したところ、指定した通りの文字列が送れました。 ありがとうございました。 mb_language("ja"); mb_internal_encoding("UTF-8");

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メール受信 件名が文字化け

    PHPでメールを送信するプログラムを作成し、メールを受信した時、件名だけが日本語の部分だけ文字化けしてしまいます。本文は文字化けされずに表示されます。原因がわからず困っています。何か対応法はないでしょうか? 環境は OS:WinME PHP:PHP4.2.3WIN版 メールソフト:Beckyk 2.05.06 メール送信のプログラムは下記の通りです mail($mail, "件名 JONES0901です", "本文内容", "From: webmaster@*****.com\r\n" ."Reply-To: webmaster@*****.com\r\n" ."X-Mailer: PHP/" . phpversion());

    • ベストアンサー
    • PHP
  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP
  • PHPでのmail送信に関して

    教えて下さい。 PHPの中で、mail関数を用いてメール送信をしたいと考えていますが、 下記のようなエラーでどうしても送信できません。 Warning: mail() [function.mail]: SMTP server response: 999 5.7.1 Unable to relay for xxx.xxx@xxx.co.jp in C:\Apache Group\Apache2\htdocs\PHP\mail.php on line 9 phpの方の記述は、 <?php $to = 'xxx.xxx@xxx.co.jp'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: xxx.xxx@xxx.co.jp' . "\r\n" . 'Reply-To: xxx.xxx@xxx.co.jp' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?> としてあります。 php.iniの部分も以下のように変更しています。 [mail function] ; For Win32 only. SMTP =xxx.xxx-mail.ne.jp ← ここをSMTPのメールサーバにしてあります。 ; For Win32 only. ; sendmail_from = ; For Unix only. You may supply arguments as well (default: 'sendmail -t -i'). ;sendmail_path = エラーを解除する為にはどこを修正すれば良いでしょうか。。。 教えて下さい。 宜しくお願いします。

    • 締切済み
    • PHP
  • フォームからのメールでのタイトル(件名)について

    こんにちは。PHP初心者です。 メールの送信機能で煮詰まってしまったので、お力添えお願いいたします。 <?php mb_language( "Ja" ); mb_internal_encoding("UTF-8"); $subject = "メールタイトル"; $message = "メール本文"; $subject = mb_convert_encoding($subject, "ISO-2022-JP","UTF-8"); $message = mb_convert_encoding($message, "ISO-2022-JP","UTF-8"); $to = "xxxxxxxxxxxx@xxxxxxx.co.jp"; $from = "xxxxxxxxxxxx@xxxxxxx.co.jp"; ini_set( "sendmail_from", $from ); //メール送信 if(mb_send_mail($to, $subject, $message)) { echo"送信しました"; } else { echo"送信できませんでした"; } ?> といった一般的なフォームからのメール送信機能を作成しようとしているのですが、 タイトル(件名)に当たる部分(変数名:$subject)で日本語文字を混合した固定文字列を設定した場合、 約15バイト以上を入力すると送信エラーとなってしまいます。 ちなみに15バイト未満の日本語文字列や英数のみだと何桁でも問題ありません。 例)  OK:メールタイトル(日本語含む15バイト未)、aaaaaaaaaaaaaaaaaaaaaaaaa(15バイト超でもOK) 等  NG:メールタイトル From ホームページ(日本語含む15バイト超) 等 エラーの内容は Warning: mb_send_mail() [function.mb-send-mail]: Failed to Receive in C:\・・・・・\mail.php on line ○○○ と表示されます。 エンコードが関係しているのではと思っていますが、色々試しても上手く行かないので、質問させて頂きました。 ソースの問題点、解決策等ありましたら、ご教示ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPからのメールがこない

    #! /usr/local/php4/bin/php<? //各種初期設定 $from="info@demo.net"; //送信元 $dest="info@demo.net"; //宛先 $header="From: $from\nReply-To: $from"; //ヘッダ $subject="お問い合わせ"; //件名 //エラーがない場合のみメール送信 if($result=="flash"){ // 文字コードの変換 mb_convert_variables("EUC-JP", "JIS, SJIS, UTF-8", &$SUBJECT, &$COMPANY, &$PERSON, &$EMAIL, &$URL, &$COMMENT); //言語を日本語に設定 mb_language("Japanese"); $message="省略"; //メールを送信する mb_send_mail($dest, $subject, $message, $header); // FlashのAns = Sender.Answer; に'Complete' を返す print "Content-type: text/plain\n\n"; print "Answer=Complete"; } ?> というFlashと連動するPHPなのですが、 メール送信完了と表示されるのにメールがきません。 どなたかお分かりになるかた是非教えて下さい。 利用サーバー環境は OS Linux (Fedora Core 3) PHP PHP-4.3.11 (CGI版) Perl Perl-5.8.5 です。よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのメール送信

    ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPでメール送信を行う場合、SSLで送信できないものでしょうか?

    PHPでいわゆる問い合わせフォームをつくっています。 SSLの設定していますので、次のような感じです。 https://www.xxx.com/1.php https://www.xxx.com/2.php(内容確認) https://www.xxx.com/3.php(送信完了) 最後の送信完了部分で 管理者宛にメールを送信を行っています。 mb_send_mailを使っています。 この時、このメールはおそらく暗号化されてものではなく 平文でとんでいるんだと思います…。 これをPHPを使ってSSLで送信する方法ってないものでしょうか…。 もしあれば、ぜひソースでお教えいただけないでしょうか…… よろしくお願いします。 ※環境としてはPHP5.2.5 xreaのレンタルサーバーを利用しております…。

    • 締切済み
    • PHP
  • コマンドプロンプトから引数を渡して実行するには?

    メールを送信するPHPをコマンドプロンプトから実行しています。 メールが送信される事は確認しました。 使い勝手を少しでもよくするためにsubjectやfromの部分を コマンドプロンプトから引数で渡して実行してやりたいのですが どのようにすれば可能なのでしょうか? コマンドプロンプトの実行コマンド >php send_mail.php を >php send_mail.php subject from のようにしたいと考えてます。 <?php mb_language("japanese"); mb_internal_encoding("SJIS"); $to = "xxx@yyy.zzz"; $subject = "ここはsubject"; $body = "ここはbody"; $from = mb_encode_mimeheader("ここはfrom")."<xxx@yyy.zzz>";mb_send_mail($to,$subject,$body,"From:".$from); ?> 以上です、よろしくお願いします。

    • 締切済み
    • PHP
  • 現在趣味でPHPを勉強しています。PHPでメールが送信できずに困ってい

    現在趣味でPHPを勉強しています。PHPでメールが送信できずに困っています。お手数をおかけして申しわけありませんが、皆様のお知恵をお借しいただけますでしょうか。 よろしくお願いいたします。 ■サーバ環境 OS:windowsXP PHP:5.3.0 Apahce:2.2.11 ■困っている内容 PHP.iniで以下の設定の上、以下のプログラムでメール送信しましたが、以下のエラーが返ってきて送信できません。 (1)php.ini設定 *プロバイダーに指定されたメールサーバーとメールアドレス。コマンドプロンプトからはtelnetに接続でき、メール送信も可能。 [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = mb.nifty.com ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = xxxxxx@nifty.com (2)送信プログラム <?php //内部エンコーディング mb_internal_encoding("UTF-8"); //メール内容 $add = "xxxxx@live.jp"; $subject = "test"; $msg = "test"; //メールエンコーディング mb_language("Japanese"); //メール送信 if(mb_send_mail($add,$subject,mb_convert_encoding($msg,"JIS","UTF-8"))){ print "送信完了しました"; }else{ print "メール送信に失敗しました"; } ?> (3)エラー内容 Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 501 5.0.0 Invalid domain name in C:\wamp\www\test\mail.php on line 15 メール送信に失敗しました (4)備考 自分でエラー内容からいろいろ調べてみたのですが、そのものずばりのエラー内容は少なく、何が原因かわかりませんでした。エラー内容からPHPがメール送信しようとしてもサーバではじかれているような感じがするのですが、いかがでしょうか。 ご存知の方がいらっしゃいましたらご教示ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPのmail関数で送信できない

    Fedracore3でPHPプログラムの制作をしています。 今問題となっているのが、mail関数でメールを送信する部分です。 テストしているスクリプトです。 <?php $rst = mail("xxx@xxxx.com", "送信テスト", "Hello !!", "from: xxx@xxx.info"); if($rst){ print ("メール送信テスト完了"); }else{ print ("メール送信テスト失敗"); } ?> かならず「メース送信テスト失敗」になり、実際送信している先のメールアドレスにも届きません。 ちなみにコンソールからsendmailコマンドで直接入力すると送信できるので、sendmailの設定や名前解決などは問題ないと思われます。 現在の環境は以下の通りです。 OS:Fedracore3 PHP:Version 4.3.9 Apache:2.0.52 (Fedora) ちなみにi18n_convertやi18n_mime_header_encodeなどの関数も画面が真っ白になるだけで動きません。 システムの設定かと思うのですが、思い当たる部分が見当たらないので困っています。ご教授方よろしくお願いいたします。

    • 締切済み
    • PHP