1 puan yazan GN⁺ 2024-05-22 | 2 yorum | WhatsApp'ta paylaş

E-posta gövdesinden kaybolan noktanın gizemi

Basit olmayan Basit Posta Aktarım Protokolü

  • Tjaart
    • 20 Şubat 2024

Sorunun ortaya çıkışı

  • Bir müşteriye gönderilen e-postanın gövdesinde noktaların kaybolduğu söylendi.
  • Aynı e-posta başka bir müşteriye gönderildiğinde noktalar kaybolmuyordu.

Projeye dönüş

  • Yaklaşık 7 yıl önce, belge şablonlarını tek bir sistemde birleştiren bir çözüm geliştirilmişti.
  • İstemci, belgelere yer tutucular eklemek için Microsoft Word şablonları kullanıyordu.
  • Çalışanlar belgeyi e-posta ile her gönderdiğinde bu yer tutucuların gerçek içerikle değiştirilmesi gerekiyordu.

Şablon yönetimi sorunu

  • Birden fazla şablon sürümü vardı ve bunları yönetmek zordu.
  • Bazı şablonlarda eski hüküm ve koşullar, logolar, yazı tipleri vb. kullanılıyordu.
  • Tüm şablonların merkezi olarak yönetilebildiği bir çözüm geliştirildi.

Çözümün uygulanması

  • İstemci, PDF belgeleri, SMS mesajları ve e-posta gövdeleri üretecek şablonları merkezi olarak yönetebiliyordu.
  • Örneğin, yeni bir müşteriye gönderilecek karşılama mektubu şablonu ayarlanabiliyordu.
  • Her iletim yöntemi için (e-posta, SMS, posta) farklı şablonlar yapılandırılabiliyordu.

Sorunun yeniden üretilmesi

  • Noktaların yalnızca belirli bir müşteriye gönderilen e-postalarda kaybolduğu sorunu ortaya çıktı.
  • Şablonun kaynak kodunda noktalar vardı.
  • E-posta gövdesi yerel ortamda önizlendiğinde noktalar görünüyordu.

Sorunun nedeninin analizi

  • E-posta gövdesi oluşturulurken her satırın uzunluğunu sınırlayan bir kod vardı.
  • Bir satır bu uzunluğu aşarsa yeni bir satır oluşturuluyor ve kalan içerik oraya taşınıyordu.
  • SMTP spesifikasyonuna göre bir satır nokta ile başlıyorsa fazladan bir nokta eklenir ve sunucu ilk noktayı siler.

Çözüm

  • Kod düzeltildi: Bir satır nokta ile başlıyorsa, sunucu silse bile bir noktanın kalması için fazladan bir nokta eklendi.
  • Düzeltilmiş kod test edildi ve noktaların artık kaybolmadığı doğrulandı.
  • Sorun çözüldü ve hata diğer ekiplere de bildirildi.

Sonraki sorun

  • Birkaç ay sonra başka bir ekip aynı hatayı düzeltmediği için önemli bir e-postada noktalar kayboldu.
  • Bazı müşteriler yeni aylık ücretin $27.00 yerine $2700 olarak göründüğü e-postalar aldı.
  • Kod hemen yamalanarak sorun çözüldü.

GN⁺ görüşü

  1. SMTP spesifikasyonunu anlamanın önemi: E-posta gönderimi sırasında ortaya çıkabilecek sorunları çözmek için SMTP spesifikasyonunu derinlemesine anlamak önemlidir.
  2. Şablon yönetiminin karmaşıklığı: Birden fazla şablon sürümünü yönetmek karmaşık olabilir ve merkezi bir yönetim sistemi gerektirir.
  3. Hata ayıklama becerileri: Sorunu yeniden üretmek ve nedenini analiz etmek için hata ayıklama becerileri önemlidir.
  4. Ekipler arası iletişim: Sorun çözüldükten sonra bilgiyi diğer ekiplerle paylaşmak önemlidir.
  5. Otomatik testler: Bu tür sorunları önlemek için otomatik testlerin kullanıma alınması faydalıdır.

2 yorum

 
surfindia 2024-05-22

Başlıkta period kelimesini nokta değil, süre/dönem olarak yorumlamış gibi görünüyor haha

 
GN⁺ 2024-05-22
Hacker News görüşü

Hacker News yorumları özeti

  • SMTP istemcisi uygulamanın zorluğu

    • SMTP istemcisi uygulamak zordur ve doğru uygulanmazsa kolayca hatalara yol açabilir. Şablon katmanının SMTP ile ilgilenmemesi gerekir.
    • Birçok kişi temel protokolü terminal üzerinden öğrenmediği için bu tür sorunlar ortaya çıkar. Mesajı "tek bir nokta" ile bitirme kuralı önemlidir.
    • Birçok programcı escape etme kavramını anlamıyor. İçinde "tek bir nokta" bulunan bir e-posta gönderme durumunu hesaba katmıyorlar.
  • Almanya'daki referans mektubu hikâyesi

    • Almanya'da iş ilişkisinin sona ermesinde referans mektubu almak yaygındır. Referans mektubunun son cümlesinde nokta olmaması olumsuz bir anlam taşır.
    • Bir avukata referans mektubunu incelettiğinde, son cümlede nokta olmadığı için sorun çıkmıştı.
  • Cron job ve SMTP istemcisi

    • E-posta gönderen bir cron job'ın kendi SMTP istemcisini uygulaması gerekmez. mailutils gibi bir program kullanılabilir.
    • Temel SMTP etkileşimini soket üzerinden uygulamak verimsizdir. TLS bağlantısı ve kimlik doğrulama gerekir.
    • Cron zaten e-posta gönderme özelliğine sahiptir. MAILTO değişkeni kullanılarak e-posta adresi ayarlanabilir.
  • İki kötü alışkanlık

    • Standartlar baştan savma uygulanmamalıdır. Gerekli özen gösterilmeli ya da önceden hazırlanmış bir kütüphane kullanılmalıdır.
    • Bağımlılıklar vendor edilmemelidir. Kütüphaneler düzenli olarak güncellenmelidir. Güncellemeleri ertelemek büyük sorunlara yol açabilir.
  • Dot-stuffing gerekliliği

    • SMTP ve POP3'te dot-stuffing gereklidir. İlgili RFC belgelerine bakılabilir.
  • HTML MIME ek dosyası sorunu

    • "We are happy to welcome you to our family." cümlesi satır sınırına takılmıyor. Bunun bir HTML MIME eki olması mümkün.
    • HTML'i rastgele satırlara bölmek etiketleri bozabilir.
  • İlk karakterin nokta olması durumu

    • İlk karakter nokta olup ardından başka karakterler geliyorsa ilk karakter silinir. Çünkü tek bir nokta e-postanın sonunu ifade eder.
    • Noktanın neden silindiğini anlamak zor. Bir sonraki karaktere bakmak için bir bayt saklanabilir.
  • Hata düzeltme bildirimi

    • SMTP istemcisi kodu önceki bir projeden alınmış olduğu için, başka bir ekibe hatayı bildirdi.
    • Diğer ekibin bu hatayı yamalamamış olması mümkündür.
  • NNTP sunucusu uygulama deneyimi

    • RFC spesifikasyonuna dayanarak NNTP sunucusu uygularken dot-stuffing sorununu hemen anladı. Bu, 80'lerden kalma bir protokoldür.