ที่อยู่อีเมลเป็นกรณี ๆ ไปหรือไม่


305

ผมเคยอ่านว่าโดยส่วนแรกมาตรฐานของ e-mail เป็นกรณีที่สำคัญ แต่ฉันได้พยายามที่จะส่ง e-mail มาที่name@example.com, Name@example.comและNAME@example.com- มันได้มาถึงในแต่ละกรณี

เมลเซิร์ฟเวอร์จัดการชื่อผู้ใช้อย่างไร เป็นไปได้หรือไม่ที่จะคิดถึงเคสและข้อความนั้นจะไม่ถูกส่งไป? เป็นเรื่องสำคัญหรือไม่ที่จะใช้กรณีตัวอักษรเดียวกันกับที่เขียนในขณะลงทะเบียนเมื่อให้ที่อยู่อีเมลของคุณ?


คำถามที่เกี่ยวข้อง - stackoverflow.com/questions/9013726/…
Luke Girvin

คำตอบ:


366

จากRFC 5321 ส่วน 2.3.11 :

แบบแผนการตั้งชื่อกล่องจดหมายมาตรฐานถูกกำหนดให้เป็น "local-part @ domain"; การใช้งานแบบร่วมสมัยช่วยให้แอปพลิเคชันชุดกว้างกว่า "ชื่อผู้ใช้" แบบธรรมดา ดังนั้นและเนื่องจากปัญหาอันยาวนานของปัญหาเมื่อโฮสต์ระดับกลางพยายามเพิ่มประสิทธิภาพการส่งข้อมูลโดยการปรับเปลี่ยนโฮสต์จะต้องตีความและกำหนดความหมายเฉพาะโดยโฮสต์ที่ระบุในส่วนโดเมนของที่อยู่

ใช่แล้วส่วนก่อน "@" อาจเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เนื่องจากอยู่ภายใต้การควบคุมของระบบโฮสต์ทั้งหมด แม้ว่าในทางปฏิบัติไม่มีระบบเมลที่ใช้กันอย่างแพร่หลายแยกแยะที่อยู่ที่แตกต่างกันตามกรณีและปัญหา

ส่วนหลังเครื่องหมาย @ เป็นโดเมนและตามRFC 1035หัวข้อ 3.1

"เซิร์ฟเวอร์ชื่อและเครื่องมือแก้ปัญหาจะต้องเปรียบเทียบ [โดเมน] ในแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่"

ในระยะสั้นคุณมีความปลอดภัยในการรักษาที่อยู่อีเมลเป็นกรณี ๆ


81
'ในระยะสั้นคุณมีความปลอดภัยในการปฏิบัติต่อที่อยู่อีเมลว่าไม่ต้องตรงตามตัวพิมพ์เล็กและใหญ่' ฉันจะเขียนวลีให้แน่นขึ้น: "คุณไม่ปลอดภัยที่จะปฏิบัติต่อที่อยู่อีเมลเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่" โดยเฉพาะอย่างยิ่งเมื่อตรวจสอบการซ้ำซ้อนในฐานข้อมูลผู้ใช้ ฯลฯ
Geert-Jan

61
ฉันไม่เห็นด้วยกับข้อสรุป หากคุณกำลังมองหารายการที่ซ้ำกันในฐานข้อมูล - ใช่การจับคู่แบบตัวพิมพ์เล็กและตัวพิมพ์เล็กน่าจะเป็นวิธีที่ดีที่สุด แต่ฉันได้เห็นโค้ดที่แปลงที่อยู่อีเมลเป็นตัวพิมพ์เล็กก่อนส่ง นั่นไม่ใช่ความคิดที่ดีเนื่องจากมีโอกาสเล็กน้อยที่จะไม่ได้รับการส่งมอบ ดังนั้นวิธีที่คุณปฏิบัติต่อมันขึ้นอยู่กับผลที่เกิดจากข้อผิดพลาดและสิ่งที่คุณทำกับที่อยู่อีเมลในเวลานั้น (เรียงรายการที่อยู่เฉพาะการส่งอีเมล ฯลฯ )
Peter Bagnall

