PHP’de Raw Email Nasıl Ayrıştırılır: Kapsamlı Bir Kılavuz

Raw e-postayı ayrıştırmak oldukça zorlayıcı olabilir, özellikle farklı formatlar ve yapılandırmalarla karşılaştığınızda. Eğer en ufak bir değişiklikte çökme eğiliminde olan dengesiz ya da kaba kuvvet çözümleriyle boğuşuyorsanız, yalnız değilsiniz. Birçok geliştirici, bir e-posta mesajının parçalarını etkili bir şekilde yönetmeye çalışırken benzer sorunlarla karşılaşır; bu parçalar konu, gönderen, gövde veya ekler olabilir. Bu kılavuzda, raw e-postayı PHP’de etkili ve doğru bir şekilde nasıl ayrıştıracağımızı açıklayacağız.

E-posta Yapısını Anlamak

Kodlama yapmadan önce, bir e-postanın RFC2822 gibi standartlarla tanımlanan temel yapısını anlamak önemlidir. Bir e-posta iki ana bileşenden oluşur:

  1. Başlıklar: E-posta hakkında metaforik veriler içerir.
  2. Gövde: E-posta içeriğinin kendisidir.

E-posta Formatı

İyi biçimlendirilmiş bir e-posta genellikle şu şekilde görünür:

BAŞLIKLAR

GÖVDE

Başlıklar ile gövde arasındaki ayrım, çift bir boşluk ile belirtilir.

Başlıklar ve Gövde Ayrımı

  • Başlıklar: Her başlık aşağıdaki formatı takip eder:

    HSTRING:HTEXT
    
    • HSTRING, bir satırın başında boşluk veya iki nokta olmadan başlar.
    • HTEXT, boşlukla takip edilmesi durumunda yeni satırlar da dahil olmak üzere çeşitli metin karakterleri içerebilir.
  • Gövde: Bu, ilk boş satırdan sonra gelen herhangi bir veriyi içerir. Örneğin:

BAŞLIK: BAŞLIK METNI
BAŞLIK: DAHA FAZLA BAŞLIK METNI
BAŞLIK: SON BAŞLIK

BU HERHANGİ BİR
RASGELE VERİDİR

PHP’de Raw E-postayı Ayrıştırmak

Yapıyı anladıktan sonra, raw e-postayı PHP’de adım adım nasıl ayrıştıracağımıza bakalım.

Adım 1: Raw E-posta Verilerini Okuma

Öncelikle, raw e-posta verilerini okumanız gerekiyor. PHP scriptiniz e-postaları bir pipe aracılığıyla işlemeye ayarlandıysa, gelen verileri genellikle standart girişten doğrudan yakalar.

Örnek:

$raw_email = file_get_contents('php://stdin'); // Gerçek giriş yöntemi ile değiştirin

Adım 2: Raw E-postayı Başlıklar ve Gövde Olarak Ayırma

Sonra, raw e-posta dizesini başlıklar ve gövde olarak ayırmanız gerekecek:

list($headers, $body) = explode("\n\n", $raw_email, 2);

Adım 3: Başlıkları Ayrıştırma

Bireysel başlıkları ayırmak için explode fonksiyonunu kullanın:

$header_lines = explode("\n", $headers);
$parsed_headers = [];

foreach ($header_lines as $line) {
    // Süreklilik satırlarını işleme
    if (isset($current_header)) {
        $parsed_headers[$current_header] .= ' ' . trim($line);
    } else {
        list($key, $value) = explode(':', $line, 2);
        $current_header = trim($key);
        $parsed_headers[$current_header] = trim($value);
    }
}

Adım 4: Gövdeyi İşleme

Gövde çeşitli formatlar içerebilir; MIME türlerini uygun şekilde ele aldığınızdan emin olun. Düz metin, HTML veya hatta eklerle karşılaşabilirsiniz. İşte gövdeyi okuma yolu:

$body = trim($body);

Gövde içeriğini işleme veya saklama ile ilgili özel ihtiyaçlarınıza bağlı olarak burada ek mantığa ihtiyaç duyabilirsiniz.

Sonuç

PHP’de raw e-postayı ayrıştırmak, çerçeveler olmadan gerçekleştirilebilecek temel bir görevdir, yeter ki e-posta formatlarının nasıl çalıştığını net bir şekilde anlayın. Bu kılavuzda belirtilen adımları izleyerek, alınan e-postalardaki değişikliklere bakılmaksızın tutarlı bir şekilde davranacak etkili bir ayrıştırıcı oluşturabilirsiniz.

Sorularınız veya daha fazla yönlendirmeye ihtiyacınız varsa, belirli kullanım senaryolarıyla bizimle iletişime geçmekten çekinmeyin. Mutlu kodlamalar!