• ベストアンサー

送信したメールのタイトルが無題に・・・

現在、PHPによるファイル添付プログラムを作成している者です。 添付メールを試験的にgmailに送信するようにしているのですが、 メールを確認してみると入力したはずのタイトルが 無題となってしまいます。 まったくの無題となってしまうので問題となる点がどこなのか よく分かりません。 この場合には、問題が考えられるのでしょうか?

  • sody
  • お礼率100% (5/5)
  • PHP
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.5

文字コードを統一してみてください。 また、 サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけている意味のないことをしているので、修正してください。 > $subject = base64_encode($subject); > $subject=mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS"); > $subject = mb_encode_mimeheader($title); エンコードせずに送るとどうなりますか? また、添付ファイル付きと添付ファイルなしだと違いますか? mb_send_mailを使用するとどうなりますか?

sody
質問者

お礼

たびかさなるご回答ありがとうございます。 >サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけている意味のないことをしているので、修正してください。 の点は   $subject = $title;  $subject=mb_convert_encoding($subject,"ISO-2022-JP","SHIFT-JIS");  $subject = base64_encode($subject); のように修正しました。 このプログラムはhtml上で入力された値を一旦PHPにPOSTを使って 受け渡し、PHPで確認ページを生成し、正しければメール送信というものなのですが、 htmlもphpも <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=SHIFT-JIS"> でSHIFT-JISになるよう統一しているはずなのですが html部ではSHIFT-JISで入力されていることになっているのに 確認ページはなぜかEUC-JPで表示されます。 これがタイトルが無題へとなっている原因なのでしょうか?

その他の回答 (4)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

通常のメール送信はJISで送信しないと、メーラーによっては文字化けします。 で、回答ですが、 サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけているのがよく分かりませんが・・・ $subject = base64_encode($subject); $subject= mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS"); $subject = mb_encode_mimeheader($title); jisにしてからbase64エンコードをしてみてください。 もしかしたら全体的に文字コードを統一しないと駄目かも知れません。 サブジェクトを英字のみにしたら届くでしょうか? その場合は文字コードが原因かと思います。

sody
質問者

お礼

mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); $to = "";  //gmailアドレスにしております $boundary = md5(uniqid(rand())); $php_v = PHP_VERSION; $PHP_SELF = $_SERVER["PHP_SELF"]; $title = $_POST['title']; $action = $_POST['action']; $email = $_POST['email']; $comment = $_POST['comment']; $upfile = $_FILES['upfile']['tmp_name']; $upfile_name = $_FILES['upfile']['name']; $upfile_type = $_FILES['upfile']['type']; if($action == "post"){ if($email){ $title = htmlspecialchars($title); $email = htmlspecialchars($email); $comment = htmlspecialchars($comment); $comment = nl2br($comment); $comment = str_replace("\r", "", $comment); $comment = str_replace("\n", "", $comment); if($action == "send"){ $msg = ""; $from =$email; $subject = $title; $subject = base64_encode($subject); $subject=mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS"); $subject = mb_encode_mimeheader($title); $header = "From: $from\n"; $header .= "Reply-To: $from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; if(file_exists($upfile)){ $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=Shift_JIS\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=Shift_JIS\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } 文字数の都合によりファイル添付部とメール送信部は削っております。 以上のようにコードを変更いたしましたが 本文とファイル添付はうまくいっているのですが gmail側に届くメールは英字も日本語もすべて無題となってしまいます。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

ソースを拝見しましたが、 $header に $subject も $title も入ってないのですが。

sody
質問者

お礼

ご回答ありがとうございます。 メール送信は分からないことが多いので追加質問させていただきます。 文字数の関係で省略しておりますメール送信の部分に mail関数を仕様しており mail関数の場合 mail("$to","$subject","$msg","$header"); で良いはずなので タイトル部に$subjectにしているのですが、 それだけではだめなのでしょうか? $header部に$subjectの内容ももたせなければならないのでしょうか?

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

変数に値が入っていないとか。 ソースを見ないと問題発見は難しいです。

sody
質問者

お礼