11
มีใครรู้บ้างเกี่ยวกับรายชื่อผลิตภัณฑ์จดหมายที่จะ (a) ปฏิเสธ John.Doe@company.com เมื่อผู้ใช้ john.doe@company.com ถูกต้องหรือ (b) จะอนุญาตให้สร้างกล่องจดหมายสองกล่องที่แตกต่างกัน: John .Doe @ company.com และ john.doe@company.com
MSC

51
ฉันทำงานที่ บริษัท ใหญ่และมีบุคคลอื่นที่มีชื่อและนามสกุลเหมือนกัน ฉันค้นพบในวันนี้ว่าส่วนท้องถิ่นของเขาแตกต่างจากของฉันในรูปแบบตัวพิมพ์ใหญ่เท่านั้น สิ่งนี้ทำงานได้อย่างถูกต้องดังนั้นฉันจึงประหลาดใจที่เห็น "ไม่มีระบบจดหมายที่ใช้กันอย่างแพร่หลายแยกแยะที่อยู่ที่แตกต่างกันตามกรณี" เราใช้ MS Exchange ซึ่งฉันจะเรียกว่า "ใช้กันอย่างแพร่หลาย"
Matthew James Briggs

7
RFC 5321 2.4 หลักการไวยากรณ์ทั่วไปและรูปแบบการทำธุรกรรม - การใช้งาน SMTP ต้องระมัดระวังเพื่อรักษากรณีของกล่องจดหมายในเครื่อง โดยเฉพาะอย่างยิ่งสำหรับบางโฮสต์ผู้ใช้ "smith" นั้นแตกต่างจากผู้ใช้ "Smith" โดเมนกล่องจดหมายปฏิบัติตามกฎ DNS ปกติและไม่คำนึงถึงตัวพิมพ์
Adam111p

43

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันต้องการที่จะแสดงความคิดเห็นที่นี่: ที่อยู่อีเมลใด ๆ ที่มีความละเอียดอ่อนกรณีที่ผู้ใช้ส่วนใหญ่จะเป็น "ไม่ฉลาดมาก" เพื่อใช้ที่อยู่อีเมลที่ต้องใช้เมืองหลวง ในไม่ช้าพวกเขาก็จะหยุดใช้ที่อยู่เพราะพวกเขาขาดเมลจำนวนมาก (นอกเสียจากว่าพวกเขามีเหตุผลที่เฉพาะเจาะจงในการทำให้สิ่งต่าง ๆ เป็นเรื่องยากและพวกเขาคาดหวังว่าจะได้รับจดหมายจากผู้ส่งที่พวกเขารู้จักเท่านั้น)

นั่นเป็นเพราะมนุษย์ที่ไม่สมบูรณ์เช่นเดียวกับซอฟต์แวร์ที่ไม่สมบูรณ์มีอยู่ (Surprise!) ซึ่งจะถือว่าอีเมลทั้งหมดเป็นตัวพิมพ์เล็กและด้วยเหตุนี้มนุษย์และซอฟต์แวร์เหล่านี้จะส่งข้อความโดยใช้ที่อยู่ "รุ่นที่ต่ำกว่า" ถึงพวกเขา. หากผู้รับไม่สามารถรับข้อความดังกล่าวได้จะใช้เวลาไม่นานก่อนที่พวกเขาจะสังเกตเห็นว่าพวกเขาหายไปมากและเปลี่ยนเป็นที่อยู่อีเมลที่เป็นตัวพิมพ์เล็กเท่านั้นหรือตั้งค่าเซิร์ฟเวอร์ของพวกเขาให้เป็นแบบตัวพิมพ์เล็ก


14
นี้เป็นโปรแกรมที่ชาญฉลาดของกฎหมาย Postel ของen.wikipedia.org/wiki/Robustness_principle การเขียนซอฟต์แวร์ที่ถือว่าส่วนต่าง ๆ ของที่อยู่อีเมลนั้นไม่ตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ใช่เนื่องจากมีซอฟต์แวร์ผิดจำนวนมากอยู่นอกนั้นก็ยังน้อยกว่าที่จะต้องใช้การตอบสนองต่อกรณีเล็ก ๆ น้อย ๆ .
zigg

1
หนึ่งในสิ่งที่ฉันผิดหวังมากที่สุดคือเว็บไซต์ที่บังคับให้ฉันเขียนอีเมลของฉันในทุกกรณี เพิ่งไล่ออกจากความคิดเห็นที่โกรธไปยัง Twitch.tv เกี่ยวกับสิ่งนั้นเกี่ยวกับเว็บไซต์สนับสนุนของพวกเขา พวกเขาบล็อกคุณจากการป้อนตัวพิมพ์ใหญ่ในเว็บไซต์ ดังนั้นในขณะที่ฉันรู้ว่าเซิร์ฟเวอร์อีเมลของฉันปฏิบัติต่อตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และฉันรู้ว่า RFC ระบุว่าตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เว็บไซต์ไม่ควรทำการตั้งสมมติฐานใด ๆ ด้วยวิธีใดวิธีหนึ่งและควรผ่านสิ่งที่ผู้ใช้ป้อน ผู้ชายที่น่ารำคาญมาก !!!
Mark A. Donohoe

โดยส่วนตัวเมื่อฉันพิมพ์อีเมลของฉันที่ไหนสักแห่งฉันชอบที่จะใช้ตัวพิมพ์เล็กใหญ่เพื่อให้ชัดเจนยิ่งขึ้น ตัวอย่างเช่น: JamesTKirk@domain.com (ไม่ใช่ที่อยู่จริงของฉัน) ฉันทำสิ่งนี้แม้ว่าฉันจะได้รับอีเมลโดยไม่ต้องพิมพ์ใหญ่
PaulOTron2000

อย่างไรก็ตามในฐานะผู้เขียนซอฟต์แวร์คุณต้องการให้บริการของคุณเป็นหนึ่งในไม่กี่คนที่ทำสิ่งที่ถูกต้องสำหรับบุคคลนี้ด้วยอีเมลที่ตรงตามตัวพิมพ์ใหญ่ - เล็ก
Klesun

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

1
@ l3x ในขณะที่ฉันไม่ได้เป็นอย่างยิ่งกับรหัสตัวอย่างข้างต้นเช่นเดียวกับคนอื่น ๆ โดยเฉพาะเพราะคุณเรียกมันว่า pseudocode และมันมีวัตถุประสงค์เพื่อเป็นตัวอย่างเท่านั้นบางทีความคิดเห็นทั้งหมดข้างต้นอาจแก้ไขได้ด้วยการแทนที่query = ...บรรทัดของคุณด้วยquery = // Insert case-sensitive/insensitive search hereความคิดเห็นง่ายๆที่ทำให้การสนทนาไม่อยู่ในหัวข้อการฉีด SQL และมุ่งเน้นไปที่สิ่งที่คุณพยายามแสดง กล่าวอีกนัยหนึ่งให้เก็บไว้ในตรรกะไม่ใช่การปฏิบัติ มันจะเงียบนักวิจารณ์
Mark A. Donohoe

10

IETFมาตรฐานแบบเปิด RFC 5321 2.4 หลักการไวยากรณ์ทั่วไปและรูปแบบการทำธุรกรรม

การใช้งาน SMTP ต้องระมัดระวังในการรักษากรณีของกล่องจดหมายในเครื่อง โดยเฉพาะอย่างยิ่งสำหรับบางโฮสต์ผู้ใช้ "smith" นั้นแตกต่างจากผู้ใช้ "Smith"

โดเมนกล่องจดหมายเป็นไปตามกฎ DNS ปกติและไม่คำนึงถึงตัวอักษรพิมพ์เล็ก - ใหญ่


3

ต่อ @ l3x ขึ้นอยู่กับ

มีสถานการณ์ทั่วไปสองชุดที่ชัดเจนซึ่งคำตอบที่ถูกต้องอาจแตกต่างกันไปพร้อมกับข้อที่สามซึ่งไม่เหมือนกัน:

a) คุณเป็นผู้ใช้ที่ส่งจดหมายส่วนตัว :

ระบบอีเมลที่ทันสมัยน้อยมากที่ใช้ความไวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ดังนั้นคุณอาจไม่สนใจเรื่องตัวพิมพ์ใหญ่และเลือกกรณีใด ๆ ที่คุณต้องการใช้ ไม่มีการรับประกันว่าอีเมลทั้งหมดของคุณจะถูกส่ง - แต่อีเมลจำนวนเล็กน้อยจะได้รับผลกระทบในเชิงลบที่คุณไม่ควรกังวล

b) คุณกำลังพัฒนาซอฟต์แวร์จดหมาย :

ดูส่วนที่ตัดตอนมา RFC5321 2.4 ที่ด้านล่าง

เมื่อคุณกำลังพัฒนาซอฟต์แวร์จดหมายคุณต้องการให้สอดคล้องกับ RFC คุณสามารถทำให้ที่อยู่อีเมลของผู้ใช้เป็นกรณี ๆ ไม่สำคัญหากคุณต้องการ (และคุณควรทำ) แต่เพื่อให้เป็นไปตาม RFC คุณต้องปฏิบัติต่อที่อยู่ภายนอกเป็นกรณีๆ ไป

c) การจัดการรายการที่อยู่อีเมลที่เป็นเจ้าของธุรกิจในฐานะพนักงาน :

เป็นไปได้ว่าผู้รับอีเมลรายเดียวกันนั้นถูกเพิ่มเข้าในรายการมากกว่าหนึ่งครั้ง แต่ใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ต่างกัน ในสถานการณ์นี้แม้ว่าที่อยู่จะแตกต่างกันในทางเทคนิค แต่อาจส่งผลให้ผู้รับได้รับอีเมลซ้ำ วิธีที่คุณปฏิบัติต่อสถานการณ์นี้คล้ายกับสถานการณ์ a) ในกรณีที่คุณอาจถูกปรับให้ปฏิบัติเหมือนเป็นรายการที่ซ้ำกันและเพื่อลบรายการที่ซ้ำกัน จะเป็นการดีกว่าถ้าคุณทำสิ่งเหล่านี้เป็นกรณีพิเศษโดยการส่งอีเมล "เตือนความจำ" ไปยังที่อยู่ทั้งสองเพื่อถามพวกเขาหากพวกเขาซ้ำกันและถ้าเป็นเช่นนั้นที่อยู่อีเมลที่ผู้รับต้องการให้คุณใช้

จากมุมมองทางกฎหมายหากคุณลบซ้ำโดยไม่ต้องรับรู้ / รับอนุญาตจากที่อยู่ทั้งสองคุณสามารถรับผิดชอบสำหรับการรั่วไหลของข้อมูลส่วนตัว / การตรวจสอบไปยังที่อยู่ไม่ได้รับอนุญาตเพียงเพราะสองผู้รับจริงแยกมีอยู่เดียวกันกับกรณีที่แตกต่างกัน

ข้อความที่ตัดตอนมาจาก RFC5321 2.4:

ส่วนท้องถิ่นของกล่องจดหมายต้องถือว่าเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นการใช้งาน SMTP จะต้องระมัดระวังเพื่อรักษากรณีของกล่องจดหมายในเครื่อง โดยเฉพาะอย่างยิ่งสำหรับบางโฮสต์ผู้ใช้ "smith" นั้นแตกต่างจากผู้ใช้ "Smith" อย่างไรก็ตามการใช้ประโยชน์จากความรู้สึกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของกล่องจดหมายนั้นเป็นอุปสรรคต่อการทำงานร่วมกันและทำให้หมดกำลังใจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.