ปริศนาของจุดที่หายไปจากเนื้อหาอีเมล
โปรโตคอลการส่งเมลง่าย ๆ ที่ไม่ง่ายอย่างที่คิด
เกิดปัญหาขึ้น
- ได้รับคำอธิบายว่าจุดในเนื้อหาอีเมลที่ส่งให้ลูกค้ารายหนึ่งหายไป
- แต่เมื่อส่งอีเมลฉบับเดียวกันให้ลูกค้ารายอื่น จุดกลับไม่หายไป
ย้อนมองโปรเจกต์
- เมื่อราว 7 ปีก่อน ได้พัฒนาโซลูชันสำหรับรวมเทมเพลตเอกสารให้เป็นระบบเดียว
- ลูกค้าใช้เทมเพลต Microsoft Word เพื่อใส่ placeholder ลงในเอกสาร
- ทุกครั้งที่พนักงานส่งเอกสารทางอีเมล จำเป็นต้องแทนที่ placeholder ด้วยเนื้อหาจริง
ปัญหาการจัดการเทมเพลต
- มีเทมเพลตหลายเวอร์ชัน ทำให้จัดการได้ยาก
- เทมเพลตบางส่วนยังใช้เงื่อนไขเก่า โลโก้เก่า ฟอนต์เก่า เป็นต้น
- จึงพัฒนาโซลูชันที่สามารถจัดการเทมเพลตทั้งหมดจากส่วนกลางได้
การนำโซลูชันไปใช้
- ลูกค้าสามารถจัดการเทมเพลตจากส่วนกลางเพื่อสร้างเอกสาร PDF ข้อความ SMS และเนื้อหาอีเมลได้
- ตัวอย่างเช่น สามารถตั้งค่าเทมเพลตจดหมายต้อนรับที่จะส่งให้ลูกค้าใหม่ได้
- และสามารถกำหนดเทมเพลตต่างกันตามแต่ละช่องทางการส่งมอบ เช่น อีเมล ข้อความ SMS หรือไปรษณีย์
การจำลองปัญหา
- พบปัญหาที่จุดหายไปเฉพาะในอีเมลที่ส่งให้ลูกค้ารายหนึ่งเท่านั้น
- ในซอร์สโค้ดของเทมเพลตมีจุดอยู่ตามปกติ
- เมื่อลองพรีวิวเนื้อหาอีเมลในสภาพแวดล้อมโลคัลก็ยังเห็นจุดตามปกติ
การวิเคราะห์สาเหตุของปัญหา
- ตอนสร้างเนื้อหาอีเมล มีโค้ดที่จำกัดความยาวของแต่ละบรรทัดไว้
- ถ้าบรรทัดยาวเกินที่กำหนด ก็จะสร้างบรรทัดใหม่และย้ายเนื้อหาส่วนที่เหลือไป
- ตามสเปก SMTP หากบรรทัดขึ้นต้นด้วยจุด ระบบจะเพิ่มจุดอีกหนึ่งตัว และเซิร์ฟเวอร์จะลบจุดตัวแรกออก
วิธีแก้ไข
- แก้โค้ดให้เมื่อบรรทัดเริ่มต้นด้วยจุด ระบบจะเพิ่มจุดอีกหนึ่งตัว เพื่อให้ต่อให้เซิร์ฟเวอร์ลบไปก็ยังเหลือจุดอยู่
- หลังทดสอบโค้ดที่แก้ไขแล้ว ยืนยันได้ว่าจุดไม่หายอีกต่อไป
- แก้ปัญหาเสร็จและแจ้งบั๊กนี้ให้ทีมอื่นทราบด้วย
ปัญหาที่ตามมา
- ไม่กี่เดือนต่อมา ทีมอื่นไม่ได้แก้บั๊กเดียวกันนี้ ทำให้จุดหายไปจากอีเมลสำคัญ
- ลูกค้าบางรายได้รับอีเมลที่แสดงค่าบริการรายเดือนใหม่เป็น $2700 แทนที่จะเป็น $27.00
- จากนั้นจึงแพตช์โค้ดทันทีและแก้ปัญหาได้
ความเห็นของ GN⁺
- ความสำคัญของการเข้าใจสเปก SMTP: การเข้าใจสเปก SMTP อย่างลึกซึ้งเป็นสิ่งสำคัญในการแก้ปัญหาที่อาจเกิดขึ้นระหว่างการส่งอีเมล
- ความซับซ้อนของการจัดการเทมเพลต: การดูแลเทมเพลตหลายเวอร์ชันอาจซับซ้อน และจำเป็นต้องมีระบบจัดการจากส่วนกลาง
- ทักษะการดีบัก: ทักษะในการจำลองปัญหาและวิเคราะห์สาเหตุเป็นสิ่งสำคัญ
- การสื่อสารระหว่างทีม: หลังแก้ปัญหาแล้ว การแชร์ข้อมูลกับทีมอื่นเป็นเรื่องสำคัญ
- การทดสอบอัตโนมัติ: ควรนำการทดสอบอัตโนมัติมาใช้เพื่อป้องกันปัญหาลักษณะนี้
2 ความคิดเห็น
เหมือนว่าในชื่อเรื่องจะตีความ
periodเป็น "ช่วงเวลา" แทนที่จะเป็น "จุด" นะครับ 555ความเห็นจาก Hacker News
สรุปรวมความคิดเห็นจาก Hacker News
ความยากของการพัฒนาไคลเอนต์ SMTP
เรื่องเล่าของจดหมายรับรองในเยอรมนี
Cron job และไคลเอนต์ SMTP
นิสัยแย่สองอย่าง
ความจำเป็นของ dot stuffing
ปัญหาไฟล์แนบ HTML MIME
กรณีที่อักขระตัวแรกเป็นจุด
การแจ้งเตือนแพตช์บั๊ก
ประสบการณ์การพัฒนาเซิร์ฟเวอร์ NNTP