SlideShare una empresa de Scribd logo
1 de 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 フィールドは書き換えが可能です。

Más contenido relacionado

Más de だいすけ ふるかわ

LibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考えるLibraHack後の スクレイピングを 考える
LibraHack後の スクレイピングを 考える
だいすけ ふるかわ
 
プログラマがデザインをがんばってみた
プログラマがデザインをがんばってみたプログラマがデザインをがんばってみた
プログラマがデザインをがんばってみた
だいすけ ふるかわ
 

Más 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
 

Último

Último (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

メールフォームを作る