PHPでメールフォーム作成:差出人のアドレスを任意に指定する方法

このQ&Aのポイント
  • PHPを使って作成したメールフォームで、差出人のアドレスを任意のものにする方法を紹介します。
  • 初心者でも簡単に実装できる方法を解説します。
  • 差出人のアドレスを変更することで、送信元を自由に設定することができます。
回答を見る
  • ベストアンサー

メールフォームの差出人を任意のアドレス表示に

PHPでメールフォーム作ったのですが、差出人のアドレスを任意のものにしたいのです。 PHPは先月から始めた超初心者です。 いろいろな質問掲示板を参照にやっては見るのですが、出来ません。 //メール送信部分 mb_language("ja"); mb_internal_encoding("Shift-JIS"); $mailfr = "From:xxxx@oooo.oo"; $to = "aaa@dd.bn"; $subject = "タイトル"; $thanks = "コメント"; $headers = mb_convert_encoding($thanks, "SJIS","EUC-JP"); $message .= mb_convert_encoding($chuumonnaiyou, "SJIS","EUC-JP"); $message .= "\n\n"; $subject2 = "タイトル"; $thanks2 = "お礼メッセージ"; $headers2 = mb_convert_encoding($thanks2, "SJIS","EUC-JP"); $message .= "\n\n"; $message .= $copyright; mail($to, $subject, $message, $headers, $mailfr); ←上記に設定したメールアドレスに届く内容。 mail($email1, $subject2, $message, $headers2, $mailfr); ←フォームを利用して送ってくれた方への内容。 これも合っているのかわからないのですが、メールを送信も出来るし、受信も出来ています。 文字化けを起こしていたので、現在の型になりました。 (文字化けは、こちらの掲示板を利用して何とか解決しました。) もしかして、すごく簡単な質問なのかも知れませんが、調べては試しての繰り返しをしているのですがなかなか出来なくて困っています。 ぜひ、ご教授お願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

mail($email1, $subject2, $message, $headers2, $mailfr); これがフォームを利用して送ってくれた人へのメールであれば、 mail($to, $subject, $message, $headers, $mailfr); を mail($to, $subject, $message, $headers, "From:".$email1); に変更することでいけると思います

same_orz
質問者

お礼

"From:".$email1 ここの命令を間違えて認識してました。 こういうやり方もあるんだ!と、とても勉強になりました。 ありがとうございました。

same_orz
質問者

補足

何かが間違っているかもしれないので、再度チャレンジします。

その他の回答 (1)

  • nikuq
  • ベストアンサー率22% (8/36)
回答No.2

まず、メール送信時の文字コードは『ISO-2022-JP』ではなく、『ISO-2022-JP』です。 そして、文字コードの設定はメールヘッダ内で設定します。 このメールヘッダ内でメール送信者のメルアド(from)の設定も出来ます。 私は下記のフォーマットをヘッダで使っています。 $header = ""; $header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; $header .= "from: ${user_mail}"; このヘッダをそのままコピペで使っても大丈夫ですが、最後のfromは環境に合わせて変えてください。 そして、メール送信の関数『mail』ですが、これも2バイト文字のメールを送信するなら、 『mb_send_mail』を使って下さい。でも、この関数はサーバの設定によっては使えない可能性もありますが・・・(-_-;) 送信フォームで使用しているフォーマットは下記の通りです。 //管理者用のメール設定 //ヘッダの設定 $hoge_header = ""; $hoge_header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $hoge_header .= "Content-Transfer-Encoding: 7bit\n"; $hoge_header .= "from: ${user_mail}"; //送信先メアドの設定 $hoge_mail = "${hoge_mail}"; //メールタイトルの設定 $hoge_subject = "\nこのメールはフォーム管理者に向けて送信しています"; //メール本文の設定 $hoge_body = "これはフォーム管理者に向けて送信しています。\n"; $hoge_body .= "まちがっても利用者に送らないようにしましょう"; //利用者用のメール設定 //ヘッダの設定 $user_header = ""; $user_header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $user_header .= "Content-Transfer-Encoding: 7bit\n"; $user_header .= "from: ${hoge_mail}"; //送信先メアドの設定 $user_mail = "${user_mail}"; //メールタイトルの設定 $user_subject = "\nこのメールは利用者に向けて送信しています"; //メール本文の設定 $user_body = "これは利用者に向けて送信しています。\n"; $user_body .= "ユーザに洩れたらまずい情報は\n"; $user_body .= "送信しないように気をつけましょう"; //メール言語の選択 mb_language("Japanese"); //管理者用メールの送信設定 mb_send_mail("${hoge_mail}","${hoge_subject}","${hoge_body}","${hoge_header}"); //クライアント用メールの送信設定 mb_send_mail("${user_mail}","${user_subject}","${user_body}","${user_header}"); ・・・と、この様に設定して送っています。 ご参考になれば幸いです。。。 参考URLはPHPのマニュアルにあるmb_send_mailの項目です。

