SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
メールフォー
ムの話
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 フィールドは書き換えが可能です。

Contenu connexe

Plus de だいすけ ふるかわ

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

Plus de だいすけ ふるかわ (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
 

Dernier

2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 

Dernier (11)

2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 

メールフォームを作る