アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームから受け取ったメールアドレスが、正しいかどうかをチェックする方法について教えてください。

フォームから受け取ったアドレスが****@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で送信するときにエラーになるパターン」というようなものがあるのでしょうか?
エラーになる前に、メールアドレスが、正しくないという警告を出したいのですが、可能でしょうか?
現在は、メールアドレスに「半角英数と@以外が含まれている」か「@が含まれていない」と警告するようにしています。

A 回答 (2件)

メールアドレスの正規表現に関しては下記のサイトを参考にされてはいかがでしょう。



http://www.din.or.jp/~ohzaki/perl.htm#Mail
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
早速見てみました。正直、私にはちょっとレベルが高すぎる感じですが、大変参考になりました。
漢字コードについても、S-JISで2バイトめに5Cを含む文字の問題は理解していましたが、40(半角@)については知りませんでした。sendmailで全角スペースを含む文字列を扱うとエラーになることがあって、ずっと疑問に思っていましたが氷解しました。
メールに関しては、いろいろと複雑なことになっているんだなということはよくわかりました(^_^;)
メールアドレスのチェック自体は今の私にはちょっと手におえない感じなので、今後の課題にして、とりあえずsendmailでエラーが出たときの対策について別途質問したいと思います。

お礼日時:2004/10/29 02:24

言語はなんでしょうか・・・? 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つの違いを知りたいのですが。

補足日時:2004/10/19 01:22
    • good
    • 0
この回答へのお礼

説明不足の質問に早速のご回答ありがとうございます。
> どんなパターンでのチェックをお望みなのか…
どんなパターンでチェックすればいいのかが分からないので質問させていただきました(^_^;)

お礼日時:2004/10/19 01:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!