フォームから受け取ったメールアドレスが、正しいかどうかをチェックする方法について教えてください。
フォームから受け取ったアドレスが****@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で質問しましょう!
似たような質問が見つかりました
- Gmail gmail から docomo メールに送信できません 4 2022/06/25 00:41
- Yahoo!メール PS4の事で質問です メールアドレスを変更の際、受信出来ず困ってます 私は今までPS4のアドレスはP 1 2022/07/28 17:06
- その他(メールソフト・メールサービス) 大阪市プレミアム付き商品券のweb申し込みで楽天モバイルのEメールだと返信メールが届かない 2 2022/09/19 17:08
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- その他(メールソフト・メールサービス) ドメイン間違えでエラー送信メールが来ない 1 2022/05/10 18:44
- その他(メールソフト・メールサービス) PCでメールは発信について 6 2022/08/13 09:23
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Outlook(アウトルック) 標準アカウントをOUTLOOKアプリに登録するとほかのアカウントのメールもこのアドレスに受信される 1 2023/02/03 20:34
- Gmail Gメールが送れません。何故でしょうか? 5 2023/06/14 20:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お問い合わせフォームから送信...
-
VB.NETからGmail経由でメールを...
-
Googleフォームを回答したか確...
-
フォームを再送信しますか?
-
WriteFileで送信できたかの確認...
-
Accessでメール一括送信ソフ...
-
メールアドレスが正しいかどう...
-
Safariで「本当にこのフォーム...
-
メールフォームの受信先にg-m...
-
ビジネスメールの敬称
-
テキストボックスの番号を使っ...
-
数字以外の入力をエラーにする...
-
DATE型変数を初期化する方法
-
初歩的な事だと思います。 Sub...
-
エクセルVBA テキストボックス...
-
EXCEL VBA で指定した範囲に入...
-
入力フォームの値をQRコードで...
-
VBA R1C1形式で変数の入力について
-
Excel-VBAでInputBox+Pulldown...
-
ヤフージャパンへの問合せ 「次...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お問い合わせフォームから送信...
-
フォームを再送信しますか?
-
Safariで「本当にこのフォーム...
-
Googleフォームを回答したか確...
-
ACCESSから、メール送信を行い...
-
VB6で、Bsmtp.dllを使って、メ...
-
ソケットで通信するデータの帯...
-
ホームページビルダーのメール...
-
VBA EasyCommでの送信
-
Accessでメール一括送信ソフ...
-
c# メールが送信できたか確認
-
SendmailでHTML形式のメールを...
-
BASP21のSendMailとSendMailEx...
-
CGIでメールのReturn-Pathに値...
-
HP の問い合わせフォームのつく...
-
空メールを送信するフォームCGI
-
アンケート用紙での回答ができない
-
送信字数制限の無いフォームCGI...
-
sendmailでの複数メールアドレ...
-
safariの 「本当にもう一度フ...
おすすめ情報