SlideShare a Scribd company logo
1 of 41
メールフォー
ムの話
Daisuke Furukawa
http://mogya.com
いきなり
CM
リニューアルしまし
Designed by ケーカさ
ん
Webteko から生まれ
た
コラボレーション!
もひとつ
CM
最近お仕事で作った
自然派化粧品のサイ
shop-pro.jp と WEB が
シームレスに連携
ところで。
メール
フォーム
企業向けサイト
で
たいてい
必要になる機能
PHP で
つくってみた。
1時間くら
特徴
•複数フォーム対
応
•項目変更可能
sendmail.php
呼び出し側
( フォームのソー
ス )
<form name="mailform" method="post" action="/sendmail.php">
お名前 : (必須) <br />
<input type="text" size="50" name="001_Name" />
<br />
メールアドレス : (必須) <br />
<input type="text" size="50" name="002_EMAIL" id="email_input" />
<span id="mail_error_msg" class="warn_text"></span>
<br />
ホームページ :( お持ちであれば )<br />
<input type="text" size="50" name="003_HPAGE" />
<br />
電話番号 :( 任意 )<br />
<input type="text" size="50" name="004_PHONE" />
<br />
メッセージ : (できるだけ具体的にお書きください。) <br />
<textarea cols="50" rows="8" name="005_MESSAGE"></textarea>
<br /><br />
   <input type="submit" value="  送信する  " />
   <input type="reset" value="  取消  " />
</form>
受け取るメール
メールフォームからお問い合わせがありました
----:
001_Name:
古川大輔
002_EMAIL:
mogya@mogya.com
003_HPAGE:
http://mogya.com
004_PHONE:
090xxxxxxx
005_MESSAGE:
  3000 万円でブログを作ってほしいです。
----
送信時刻: 2008-11-26 18:21:48
送信元 URL : http://mogya.com/contact/
IP アドレス: 61.192.161.146
CGI の名前: /sendmail.php
ブラウザ: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-JP-mac; rv:1.8.1.18)
Gecko/20081029 Firefox/2.0.0.18
入力内容
そのほか
作ってみる
ポイント1
mb_send_mail($to,$subject,$body,$header);
メールの送信
ポイント2
文字コードにつ
いて
jis
 メールで使う文字コード
Shift-jis
  Windows/Mac でよく使われている文字コー
ド。
EUC
  Unix/Linux で使われている文字コード
。
utf8
  Unicode で使う文字コード。
使い分けを誤ると、文字化けを起こします。
てけとーに拾ってきた
CGI
(EUC で書かれている
or EUC のホームページ
を前提としている )
ホームペー
ジ
Shift-JIS 。
文字化け!(jis)
$text = mb_convert_encoding(" 文字列 ", "utf-8",'Shift-JIS ')
文字コードの変換
変換後 変換前
プログラムのお送信 仕事
•送信用の文章を用意する
•文字コードを jis に変換
•送信
•ありがとうございました
ってみた。作
約 60 行 /40steps
スクリプトの
ソース1
$to_addr="mogya+fromweb@mogya.com";
$from_addr="mogya@mogya.com";
$from_title="mogya.com メールフォーム ";
$subject="mogya.com メールフォーム ";
設定
ob_start();
foreach($_REQUEST as $key=>$value){
if (ereg("[0-9][0-9][0-9]_.*",$key)) {
# $value_utf8 = mb_convert_encoding($value, "utf-8","Shift-JIS");
$value_utf8 = $value;
print $key.":n";
print "   ".ereg_replace("rn","n   ",$value_utf8)."n";
if ( (true==$emptyMail)&&(strlen($value)>0) ){
$emptyMail=false;
}
}
}
$var_str = ob_get_contents();
ob_end_clean();
#print $var_str;
数字三桁で始まる
フィールドだけ拾う
文字コードをそろえる ( 重要! )
フィールドの値を拾う
フィールドの入力のうち、
ob_start();
foreach($_REQUEST as $key=>$value){
if (ereg("[0-9][0-9][0-9]_.*",$key)) {
# $value_utf8 = mb_convert_encoding($value, "utf-8","Shift-JIS");
$value_utf8 = $value;
print $key.":n";
print "   ".ereg_replace("rn","n   ",$value_utf8)."n";
if ( (true==$emptyMail)&&(strlen($value)>0) ){
$emptyMail=false;
}
}
}
$var_str = ob_get_contents();
ob_end_clean();
#print $var_str;
文章を組み立てる
フィールドの値を拾う
$mailtime = date("Y-m-d H:i:s");
$debug_str = <<<EOT
----
 送信時刻: {$mailtime}
 送信元 URL : {$_SERVER['HTTP_REFERER']}
  IP アドレス: {$_SERVER['REMOTE_ADDR']}
  CGI の名前: {$_SERVER['SCRIPT_FILENAME']}
 ブラウザ: {$_SERVER['HTTP_USER_AGENT']}
