1

次の検証コードを使用して、Lotus Notes によって駆動される Web フォームで有効な電子メール アドレスの形式を確認しています。

@If((@ValidateInternetAddress([Address821]; @ThisValue)!="" 
| @Contains(@ThisValue; "\"") | @Contains(@ThisValue; "'") 
| @Contains(@ThisValue; " ")); "Please include a valid email address."; "");

現在、ユーザーが次の入力のいずれかを入力すると、検証でエラー メッセージがスローされます。

  • 空のフィールド
  • " "、'、または / 文字
  • メールのドメイン部分: 「test.com」
  • それだけ @

ただし、ユーザーがtest@testと入力すると、フォームはこれを有効な電子メール アドレス形式として検証します。

この形式は有効な「Address821」形式と見なされますか? または、フォームが有効な電子メール アドレスとして間違った形式を検証していますか?

4

1 に答える 1

1

はい、技術的には、過去と現在の両方の標準で有効なアドレス構文です。

RFCの言語は、時間の経過とともに進化してきました。

RFC-821:3.7。ドメイン

ドメインは、ARPAインターネットメールシステムで最近導入された概念です。ドメインを使用すると、アドレス空間が単純な文字列ホスト名のフラットなグローバル空間から、階層的に構造化されたグローバルアドレスのルートツリーに変更されます。ホスト名は、ドメイン要素が最も具体的なものから最も一般的なものの順に並べられていることを理解した上で、ピリオドで区切られた一連のドメイン要素文字列であるドメインおよびホスト指定子に置き換えられます。

これはあまり正確ではありません。ドメイン名に複数の要素が含まれている必要があることを明示的には示していませんが、明示的に禁止しているわけでもありません。しかし、これは次の方法で廃止されました。

RFC-2821:2.3.5ドメイン

ドメイン(またはドメイン名)は、1つ以上のドットで区切られた
コンポーネントで構成されます。...このドキュメントおよび[22]で説明されているように、ドメイン名は完全修飾名全体です(多くの場合「FQDN」と呼ばれます)。FQDN形式ではないドメイン名は、ローカルエイリアスにすぎません。ローカルエイリアスは、SMTPトランザクションに表示されてはなりません(MUSTNOT)。

これは違法だと言っているようですが、実際はそうではありません。以下で説明しますが、最初に、2821を廃止することを目的とした、物事を大いに明確にするドラフト標準を見てみましょう。

RFC-53212.3.5ドメイン名

ドメイン名(または多くの場合、単に「ドメイン」)は、1つ以上のコンポーネントで構成され、複数のコンポーネントが表示される場合はドットで区切られます。電子メールアドレスで単独で使用されるトップレベルドメインの場合、ドットなしで単一の文字列が使用されます。これにより、以下で詳しく説明するように、パブリックインターネット上のSMTPトランザクションには、完全修飾ドメイン名のみが表示されるという要件があります。特に、トップレベルドメインが関係している場合は重要です。...このドキュメントおよびRFC1035[2]で説明されているように、ドメイン名は完全修飾名全体です(多くの場合「FQDN」と呼ばれます)。FQDN形式ではないドメイン名は、ローカルエイリアスにすぎません。ローカルエイリアスは、SMTPトランザクションに表示されてはなりません(MUSTNOT)。

これが明らかにすることは、それがトップレベルドメインである限り、ドメイン名にドットは必要ないということです。

@ValidateInternetAddressは、「test」が有効なトップレベルドメインであるかどうかを合理的に知ることができません。IBMが承認されたパブリックTLDのリストにプログラムした場合でも(IMHOは変更される可能性があり、実際に変更されるため、これは悪い考えです)、実際には、独自のDNSに「テスト」と呼ばれるプライベートTLDを設定できます。これは、標準で禁止されている「ローカルエイリアス」と同じではありません。実際のTLDに対するルールはありません。

さらに言えば、それはパブリックTLDでさえあり得ます。理論的には、TLDの所有者はTLDのメールサーバーを設定できます。つまり、President @ US、またはQueen@UKで​​す。可能性は低いですが、そのような場合は可能ですが、すべての新しいTLDがオンラインになっているので、一部のレジストラがinfo@domainを使用していても驚かないでしょう。

理論的には、@ ValidateInternetAddressはDNS呼び出しを行って、「テスト」をTLDとして解決できるかどうかを確認できると思いますが、その関数のドキュメントには、アドレスの構文を確認するだけであり、TLDの存在はセマンティックの問題です。 、構文の問題ではありません。

于 2012-09-19T22:20:48.827 に答える