カレッヂ |
質問者 かずき
投稿日 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.comやmail@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裏技 |