EOT;
$to=$to_addr;
$header = "From: {$from_title} <{$from_addr}>n";
$body= mb_convert_encoding(" メールフォームからお問い合わせがありまし
た n----:n", "ISO-2022-JP",'utf-8')
.mb_convert_encoding($var_str, "ISO-2022-JP",'auto')
.mb_convert_encoding($debug_str, "ISO-2022-JP",'utf-8')
;
文章の準備
ユーザーの情報とかデバッグ用の情
報とか。
$mailtime = date("Y-m-d H:i:s");
$debug_str = <<<EOT
---
 送信時刻: {$mailtime}
 送信元 URL : {$_SERVER['HTTP_REFERER']}
  IP アドレス: {$_SERVER['REMOTE_ADDR']}
  CGI の名前: {$_SERVER['SCRIPT_FILENAME']}
 ブラウザ: {$_SERVER['HTTP_USER_AGENT']}
EOT;
$to=$to_addr;
$header = "From: {$from_title} <{$from_addr}>n";
$body= mb_convert_encoding(" メールフォームからお問い合わせがありまし
た n----:n", "ISO-2022-JP",'utf-8')
.mb_convert_encoding($var_str, "ISO-2022-JP",'auto')
.mb_convert_encoding($debug_str, "ISO-2022-JP",'utf-8')
;
文章の準備
全部結合& jis に変換
if ($emptyMail){
}else{
mb_send_mail($to,$subject,$body,$header);
}
メールの送信
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: /thanks" );
exit;
ありがとうございましたペー
ジ
注意
<form name="mailform" method="post" action="/sendmail.php">
<!-- メール送信先 -->
<input type="hidden" name="mailto" value="mogya@mogya.com" />
お名前 : (必須) <br />
<input type="text" size="50" name="001_Name" />
<br />
:
こういう改造をしない
hidden フィールドは書き換えが可能です。

More Related Content

More from だいすけ ふるかわ

スタートアップツールチラ見せナイト エニタイムズ
スタートアップツールチラ見せナイト エニタイムズスタートアップツールチラ見せナイト エニタイムズ
スタートアップツールチラ見せナイト エニタイムズだいすけ ふるかわ
 
LibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考えるLibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考えるだいすけ ふるかわ
 
Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010だいすけ ふるかわ
 
HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションだいすけ ふるかわ
 
プログラマがデザインをがんばってみた
プログラマがデザインをがんばってみたプログラマがデザインをがんばってみた
プログラマがデザインをがんばってみただいすけ ふるかわ
 

More from だいすけ ふるかわ (19)

スタートアップツールチラ見せナイト エニタイムズ
スタートアップツールチラ見せナイト エニタイムズスタートアップツールチラ見せナイト エニタイムズ
スタートアップツールチラ見せナイト エニタイムズ
 
FireFoxによるWebデザイン
FireFoxによるWebデザインFireFoxによるWebデザイン
FireFoxによるWebデザイン
 
Ti.developers.meeting
Ti.developers.meetingTi.developers.meeting
Ti.developers.meeting
 
Titanium mobile
Titanium mobileTitanium mobile
Titanium mobile
 
LibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考えるLibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考える
 
実践スクレイピング
実践スクレイピング実践スクレイピング
実践スクレイピング
 
Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010
 
HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーション
 
Webteko#10 GoogleMaps
Webteko#10 GoogleMapsWebteko#10 GoogleMaps
Webteko#10 GoogleMaps
 
すまべん20091114
すまべん20091114すまべん20091114
すまべん20091114
 
Webteko 20090925
Webteko 20090925Webteko 20090925
Webteko 20090925
 
プログラマがデザインをがんばってみた
プログラマがデザインをがんばってみたプログラマがデザインをがんばってみた
プログラマがデザインをがんばってみた
 
Amazon S3 Ec2
Amazon S3 Ec2Amazon S3 Ec2
Amazon S3 Ec2
 
Java Script入門
Java Script入門Java Script入門
Java Script入門
 
メイドめーる
メイドめーるメイドめーる
メイドめーる
 
メイドめーる
メイドめーるメイドめーる
メイドめーる
 
Iepngfix
IepngfixIepngfix
Iepngfix
 
ememo_plesentation_2008-02-26
ememo_plesentation_2008-02-26ememo_plesentation_2008-02-26
ememo_plesentation_2008-02-26
 
Human Date20070907
Human Date20070907Human Date20070907
Human Date20070907
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

メールフォームを作る