1 poin oleh GN⁺ 2024-05-22 | 2 komentar | Bagikan ke WhatsApp

Misteri titik yang hilang dari isi email

Simple Mail Transfer Protocol yang tidak sesederhana itu

  • Tjaart
    • 20 Februari 2024

Masalah muncul

  • Mendapat penjelasan bahwa titik menghilang dari isi email yang dikirim ke seorang pelanggan.
  • Saat email yang sama dikirim ke pelanggan lain, titik tersebut tidak hilang.

Kilas balik proyek

  • Sekitar 7 tahun lalu, dikembangkan solusi untuk mengintegrasikan template dokumen ke dalam satu sistem terpadu.
  • Klien menggunakan template Microsoft Word untuk menaruh placeholder di dalam dokumen.
  • Setiap kali staf mengirim dokumen melalui email, placeholder itu harus diganti dengan isi sebenarnya.

Masalah pengelolaan template

  • Ada banyak versi template sehingga sulit dikelola.
  • Beberapa template menggunakan syarat dan ketentuan lama, logo lama, font lama, dan sebagainya.
  • Dikembangkan solusi agar semua template bisa dikelola secara terpusat.

Implementasi solusi

  • Klien dapat mengelola secara terpusat template untuk membuat dokumen PDF, pesan teks, dan isi email.
  • Misalnya, mereka bisa menyiapkan template surat sambutan untuk dikirim ke pelanggan baru.
  • Template yang berbeda dapat dikonfigurasi untuk tiap metode pengiriman (email, pesan teks, surat).

Reproduksi masalah

  • Masalah titik yang hilang hanya terjadi pada email yang dikirim ke pelanggan tertentu.
  • Titik tersebut ada di source code template.
  • Saat isi email dipratinjau di lingkungan lokal, titik terlihat.

Analisis penyebab

  • Saat membuat isi email, ada kode yang membatasi panjang setiap baris.
  • Jika baris melebihi batas panjang, baris baru dibuat dan sisa isinya dipindahkan.
  • Menurut spesifikasi SMTP, jika sebuah baris dimulai dengan titik, titik tambahan akan disisipkan, lalu server menghapus titik pertama.

Solusi

  • Perbaikan kode: jika sebuah baris dimulai dengan titik, sisipkan titik tambahan agar setelah server menghapus satu titik, satu titik tetap tersisa.
  • Setelah kode yang diperbaiki diuji, dipastikan titik tidak lagi hilang.
  • Masalah diselesaikan dan bug tersebut juga diberitahukan ke tim lain.

Masalah lanjutan

  • Beberapa bulan kemudian, tim lain tidak memperbaiki bug yang sama sehingga titik menghilang dari email penting.
  • Sebagian pelanggan menerima email yang menampilkan biaya bulanan baru sebagai $2700, bukan $27.00.
  • Masalah diselesaikan segera setelah patch kode diterapkan.

Pendapat GN⁺

  1. Pentingnya memahami spesifikasi SMTP: Untuk menyelesaikan masalah yang dapat terjadi saat mengirim email, penting untuk memahami spesifikasi SMTP secara mendalam.
  2. Kompleksitas pengelolaan template: Mengelola banyak versi template bisa rumit, dan sistem pengelolaan terpusat diperlukan.
  3. Teknik debugging: Kemampuan mereproduksi masalah dan menganalisis penyebabnya sangat penting.
  4. Komunikasi antar tim: Setelah masalah diselesaikan, penting untuk membagikan informasi kepada tim lain.
  5. Pengujian otomatis: Untuk mencegah masalah seperti ini, ada baiknya memperkenalkan pengujian otomatis.

2 komentar

 
surfindia 2024-05-22

Sepertinya di judul, period dipahami sebagai periode waktu, bukan tanda titik, haha

 
GN⁺ 2024-05-22
Komentar Hacker News

Ringkasan kumpulan komentar Hacker News

  • Sulitnya implementasi klien SMTP

    • Implementasi klien SMTP itu sulit, dan jika tidak diimplementasikan dengan benar, bug mudah muncul. Lapisan template seharusnya tidak perlu memikirkan SMTP.
    • Banyak orang tidak mempelajari protokol dasar lewat terminal, sehingga masalah seperti ini terjadi. Aturan mengakhiri pesan dengan "satu titik" itu penting.
    • Banyak programmer tidak memahami konsep escaping. Mereka tidak mempertimbangkan situasi saat mengirim email yang memuat "satu titik".
  • Cerita surat rekomendasi di Jerman

    • Di Jerman, menerima surat rekomendasi saat hubungan kerja berakhir adalah hal yang umum. Jika kalimat terakhir di surat rekomendasi tidak diakhiri titik, itu mengandung makna negatif.
    • Saat surat rekomendasi ditinjau oleh pengacara, ternyata ada masalah karena kalimat terakhirnya tidak memiliki titik.
  • Cron job dan klien SMTP

    • Cron job yang mengirim email tidak perlu mengimplementasikan klien SMTP sendiri. Bisa memakai program seperti mailutils.
    • Mengimplementasikan interaksi SMTP dasar melalui soket itu tidak efisien. Koneksi TLS dan autentikasi juga dibutuhkan.
    • Cron sudah punya fitur untuk mengirim email. Alamat email bisa diatur dengan variabel MAILTO.
  • Dua kebiasaan buruk

    • Jangan mengimplementasikan standar secara asal-asalan. Berikan perhatian yang diperlukan atau gunakan library yang sudah jadi.
    • Jangan melakukan vendoring dependency. Library harus diperbarui secara berkala. Jika pembaruan ditunda, bisa muncul masalah besar.
  • Perlu dot-stuffing

    • Dot-stuffing diperlukan di SMTP dan POP3. Bisa merujuk ke dokumen RFC terkait.
  • Masalah lampiran HTML MIME

    • Kalimat "We are happy to welcome you to our family." tidak terkena batas panjang baris. Mungkin ini adalah lampiran HTML MIME.
    • Jika HTML dipotong menjadi baris secara sembarangan, tag bisa rusak.
  • Jika karakter pertama adalah titik

    • Jika karakter pertama adalah titik dan masih ada karakter lain setelahnya, karakter pertama itu akan dihapus. Ini karena satu titik berarti akhir dari email.
    • Sulit memahami mengapa titik itu dihapus. Satu byte bisa disimpan untuk memeriksa karakter berikutnya.
  • Pemberitahuan patch bug

    • Karena kode klien SMTP diambil dari proyek sebelumnya, bug tersebut diberitahukan ke tim lain.
    • Ada kemungkinan tim lain belum menambal bug ini.
  • Pengalaman mengimplementasikan server NNTP

    • Saat mengimplementasikan server NNTP berdasarkan spesifikasi RFC, masalah dot-stuffing langsung dapat dipahami. Ini adalah protokol era 80-an.