メールアドレスでは大文字と小文字が区別されますか?


305

私は、電子メールの標準最初の部分で私はに電子メールを送信しようとしたが、大文字と小文字が区別されることを読んだname@example.comName@example.comNAME@example.com-それは、それぞれの場合に到着しました。

メールサーバーはユーザー名をどのように処理しますか?大文字と小文字を区別しないと、そのメッセージは配信されませんか?あなたの電子メールアドレスを与えるときに登録時に書かれたのとまったく同じ大文字と小文字を使用することは本当に非常に重要ですか?


回答:


366

RFC 5321、セクション2.3.11

標準のメールボックスの命名規則は、「local-part @ domain」と定義されています。現在の使用法では、単純な「ユーザー名」よりもはるかに幅広いアプリケーションのセットが許可されます。したがって、中間ホストがトランスポートを最適化して変更を試みたときの問題の長い歴史により、ローカル部分はアドレスのドメイン部分で指定されたホストによってのみ解釈され、セマンティクスを割り当てられなければなりません。

つまり、 "@"の前の部分は完全にホストシステムの制御下にあるため、大文字と小文字が区別される可能性があります。実際には、広く使用されているメールシステムでは、大文字と小文字に基づいて異なるアドレスを区別しません。

ただし、@記号の後の部分はドメインであり、RFC 1035のセクション3.1 に従って、

「ネームサーバーとリゾルバーは大文字と小文字を区別しない方法で[ドメイン]を比較する必要があります」

つまり、メールアドレスを大文字と小文字を区別せずに安全に扱うことができます。


81
「要するに、あなたはメールアドレスを大文字小文字を区別しないものとして扱うことは安全です。」「電子メールアドレスを大文字と小文字を区別して扱うのは安全ではありません」特にユーザーデータベースなどで重複をチェックする場合
Geert-Jan

61
私はその結論に同意しません。データベースで重複を探している場合-はい、大文字と小文字を区別しない一致がおそらく最善の方法ですが、送信前に電子メールアドレスが小文字に変換されるコードを見ました。配信されない可能性は少ないため、これは良い考えではありません。したがって、それをどのように処理するかは、エラーの結果が何であるか、およびその時点で電子メールアドレスをどのように処理しているかによって異なります(一意のアドレスのリストの照合、電子メールの送信など)。
Peter Bagnall 14

11
(a)ユーザーjohn.doe@company.comが有効なときにJohn.Doe@company.comを拒否する、または(b)2つの異なるメールボックスの作成を許可するメール製品のリストを知っている人はいますか:ジョン.Doe @ company.comおよびjohn.doe@company.com?
MSC

51
私は大きな会社で働いていますが、同じ姓名を持つ別の人がいます。今日、私は彼の地元の部分が私のものとは大文字小文字のみが異なることを発見しました。これは適切に機能しているので、「広く使用されているメールシステムでは、大文字と小文字に基づいて異なるアドレスを区別できない」ことに驚きました。私たちは「広く使用されている」と呼ぶMS Exchangeを使用しています。
マシュージェームスブリッグス

7
RFC 5321 2.4。一般的な構文原則とトランザクションモデル-SMTP実装は、メールボックスのローカル部分の大文字と小文字を維持するように注意する必要があります。特に、一部のホストでは、ユーザー「smith」はユーザー「Smith」とは異なります。メールボックスドメインは通常のDNSルールに従うため、大文字と小文字は区別されません。
Adam111p

43

これは古い質問ですが、ここでコメントしたいと思います。電子メールアドレスでは大文字と小文字が区別されるため、ほとんどのユーザーは大文字を必要とする電子メールアドレスを積極的に使用することは「非常に賢明」ではありません。メールの多くが欠落しているため、すぐにアドレスの使用を中止します。(彼らが物事を困難にする特定の理由がない限り、彼らは彼らが知っている特定の送信者からのメールのみを期待します。)

これは、不完全な人間と不完全なソフトウェアが存在するため(サプライズ!)、すべての電子メールが小文字であると想定しているため、これらの人間とソフトウェアは、アドレスの提供方法に関係なく、アドレスの「小文字バージョン」を使用してメッセージを送信します。彼らへ。受信者がこのようなメッセージを受信できない場合は、多くのメッセージが欠落していることに気づき、小文字のみのメールアドレスに切り替えるか、大文字と小文字を区別しないようにサーバーを設定します。


14
これは、Postelの法則en.wikipedia.org/wiki/Robustness_principleの洞察に富んだアプリケーションです。メールアドレスのローカル部分で大文字と小文字を区別しないソフトウェアを作成することは依然として間違っていますが、そうです、そこには間違ったソフトウェアがたくさんあることを考えると、メールを受け入れる人が大文字と小文字を区別することを要求することは、それほど堅牢ではありません。 。
zigg

1
私が最もイライラしていることの1つは、メールをすべて小文字で書くように強制するサイトです。サポートサイトに関して、Twitch.tvへの怒りのコメントを発砲しました。彼らはあなたのサイトに大文字を入力することからあなたをブロックします。したがって、私の電子メールサーバーでは大文字と小文字が区別されないこと、およびRFCでは大文字と小文字が区別されることがわかっていることはわかっていますが、サイトはいずれの方法も想定せず、ユーザーが入力した内容を単に通過させる必要があります。面倒くさい男!!!
マークA.ドノホー

個人的には、どこかでメールを入力するときは、読みやすくするために大/小文字混合を使用することを好みます。例:JamesTKirk@domain.com(私の実際のアドレスではありません。)大文字なしの電子メールを受信しましたが、これを行います。
PaulOTron2000

ただし、ソフトウェアの作成者は、大文字と小文字を区別するメールでこの人に適切な処理を行う数少ないサービスの1つにすることをお勧めします。
クレサン

