CGI-BBS > CGI > Perl > フォームメール フリーメールアドレス禁止について


カレッヂ
カレッヂ


質問者 かずき  投稿日 7/17(火) 23:29:54

FORM to MAIL v1.15 と WebFORM v4.0 is Free. を利用しています。
このフォームメールのCGIですが、HTMLで”送信者メールアドレス”を
入力する欄を作りましたが、フリーメールアドレスの場合は、
イタズラでの送信を防止するため送信を拒否したいと思います。
たとえば、アットマーク(@)より後ろの部分が以下の場合
@mail.goo.ne.jp
@yahoo.co.jp
@excite.co.jp
@mail1.mail.com
@mail2.mail.com
の場合には「このメールアドレスでは送信できません」という
ように設定したいのです。

このような場合はそれぞれ(FORM to MAIL v1.15 と WebFORM v4.0 is Free. )
どのように、CGIスプリクトを書き加えればよろしいのでしょうか。


アドバイスお願いします。
回答者  [削除]  投稿日 7/21(土) 11:21:51
えーと、スクリプトを見てないのでよく分かりませんが(w
データ送信のあたりに、
if ($mymail =~ /@yahoo.co.jp/ or $mymail =~ /@goo.co.jp/ ){
みたいにしてエラーページを出せば良いと思います。
分かり難くてすみません。。
回答者  [削除]  投稿日 7/21(土) 16:36:04
えっと、そのスクリプトは何処にあるのでしょうか?
スクリプトを見ないと詳しくいことが分かりません。
エラーのサブルーチンとかも分かりませんし。
とにかくスクリプトが何処にあるかを教えて下さい。
回答者  [削除]  投稿日 7/21(土) 17:11:07
なんかうちの環境ではDLしても改行が化けててが分からなくなってます。
ですから詳しく行数は言えませんが、
入力漏れチェックのあとに、
if ($email =~ /(@mail.goo.ne.jp|@yahoo.co.jp|@excite.co.jp|@mail1.mail.com|@mail2.mail.com)/i){
&error('設定ミス','フリーメールアドレスは使えません.');
}
で行けると思います。
詳しくはちゃんとDLできた人に聞いて下さい・・・・
すんませんです。
回答者  [削除]  投稿日 7/21(土) 17:49:21
多分、
if ($email....................)の$emailの部分か、&errorをその
CGIで使っているものに書き換えればOKです。

サブドメインについては、
if ($email =~ /(test.com|.......)/i){
&error('設定ミス','フリーメールアドレスは使えません.');
}
としてやればOKです。
但しこの場合、
mail@cgi.test.commail@test.comunicater.ne.jp
等でも引っかかるのでご注意下さい。
純粋にxxx@xxx.test.comだけかけたいのであれば
if ($email =~ /(.*test.com|.......)/i){
&error('設定ミス','フリーメールアドレスは使えません.');
}
で多分OKだと思います(違ってるかも)
回答者  [削除]  投稿日 7/21(土) 18:08:50
要するに、
そのスクリプトではメールアドレスが格納されている変数が
$emailではないと思うんです。
ですから、そこをそのスクリプトに合うように変えてやれば良いです。
エラーメッセージのサブルーチン&errorについても
同じ事が言えます。

やっぱり分かり難いですね(^^;;
回答者  [削除]  投稿日 7/21(土) 21:47:42
例文といっても書き用がありません(^^;;
なにしろ使われている変数とサブルーチンの名前が分からないんですから。

携帯の場合、*にすると
jp-abcdefg.ne.jpでも引っかかりますので、
$email=~ /(jp-.ne.jp)/i で良いと思いますよ。(.は任意の1文字の意)
回答者 しあわせのツボ  [削除]  投稿日 7/22(日) 00:17:07
$email =~ /(jp-.\.ne\.jp)/i
が正しいでしょう。
元の表記ではjp-とneの間にある「ピリオドという文字」がないことになっています。
ついでに、任意の1文字を表す「.」と文字ピリオドを表す「\.」は意識して区別しないといけませんね。
回答者 しあわせのツボ  [削除]  投稿日 7/22(日) 01:03:08
先に述べた通り、「.」だけだと任意の1文字、「\.」とすると文字ピリオドを表します。
ピリオドも「何か1文字」の何かにあたるので実用上は問題ないかもしれませんが、たとえばyahooxcoyjp.comのようなアドレスがあった場合、それにもヒットしてしまいます。
\.とすればピリオドにしかヒットしないので、より確実でしょう。

正規表現中の改行ですが、改行してしまうとその改行コードもパターンの一部と認識されてしまうと思いますので、改行はしない方が安全です。
長くなるのが嫌だということなら、処理自体を分割してしまってはどうでしょう。
if ($email =~ /(@aaa\.co\.jp$|@bbb\.co\.jp$)/i){ &error; }
if ($email =~ /(@ccc\.com$|@ddd\.net$)/i){ &error; }
のように。
回答者 しあわせのツボ  [削除]  投稿日 7/22(日) 02:02:55
その記述ではエラーになりますね。
if ($email =~ /(@aaa\.co\.jp$|@bbb\.co\.jp$)/i){ &error('設定ミス','フリーメールアドレスは使えません.'); }
if ($email =~ /(@ccc\.com$|@ddd\.net$)/i){ &error('設定ミス','フリーメールアドレスは使えません.'); }
のようにして下さい。

返信(回答)する


Web裏技