
フォームから受け取ったメールアドレスが、正しいかどうかをチェックする方法について教えてください。
フォームから受け取ったアドレスが****@vodafone.ne.jpと誤記入されていたため、このアドレス宛にsendmailで送信しようとしたらエラー(Internal Server Error)になりました。(正しくは****@x.vodafone.ne.jp)
「存在しないメールアドレス」の場合は、送信後にuser unknownかhost unknownとしてUndeliveredになりますが、上記の場合、送信そのものができなかったようです。
aaaaaaaa@bbb.******.ne.jp、
aaaaaaaa@******.ne.jp
で試してみたところ、同様にエラーになり、
aaaaaaaa@***.ne.jp
では送信できました(当然Undeliveredになりましたが)。
「sendmailで送信するときにエラーになるパターン」というようなものがあるのでしょうか?
エラーになる前に、メールアドレスが、正しくないという警告を出したいのですが、可能でしょうか?
現在は、メールアドレスに「半角英数と@以外が含まれている」か「@が含まれていない」と警告するようにしています。

No.2ベストアンサー
- 回答日時:
アドバイスありがとうございます。
早速見てみました。正直、私にはちょっとレベルが高すぎる感じですが、大変参考になりました。
漢字コードについても、S-JISで2バイトめに5Cを含む文字の問題は理解していましたが、40(半角@)については知りませんでした。sendmailで全角スペースを含む文字列を扱うとエラーになることがあって、ずっと疑問に思っていましたが氷解しました。
メールに関しては、いろいろと複雑なことになっているんだなということはよくわかりました(^_^;)
メールアドレスのチェック自体は今の私にはちょっと手におえない感じなので、今後の課題にして、とりあえずsendmailでエラーが出たときの対策について別途質問したいと思います。
No.1
- 回答日時:
言語はなんでしょうか・・・? PerlでもPHPでも他の言語でも正規表現を使ってチェックすればよいとは思うのですが・・・。
仮にPerlなら、一般的に配布されているCGIのメールアドレスチェックの部分だけを応用する、という手もあると思います。
言語とどんなパターンでのチェックをお望みなのかがわかりませんので、ここで正規表現の例を示すのはやめておきます。
この回答への補足
すみません、Perlです。受け取ったアドレスを$emailとすると、
if (($email !~ /^[a-zA-Z0-9_\-+ \t\/@%!.]+$/) or ($email !~ /[@%!]/)){
(ここにエラー処理);
}
てなことをやっています。
「一般的に配布されているCGIのメールアドレスチェックの部分」というのはこれでしょうか?
aaaaaaaa@cccccc.ne.jp はsendmailでInternal Server Errorになり、
aaaaaaaa@ccc.ne.jp は送信できるというのが、何故なのか分からないのですが…。
先の例でいえば、ドメインの部分がx.vodafone.ne.jpであるべきところをvodafone.ne.jpで送信しようとすると、エラーになって送信そのものができません。
送信した後で、host unknownで不達になるメールはDNSサーバーからは何らかの応答があったために送信「できてしまう」ということでしうか?
sendmailで送信そのものができない場合はDNSサーバーから応答がないとか??
この2つの違いを知りたいのですが。
説明不足の質問に早速のご回答ありがとうございます。
> どんなパターンでのチェックをお望みなのか…
どんなパターンでチェックすればいいのかが分からないので質問させていただきました(^_^;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを再送信しますか?
-
お問い合わせフォームから送信...
-
フォームメールについて・・・...
-
Googleフォームを回答したか確...
-
ビジネスメールの敬称
-
初歩的な事だと思います。 Sub...
-
エクセルVBA テキストボックス...
-
MW WP Form 確認画面の遷移に...
-
htmlからbatファイルを起動する
-
エディットボックスの入力制限...
-
「イ分」・・・フンという文字...
-
VBAでInputBoxの再入力をさせる...
-
入力フォームの値をQRコードで...
-
テキストボックスの番号を使っ...
-
複数行の入力を受け取る方法
-
DataGridViewの桁数制限に関して
-
入力モードを自動的に半角カタ...
-
アルファベットGの小文字の入力
-
phpのsubmit処理について
-
アクセスのマクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォームを回答したか確...
-
お問い合わせフォームから送信...
-
フォームを再送信しますか?
-
VB6で、Bsmtp.dllを使って、メ...
-
safariの 「本当にもう一度フ...
-
ソケットで通信するデータの帯...
-
BASP21のSendMailとSendMailEx...
-
メルマガ配信のCGIの送信元アド...
-
VBAマクロを使ったメール送信に...
-
ホームページビルダーのメール...
-
sendmailの送信先アドレスを2...
-
SEO対策ってどうすればよろしい...
-
VBA メール一斉送信で添付ファ...
-
VBA EasyCommでの送信
-
VB.NET で
-
Safariで「本当にこのフォーム...
-
postmail(UTF-8)でメールが文字...
-
cgiであいまい検索(~を含む)
-
ACCESSから、メール送信を行い...
-
VB.NET(2005)の"SerialPort" ...
おすすめ情報