11
"Françoise Lefèvre"@example.com

私はRFC 5321を読んで、有効な電子メール アドレスを構成するものを実際に理解しようとしています。おそらく、これを必要以上に難しくしているのでしょう。しかし、これは私を悩ませてきました。

               i.e., within a quoted string, any
               ASCII graphic or space is permitted
               without blackslash-quoting except
               double-quote and the backslash itself.

これは、 ASCII 拡張文字セットが引用符内で有効であることを意味しますか? それとも、標準のASCIIテーブルのみを意味しますか?

編集- 答えを念頭に置いて、プラグインの組み込みの電子メール検証を補完して文字をチェックする単純な jQueryバリデーターを次に示します。

jQuery.validator.addMethod("ascii_email", function( value, element ) { 
    // In compliance with RFC 5321, this allows all standard printing ASCII characters in quoted text.
    // Unquoted text must be ASCII-US alphanumeric or one of the following: ! # $ % & ' * + - / = ? ^ _ ` { | } ~   
    // @ and . get a free pass, as this is meant to be used together with the email validator

    var result = this.optional(element) || 
        (
            /^[\u002a\u002b\u003d\u003f\u0040\u0020-\u0027\u002d-u002f\u0030-\u0039\u0041-\u005a\u005e-\u007e]+$/.test(value.replace(/(["])(?:\\\1|.)*?\1/, "")) &&     
            /^[\u0020-\u007e]+$/.test(value.match(/(["])(?:\\\1|.)*?\1/, ""))   
        );
    return result;
}, "Invalid characters");

プラグインの組み込みの検証は、無効な文字をキャッチすることを除けば、かなり優れているようです。ここにリストされているテストケースのうち、コメント、折り畳み空白、および TDL のないアドレス (例: @localhost、@255.255.255.255) のみが許可されていません。

4

4 に答える 4

4

この RFC では、ASCIIは を意味しますUS-ASCII。つまり、値が 127 を超える文字は許可されません。証明として、RFC 5321 からの引用を次に示します。

メールデータには、128 の ASCII 文字コード [...] のいずれかが含まれる場合があります。

[...]

システムは、SMTP で非 ASCII 文字 (上位ビットが 1 に設定されたオクテット) または ASCII "制御文字" (10 進値 0-31 および 127) の使用を要求するような方法でメールボックスを定義してはなりません (MUST NOT)。これらの文字は、MAIL または RCPT コマンド、またはメールボックス名を必要とするその他のコマンドで使用してはなりません。

これらの引用符は、127 より大きい値を持つ文字が考慮されることを明確に示していnon-ASCIIます。このような文字は、MAIL TO や RCPT コマンドでは明示的に禁止されているため、電子メール アドレスに使用することはできません。

したがって、"Francoise Lefevre"@example.com(RFC によると) は完全に有効なアドレスですが、"Françoise Lefèvre"@example.comそうではありません。

于 2010-08-12T13:01:16.670 に答える
4

この MSDN ページによると、拡張 ASCII 文字は現在有効ではありませんが、これを変更する仕様が提案されています。

http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress(VS.90).aspx

重要な部分は次のとおりです。

Thomas Lee は、引用されたローカル部分が電子メール アドレスで有効であり、引用された文字列でない場合、特定のメール アドレスが無効である可能性があるという点で正しいです。ただし、ウムラウトやアガベなど、他の人が言及した文字はASCII文字セットにはなく、拡張ASCIIです。RFC 2822 (およびその後の RFC 5322 と 3696) では、dtext 仕様 (引用されたローカル部分で許可されている) は、33-90 と 94-126 の範囲の値を含むほとんどの ASCII 値 (RFC 2822、セクション 3.4.1) のみを許可します。RFC 5335 は、addr-spec で非 ASCII 文字を許可するように提案されていますが、まだ実験的なものとしてラベル付けされているため、MailAddress ではサポートされていません。

于 2010-08-12T12:55:44.560 に答える
1

技術的には可能ですが、以下をお読みください。

上記の Local-part の定義は比較的許容的ですが
、最大の相互運用性のために、メールを受信することを期待するホストは、Local-part が Quoted-string フォームを必要とする (または使用する) メールボックス、または Local-part が大文字と小文字を区別するメールボックスを定義することを避けるべきです (SHOULD)。 - センシティブ。

...

システムは、SMTP で非 ASCII 文字の使用を要求するような方法でメールボックスを定義してはなりません (MUST NOT)。

于 2010-08-12T13:00:31.140 に答える
0

HTML5 仕様には、有効な電子メール アドレスの問題に関する興味深い見解があります。

有効な電子メール アドレスは、atext が RFC 5322 セクション 3.2.3 で定義されている ABNF プロダクション 1*( atext / "." ) "@" ldh-str 1*( "." ldh-str ) に一致する文字列です。 、ldh-str は RFC 1034 セクション 3.5 で定義されています。

もちろん、これの良いところは、オープン ソース ブラウザーのソース コードを見て検証できることです(関数を探しIsValidEmailAddressます)。もちろん C ですが、JS に翻訳するのは難しくありません。

于 2010-08-12T14:32:44.587 に答える