$PHP_SELF = $_SERVER["PHP_SELF"]; $title = $_POST['title']; $action = $_POST['action']; $email = $_POST['email']; $comment = $_POST['comment']; $upfile = $_FILES['upfile']['tmp_name']; $upfile_name = $_FILES['upfile']['name']; $upfile_type = $_FILES['upfile']['type']; if($action == "send"){ $msg = ""; $from =$email; $subject = $title; $subject = base64_encode($subject); $subject= mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS"); $header = "From: $from\n"; $header .= "Reply-To: $from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; $subject = mb_encode_mimeheader($title); if(file_exists($upfile)){ $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=EUC-JP\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=EUC-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } if($comment){ $comment = str_replace("<br />", "\n", $comment); $msg .= "$comment\n"; } if(file_exists($upfile)){ $fp = fopen($upfile, "r") or die("error"); //ファイルの読み込み $contents = fread($fp, filesize($upfile)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); $msg .= "\n\n--$boundary\n"; $msg .= "Content-Type: " . $upfile_type . ";\n"; $msg .= "\tname=\"$upfile_name\"\n"; $msg .= "Content-Transfer-Encoding: base64\n"; $msg .= "Content-Disposition: attachment;\n"; $msg .= "\tfilename=\"$upfile_name\"\n\n"; $msg .= "$f_encoded\n"; $msg .= "--$boundary--"; } 以下メール送信といったソースコードです。

  • edge8040
  • ベストアンサー率46% (7/15)
回答No.1

文字コードの問題ではないですか? 何かのメーラーで件名が無題になってしまう現象があり、 mb_convert_encodingで適切な文字コードに変換したら 解決した記憶があります。 【参考】mb_convert_encoding http://php.s3.to/man/function.mb-convert-encoding.html

参考URL:
http://php.s3.to/man/function.mb-convert-encoding.html
sody
質問者

お礼

タイトル部もEUC-JPにエンコードしてみましたが やはり無題のままになってしまいます。 mb_language("Japanese"); mb_internal_encoding("EUC-JP"); $title = $_POST['title']; $title = htmlspecialchars($title); $subject = $title; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP","EUC-JP"); エンコード仕方が間違っているのでしょうか?

関連するQ&A

  • PHPでメールの送信(Gmail使用)

    いつもお世話になっております。 今回はサイト利用者が管理者などに質問をメールするホームを作っております。 利用者は名前、メールアドレス、質問内容を入力し、送信ボタンを押すと、自動的に管理者のメールアドレスに送信される。そういった流れです。 プログラムそのものにはミスはないのですが、ひとつ問題があります。 質問メールをgoogleのGmailに送信できるようにしているのですが、Gmailをメールサーバーにする設定がよく分かりません。 いろいろサイトを調べて「php.ini」内にある SMTP=localhostをsmtp.gmail.comに変更したのですが、メールを送信するとウイルス対策ソフトMcAfeeが出てきて 「プロトコルエラーのためメールが送信されませんでした」と出てしまいます。 どうすればgmailにちゃんと送信されるのでしょうか? 解決しなければいけない問題は3つだと思います。 1,Gmailの設定方法。 2,メールソフト(outlook,thunderbirdなど)の設定方法(現在この二つのメールソフトを使用しています)。 3、php.iniの設定 特に下記の部分。 [mail function] ; For Win32 only. SMTP = smtp... smtp_port = 25 ; For Win32 only. sendmail_from = :::::@example.jp もしお分かりになる方がいらっしゃいましたら、もしくは参考になるサイトをご存知の方がいらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • メールのタイトルについて

    ヤフーメールから(ある特定の人のみ)私の携帯(docomo)にタイトル空白のままでメールが来たとき、件名に(件名なし)と表示されています。 しかし私がヤフーメールでdocomo携帯に同じ条件(タイトル空白)で送信すると、その件名には無題と表示されます。 同じヤフーメールなのに(件名なし)と「無題」の表示の差は何ですか?

  • メールが送信

    宛先: CC: BCC: 件名: 添付: [ファイルを添付] [HTMLメールで作成] 本文: 送信した内容を送信箱に残す CCとBCCには何を入力するんですか?

  • Thunder bird HTMLメール送信不可

    お世話になります。 ・CC Cleaner使用により、誤ってThunderbirdの設定を消してしまいました。 ・何とか再設定しなおして、Thunderbirdが使用できるようになりましたが、  メール作成の際、HTML形式で画像を貼り付けたメールを送信しても  受信側と送信済みメールは「貼り付けた画像が添付ファイルの状態」になってしまう  問題が発生しました。 ・ネットで情報を見て、色々解決方法をトライしてみましたが  駄目でした。。。。 ・アカウント設定の「編集と入力」にもHTML形式にチェックを入れております。 ・不思議なのが、同じくThunderbirdに入れてある他のGmailアドレスは  問題なくHTML形式にて画像貼り付けメールの送信が可能なのですが、  会社のアドレスのみが画像貼り付けメール送信できません。 (作成は可能ですが、送信すると添付ファイルになってしまう) ・また、開封確認設定をしているのですが、  これも会社のメールアドレスだけが形成されません。  (Gmailは開封確認形成されます。) 大変恐れ入りますが、解決策をアドバイス頂きたく よろしくお願い申し上げます。m(__)m

  • メール送信の証拠(?)

    私はgmailをよく使っています。 メールを誰かに送信すると、添付ファイル含めて「送信済み」フォルダに残ります。 これにより「この本文とその添付ファイルの中身」を相手に送信したという記録がのこったと理解して大丈夫なのでしょうか。 それとも、別にそんなことはないのでしょうか。 本文とその添付ファイル送信の証拠と言うと大げさですが、 メールってそういうことを保証してくれているのでしょうか。

    • ベストアンサー
    • Gmail
  • メール送信プログラムについて

    お世話になっております。 現在、メール送信プログラムを作成しております。 下記のプログラム内に、「BCC」の部分を追加したいと思いますが、 perseエラーが発生してどうにもうまくいきません。 どなたか、ご教授のほどよろしくお願いします。 $title2 = "=?iso-2022-jp?B?".base64_encode($title)."?="; $naiyou2 = "お名前:$name\n メールアドレスfrom:$from\n メールアドレスto:$to\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mail($to, $title2, $naiyou2, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } 下記の場合なら、問題なくBCCメールが送信されるのですが。。 <?php $headers = "Bcc: aiai@ueo.jp\r\n"; mail("okaoka@ueo.jp", "My Subject", "Line 1\nLine 2\nLine 3", "$headers"); ?>

    • ベストアンサー
    • PHP
  • PHPメールフォームから添付ファイルが送信できない

    お世話になります ─────────────────────────────── 「PHP 添付ファイルを送信できるメールフォームを作成しました。」 http://web-dev.xyz/php-originalmailform/ ─────────────────────────────── 上記のページよりダウンロードして、 当方のホームページのhtmlに埋め込んで、 本文やラジオボタンの送受信は出来るのですが、 添付ファイルの送受信が出来ません。 ─────────────────────────────── 初期設定のままでは送受信することが出来ないのでしょうか。 Gmailのアカウントを2つ持っていて両方とも試しましたが、 やはり添付ファイルの送受信だけが出来ませんでした。 ご確認のほどよろしくお願いします

    • ベストアンサー
    • PHP
  • phpでメール送信ができなくなりました

    phpを使って数日までWeb上でメールの送受信を行うプログラムを作成し使用していたのですが、昨日からメールが送信されず、タイムアウトのような現象が起きました。 原因が思いつきません。 よろしくお願いします。 動作環境:Apache2.0.54+PHP4.4.2+WindowsXP

    • 締切済み
    • PHP
  • メール送信で添付の誤送信を防ぎたい

    希望はタイトルの通りですが、全くいい案が浮かばなかったので、何か特別なソフトなど使わず、プログラムなどを組んでできないかと思い、投稿させていただきました。 とは言ってもプログラミングは初心者ですが、。 私の今の段取りは下記の通りです。 1、アクセスで作成したレポートをPDFに印刷する。(このとき、ファイル名を自分でつける) 2、ファイルの種類’メール’(.eml) で、メール本文のひな型を作成しているので、それぞれのひな型を選び、作成した複数のファイルを添付して送信する。 この流れなのですが、ひな型を用意しているため、おおよその過ちは防げるのですが、1の際、ファイル名は、送信先のメーカー名なのですが、たとえばここで間違えれば2の操作の際も危ういですし、 2の操作のときも、もし選択するひな型を選べば、間違って送信する、ということが十分ありえます。 一番いいのは、メールのタイトルにメーカー名を入れるので、それが添付ファイル(こちらもメーカー名が入りますから)と一致したときのみ送信される、ということですが、それはなんだかむずかしすぎるかもしれません。 ということで、そこまでできなくとも、少し何か誤操作を防げるような案がありましたら何卒お願いいたします。この、1の操作のPDFで印刷する(ファイル名をつける)というときに、自分でつける名前でなく、レポートの1部分から名前をとる、など、できれば一番いいのですが。。 空想ばかりで申し訳ありませんが、もし何かあればお願いいたします。

  • 添付ファイル付きのメールが送信できません

    こんにちは。 タイトルのとおりなのですが、Wordでつくった文書を添付ファイルとしてメールで送信しようとしてもできません。 操作としましては、「メールの作成」→(本文を書く)→「ファイルの添付」→ (画面が変わって) →「参照」→(Wordのファイルを選択)→「開く」→「ファイルを添付」→「終了」→ (画面が変わって) → 「送信」。 これで送信できたと思ったところ、次のような説明が出てしまいます。 「問題が発生しました。添付ファイルに問題が発生しました。添付ファイルをすべて削除して、再度添付してください。」 その後何度トライしても同じで、いまだにメールが送信できません。 送信できるファイルは5つまで,容量は20MBまでとなっていますが、送ろうとしているファイルは1つで、KB単位なので十分余裕があると思うのですが。 どうしたらよいか教えてください。 よろしくお願いします。