31

この投稿にはかなり遅れましたが、少し違うことを言っています...

>> "Are email addresses case sensitive?"

まあ、それ「依存する...」(TM)

一部の組織は、それを良いアイデアだと実際に考えており、電子メールサーバーは大文字と小文字を区別します。

したがって、これらのクレイジーな場所では、「はい、メールでは大文字と小文字が区別されます」。

注:仕様で何かを実行できると言っているからといって、そうすることをお勧めします。

KISSの原則は、私たちのシステムは大文字と小文字を区別しないメールを使用することを示唆しています。

一方、堅牢性の原則では、大文字と小文字を区別するメールを受け入れることを推奨しています。

解決:

  • 大文字と小文字を区別してメールを保存する
  • 大文字と小文字を区別してメールを送信する
  • 大文字と小文字を区別せずに内部検索を実行する

これは、このメールがすでに存在する場合はuser@x.comであることを意味します

...そして、別のユーザーがやって来て、このメールを使用したい場合:USER@x.com

...大文字と小文字を区別しない検索ロジックでは、「そのメールは既に存在します」というエラーメッセージが返されます。

さて、あなたは決断を下しました: あなたの場合、その解決策は適切ですか?

そうでない場合は、user @ x.comがすでに存在していても、大文字と小文字を区別するメールのサポートを要求し、システムにUSER@x.comを許可するカスタムロジックを実装するクライアントに、便利な料金を請求できます。

その場合、メールの検索/検証ロジックは次の疑似コードのようになります。

if (user.paidEmailFee) {
   // case sensitive email
   query = "select * from users where email LIKE ' + user.email + '"
} else {
   // case insensitive email
   query = "select * from users where email ILIKE ' + user.email + '"
}

このように、ほとんどの場合、大文字と小文字を区別しませんが、顧客がこのようなナンセンスをサポートする電子メールシステムを使用している場合は、このサポートの料金を支払うことができます。

ps ILIKEはPostgreSQLのキーワードです:http ://www.postgresql.org/docs/9.2/static/functions-matching.html


8
完全一致のLIKE / ILIKEはひどい考えです。含まれている、%または可能性が高いメールを想像してみてください_
ThiefMaster

18
あなたのポイントは素晴らしいです!しかし、あなたの例の種類のSQLインジェクションはそれを台無しにします:(
epelc

6
@epelcこれ。大賛成です。この種のクエリ作成は、例にすぎない場合でも、どこにも記述しないでください。
xDaizu 2016

1
@ l3x、私は他のコードよりも上記の例のコードに比べてそれほど強くはありませんが、特にそれを疑似コードとして呼び出しており、それは例示のみを目的としているため、おそらく上記のコメントはすべて、query = ...行を次のように置き換えることで対処できます単純なquery = // Insert case-sensitive/insensitive search hereコメント。SQLインジェクショントピックとの会話を避け、表示しようとしている内容に焦点を当てます。つまり、実装ではなくロジック上に保持します。それは批評家を沈黙させます。
マークA.ドノホー

10

IETF Open Standards RFC 5321 2.4。 一般的な構文原則とトランザクションモデル

SMTP実装は、メールボックスのローカル部分の大文字と小文字を維持するように注意する必要があります。特に、一部のホストでは、ユーザー「smith」はユーザー「Smith」とは異なります。

メールボックスドメインは通常のDNSルールに従うため、大文字と小文字は区別されません


3

@ l3xごとに異なります。

正解が異なる可能性がある2つの一般的な状況のセットと、それほど一般的ではない3つ目の状況があります。

a)あなたはプライベートメールを送信しているユーザーです

非常に少数の現代の電子メールシステムあなたがしているので、大文字と小文字の区別を実装し、おそらく罰金ケースを無視して、あなたが使用してのように感じるものは何でもケースを選択します。すべてのメールが配信される保証はありませんが、マイナスの影響を受けるメールはほとんどないため、心配ん。

b)メールソフトウェアを開発しています

下部にあるRFC5321 2.4の抜粋を参照してください。

メールソフトウェアを開発するときは、RFCに準拠する必要があります。あなたはできますがしたい場合は、独自のユーザーの電子メールアドレスケース小文字を区別しないを作る(そして、あなたはおそらく必要があります)。ただし、RFCに準拠するには、外部アドレスを大文字と小文字を区別して扱う必要があります。

c)従業員としてのビジネス所有のメールアドレスのリストの管理

同じ電子メール受信者がリストに複数回追加される可能性がありますが、大文字と小文字が異なります。この状況では、アドレスは技術的に異なりますが、受信者が重複したメールを受信する可能性があります。この状況をどのように扱うかは、状況a)と似ていますがそれらを重複として扱い、重複したエントリを削除することはおそらく問題ありません。ただし、これらを特別なケースとして扱うことをお勧めします。「リマインダー」メールを両方のアドレスに送信して、お互いが重複しているかどうかを確認し、重複している場合は、受信者が使用を希望するメールアドレスを尋ねます。

法的な観点から、両方のアドレスから確認/許可なしで重複を削除すると、2人の実際に別の受信者同じアドレスで大文字と小文字が異なるため、個人情報/認証不正なアドレスに漏洩する責任があります。

RFC5321 2.4からの抜粋:

メールボックスのローカル部分は、大文字と小文字を区別する必要があります。したがって、SMTP実装は、メールボックスのローカル部分の大文字と小文字を維持するように注意する必要があります。特に、一部のホストでは、ユーザー「smith」はユーザー「Smith」とは異なります。ただし、メールボックスのローカル部分の大文字と小文字の区別を悪用すると、相互運用性が妨げられ、推奨されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.