参考URL:
http://php.s3.to/man/function.mb-send-mail.html
same_orz
質問者

お礼

$header .= "from: ${user_mail}"; の命令を勘違いしていたようで、指示ミスで表示されませんでした。 見直した結果、しっかり思うとおりの表示が出来ました! ありがとうございました。 これを機会に、もっと勉強したいと思います。

same_orz
質問者

補足

> まず、メール送信時の文字コードは『ISO-2022-JP』ではなく、『ISO-2022-JP』です。 『ISO-2022-JP』と『ISO-2022-JP』は違うのでしょうか??? どういう意味かちょっと分からず、申し訳ないです。 上記のことを踏まえてやってみましたが、何かが違うようで… もう一度見直します。 参考URLの内容もしっかり確認したいと思います。

関連するQ&A

  • mb_send_mailの2重投稿を防止したい

    初めて質問させていただきます。 動作環境はPHP4.3.0になります。 <? $to = "test@test.com"; $subject = "テスト"; $addheader = "From: $_POST[mail]\n"; $msg = "*************"; $to = mb_convert_encoding($to, "SJIS", "EUC-JP"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $msg = mb_convert_encoding($msg, "SJIS", "EUC-JP"); $addheader = mb_convert_encoding($addheader, "SJIS", "EUC-JP"); mb_language("Ja"); mb_internal_encoding("SJIS"); mb_send_mail($to, $subject, $msg, $addheader); setcookie("formdata", $posted , time()-1200); }; ?> 上記の用に記述をして、メールが届くのは確認をしたのですがなぜか9割位の確立でメールが二通届きます。 mb_send_mailの前後にecho分で文字を表示させたのですが、ループしている気配もありません。 どなたかこの現象を回避できる方法をお知りでしたらご教授下さい。 何卒、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • フォームメールの文字化け

    こんにちは。 フォームメールで携帯宛にメールを送ると、docomoの件名だけが文字化けします。 途中までは正常な表示で、後半文字化けしたり要らない文字が最後に入ったりという状態です。 au、softbankやPC宛には正常に送れているのですが… エンコーディングは↓こんな感じです mb_language("Japanese"); mb_internal_encoding("EUC-JP"); $subject = mb_convert_encoding($subject,"JIS", "EUC-JP"); 考えられる原因や解決方法などありましたら 教えて下さい。 よろしくお願いします。

    • 締切済み
    • PHP
  • 自作メールフォームから送信するとメール内容がおかしくなる。

    ※PHP初心者なので、お手柔らかにお願いします。 自作メールフォームからメール送信すると、メールは送れるのですがメールの内容がおかしくなります。 現状は、件名のみ正しく表示され、差出人と本文の内容が空になります。 いろいろなサイトを見て試してみたのですが、どれも同じ結果で何が間違っているのかよくわからず困ってます。 メールの設定として下記を、 mb_language("Japanese"); mb_internal_encoding ("SJIS"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $MailTo = "送付先メールアドレス"; メール送信事態は下記ソースの通りです。 // エンコードして文字列を作成 $Name = mb_convert_encoding($Name, 'JIS', 'auto'); $Header = "From:" .mb_encode_mimeheader($Name). "<" .$Mail. ">\n"; $Subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding("お問い合わせ", 'JIS', 'auto')). "?="; $Message = mb_convert_encoding($Message, "JIS", "auto"); // メール送信処理 $Ret = mb_send_mail($MailTo, $Subject, $Message, $Header);

    • ベストアンサー
    • PHP
  • PHPから携帯へメール送信

    いつもお世話になっております。 PHPから携帯電話へ"絵文字付き"でメールを送るプログラムを作成している のですが、『base64_encode』等を使用して絵文字の表示までは行う事がで きました。 ですが、本文が途中で途切れてしまうのです・・・。 PHP側は、 $to = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), 'SJIS', 'ISO-2022-JP'); $subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), 'SJIS', 'ISO-2022-JP'); (省略)  ・  ・ $body = $structure->body; $body = preg_replace('/\s*>\s.*/', '', $body); $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); //---------------------------------- // base64_encode //---------------------------------- $subject = "=?shift_jis?B?" . base64_encode($subject) . "?="; $body = base64_encode($body); //---------------------------------- // ヘッダを作成 //---------------------------------- $headers = "From: test@mail.com\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=Shift-JIS\n"; $headers .= "Content-Transfer-Encoding: base64"; //---------------------------------- // メール送信 //---------------------------------- $res = mail($to, $subject, $body, $headers);  ・  ・ (省略) 上記のように記述しています。 メールは送れます。絵文字も表示されます。ですが、本文が途中で途切れ てしまいます。 どなたかご教授をお願い致します。

    • ベストアンサー
    • PHP
  • mb_send_mailで文字化け

    Windows環境でmb_send_mailを使い、メール送信のテスト を行っています。 文字コードの変換周りで、いろいろ試しているのですが、 うまくいきません。 Apache + PHP (Window)  ↓ メールサーバー(RedHat)  ↓ メール受信(Window) 上記の環境で、文字化けしないで、 メール送信するには、どうしたら良いのでしょうか? (コーディング例) mb_send_mail( $address, mb_convert_encoding($subject,"EUC-JP"), mb_convert_encoding($message,"SJIS"))

    • 締切済み
    • PHP
  • PHPでフォームメール

    いつも適切なご回答誠にありがとうございます。PHP初心者で参考書やnetを頼りに制作している者です。現在フォームを作成していて確認メールでの質問です。送信者宛てには上手く送信されるのですが、管理者宛のメールの件名と送信者がうまく表示されません。どなたかお助けください。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="資料請求がございました"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); $other = stripslashes($other); $from="${name01}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; $s_msg="以下の内容で資料請求がありました。資料発送の手配をお願いします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name01} ■電話番号:${tel} ■E-メール:${e_mail} ■ご意見・ご要望:\n\n${other}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ${d_site}|資料請求フォーム\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); $sendto = "$d_recipient"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

    • ベストアンサー
    • PHP
  • メールのFromに半角ピリオドが入るとエラーが・・・

    PEARのメール送信について教えてください。 現在PEARのMailと、mime.phpを使用してメール送信をするプログラムを組んでいるのですが、エンコードの仕方が悪いのかメールのFromに半角ピリオド、半角カンマなどが入るとエラーが出てしまいます。 以下がそのコードの主要部分ですが、対応策がありましたらご教授ください。よろしくお願いいたします。 --------------------------------------------------------- //ヘッダーのFromエンコード(問題の部分?) $headers['From'] = mb_encode_mimeheader(mb_convert_encoding( $mail_from_name , "ISO-2022-JP", "EUC-JP"))."<".$mail_from.">"; $objMail =& Mail::factory('sendmail'); $original = mb_internal_encoding(); $headers['Subject'] = mb_convert_encoding( $sbj , "ISO-2022-JP" , "EUC-JP" ); mb_internal_encoding("ISO-2022-JP"); $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],"ISO-2022-JP"); mb_internal_encoding($original); $crlf = "\n"; $mime =& new Mail_mime($crlf); $mime->setHTMLBody($body); $build_param = array( "html_charset" => "EUC-JP", "text_charset" => "ISO-2022-JP", "head_charset" => "ISO-2022-JP", ); $body = $mime->get( $build_param ); $headers = $mime->headers($headers); $objMail =& Mail::factory('sendmail'); $result = $objMail->send( $mail_to , $headers , $body );

    • 締切済み
    • PHP
  • CSVダウンロードができません。

    PHP4とMySQL4.1.21で開発しています。 CSVダウンロードをしようと下記のように記述しましたが動きません。どこがおかしいでしょうか?教えてください。 print mb_convert_encoding("メールアドレス\n","SJIS","EUC-JP"); while ($Row = mysql_fetch_array($result, MYSQL_ASSOC)) { $mail=mb_convert_encoding($Row['mail'],"SJIS","EUC-JP"); print $vmem_mail."\"\n"; }

    • 締切済み
    • PHP
  • メールフォームが部分的に文字化けする

    お問い合わせメールフォームを作りました。 一部のお客様からのメールが部分的に文字化けします。 ========== E月E6日に宿泊させてぁEだきました� そE際E対応でどぁEても納得できなかった為メールしました� ========== メールフォーム自体は UTF-8 でエンコードしていて、メール送信の際に JIS にしています。 ========== <?php mb_language("Japanese"); mb_internal_encoding("utf-8"); [snip] $from_name = mb_convert_encoding($from_name, "JIS", "UTF-8"); $from_name = '=?ISO-2022-JP?B?'.base64_encode($from_name).'?='; $body = mb_convert_encoding($body, "JIS", "UTF-8"); [snip] $mail_true = @mb_send_mail($mailto, $subject, $body, $additional_headers); [snip]

    • ベストアンサー
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう