การใช้ส่วนหัวของ SMTP“ ผู้ส่ง” ถูกต้องหรือไม่?


20

เว็บแอปพลิเคชันของเราส่งข้อความอีเมลถึงผู้คนเมื่อมีคนโพสต์เนื้อหาใหม่ ทั้งผู้ส่งและผู้รับเลือกที่จะรับข้อความอีเมลจากแอปพลิเคชันของเรา เมื่อเตรียมข้อความดังกล่าวเราได้ตั้งค่าส่วนหัว SMTP ต่อไปนี้:

จาก: author@example.com
ถึง: ผู้รับ@example.com
ผู้ส่ง: webapp@mycompany.com

เราเลือกใช้ที่อยู่อีเมลของผู้เขียนในส่วนหัว FROM เพื่อพยายามมอบประสบการณ์ที่ดีที่สุดสำหรับผู้รับ เมื่อพวกเขาเห็นข้อความในโปรแกรมรับส่งเมลผู้เขียนจะชัดเจน เพื่อหลีกเลี่ยงการปลอมแปลงเราได้เพิ่มส่วนหัว SENDER (พร้อมที่อยู่อีเมล บริษัท ของเราเอง) เพื่อให้ชัดเจนว่าเราได้ส่งข้อความในนามของผู้เขียน หลังจากอ่าน RFCs 822 และ 2822 สิ่งนี้น่าจะเป็นการใช้งานส่วนหัวของผู้ส่ง

เซิร์ฟเวอร์เมลที่ได้รับส่วนใหญ่ดูเหมือนจะจัดการได้ดี ข้อความอีเมลถูกส่งตามปกติ (สมมติว่ากล่องจดหมายของผู้รับมีอยู่ไม่เกินโควต้า ฯลฯ ) อย่างไรก็ตามเมื่อส่งข้อความจากที่อยู่ในโดเมนไปยังที่อยู่ในโดเมนเดียวกันบางโดเมนที่รับจะปฏิเสธข้อความด้วยการตอบกลับเช่น:

571 IP ไม่ถูกต้อง - psmtp (ตอบกลับไปยังคำสั่ง RCPT TO)

ฉันคิดว่านี่หมายความว่าเซิร์ฟเวอร์ที่รับจะเห็นว่าที่อยู่ส่วนหัว FROM อยู่ในโดเมนของตัวเองและข้อความที่มาจากเซิร์ฟเวอร์นั้นไม่ได้รับอนุญาตให้ส่งข้อความสำหรับโดเมนนั้น กล่าวอีกนัยหนึ่งเซิร์ฟเวอร์ที่รับนั้นจะไม่สนใจส่วนหัวของ SENDER

เรามีวิธีแก้ไขปัญหา: webapp เก็บรายการโดเมนดังกล่าวที่ดูเหมือนว่าจะไม่สนใจส่วนหัวของ SENDER และเมื่อส่วนหัวของ FROM และ TO อยู่ในโดเมนทั้งสองจะตั้งส่วนหัว FROM เป็นที่อยู่อีเมลของเราแทน แต่รายการนี้ต้องการการบำรุงรักษา

มีวิธีที่ดีกว่าในการบรรลุประสบการณ์ที่ต้องการหรือไม่? เราต้องการเป็น "พลเมืองดี" ของอินเทอร์เน็ตและทุกฝ่ายที่เกี่ยวข้อง - ผู้ส่งและผู้รับ - ต้องการเข้าร่วมและรับข้อความเหล่านี้ อีกทางเลือกหนึ่งคือการใช้ที่อยู่อีเมล บริษัท ของเราในส่วนหัวของ FROM เสมอและเติมชื่อ / ที่อยู่ของผู้เขียนไว้ในหัวเรื่อง แต่ดูเหมือนว่าจะค่อนข้างงุ่มง่าม


ทำไมไม่ใช้From: authorแทนFrom: author@example.com?
Pacerier

คำตอบ:


16

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

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

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

มันผิดที่จะต้องมีการMXบันทึกทรัพยากรโดยวิธีการ เซิร์ฟเวอร์ SMTP Relay สามารถระบุตำแหน่งAและAAAAบันทึกทรัพยากรในกรณีที่ไม่มีMXระเบียนทรัพยากร ดู RFC 5321 § 5.1


ฉันตรวจสอบ RFC ก่อนที่จะใช้การตรวจสอบระเบียน MX และเรียนรู้สิ่งเดียวกัน: ตรวจสอบระเบียนทางเลือก A ในกรณีที่ไม่มีระเบียน MX ฉันจะดูในซองจดหมาย SMTP ขอบคุณสำหรับคำแนะนำ
Eric Rath

ฉันค้นคว้าซองจดหมาย SMTP ทดสอบสิ่งนี้ คุณพูดถูก - ฉันคิดว่าการตรวจสอบต้นกำเนิดทั้งหมดไม่ถูกต้องจะใช้ส่วนหัวของข้อความ "จาก" แต่ดูเหมือนว่าจะใช้ซองจดหมายแทน
Eric Rath

5

ฉันอาจผิด แต่สาเหตุที่เป็นไปได้มากที่สุดของข้อผิดพลาดด้านบนโดยเฉพาะอย่างยิ่งในกรณีของ Postini คือโดเมนที่คุณถูกปฏิเสธมีนโยบาย SPF ที่เข้มงวด เมลเซิร์ฟเวอร์ส่วนใหญ่ที่มีการตรวจสอบ SPF จะตรวจสอบเฉพาะส่วนหัวจาก: พวกเขาจะไม่สนใจเกี่ยวกับส่วนหัวของผู้ส่ง

ในการตรวจสอบว่าเป็นกรณีนี้หรือไม่ให้เรียกใช้ "dig + short TXT domain.com" โดยที่ domain.com คือสิ่งที่ให้ข้อความแสดงข้อผิดพลาดแก่คุณ คุณควรได้รับสิ่งที่ชอบกลับมา:

"v = spf1 mx - ทั้งหมด"

ส่วนที่สำคัญคือ - ทั้งหมด ซึ่งหมายความว่าเจ้าของโดเมนระบุว่าพวกเขาจะส่งอีเมลจากเซิร์ฟเวอร์ที่ทำหน้าที่เป็นเซิร์ฟเวอร์อีเมลเท่านั้นอีเมลอื่น ๆ ทั้งหมดจะถูกปฏิเสธ

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


ขอบคุณนั่นเป็นความคิดที่ดี ฉันได้ตรวจสอบโดเมนจำนวนหนึ่งที่ได้นำเสนอด้วยพฤติกรรมที่ไม่พึงประสงค์แล้วและมีสองระเบียนที่มีระเบียน SPF ด้วย ~ all ดังนั้นมันจึงไม่ใช่ทางออกที่สมบูรณ์ แต่ฉันคิดว่ามันจะยากที่จะหาวิธีแก้ปัญหาที่สมบูรณ์สำหรับปัญหานี้ ฉันคิดว่าคนอื่นบังคับใช้ตรรกะพื้นฐานเดียวกัน แต่ไม่มีการจัดเก็บ / เผยแพร่ข้อมูลในระเบียน SPF
Eric Rath

ความคิดของคุณแนะนำให้ตรวจสอบการตรวจสอบความถูกต้องอีกครั้งเพื่อดำเนินการ: โดเมนของที่อยู่ควรมีระเบียน MX ที่ถูกต้อง หากมีคนพิมพ์ผิดที่อยู่อีเมลของพวกเขาและข้อผิดพลาดอยู่ในส่วนโดเมนของที่อยู่ (เช่น person@domainn.com) การส่งจะล้มเหลวเนื่องจากไม่พบระเบียน MX สำหรับโดเมน (สมมติว่าข้อผิดพลาดไม่ได้ส่งผลให้ โดเมนที่แตกต่างกัน แต่ยังคงถูกต้อง)
Eric Rath

ฉันเปลี่ยน "ผู้ตอบรับที่ยอมรับแล้ว" เป็น JdeBP ด้านล่าง - ความแตกต่างระหว่างส่วนหัวของข้อความและส่วนหัวซองจดหมายถูกจับจริง ๆ แต่ขอบคุณสำหรับความคิดเห็น
Eric Rath

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