E-postada MIME Multipart

Sep 25 2020

Bir e-postanın içine resim yerleştirmeye çalışıyorum.

E-posta, 25 numaralı bağlantı noktasındaki bir SMTP sunucusuna bir soket aracılığıyla veri gönderilerek oluşturulur. İşte MIME biti:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=mixedsection;

--mixedsection
Content-Type: text/plain;
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Below should be an inline embedded image

--mixedsection
Content-Type: image/png; file=ts-charts.png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png

iVBORw0KGgoAAAANSUhEUgAAAnoAAAHqCAMAAACk+hPgAAABpFBMVEX// (etc etc etc)

--mixedsection--

E-posta alındığında, ikinci bölüm olan görüntünün bir eke dönüştürüldüğü ve hiçbir zaman satır içi görüntülenmediği görülüyor. Diğer tüm parçalar düzgün çalışıyor, görüntü base64 olarak doğru şekilde kodlandı, böylece ek açılabilir. Metin / düz kısım, hem İçerik Eğilimi satır içi veya ek olarak ayarlandığında doğru şekilde çalışır.

Resmi yerleştirmek için diğer posta istemcilerini (outlook, thunderbird) kullandım ve satır içi olarak görüntülenen resmin herhangi bir sorunu yok.

Diğer her şeyi kaldırsam bile görüntünün satır içinde görüntülenmesini bile sağlayamıyorum. Aşağıdakiler hala ek olarak alınmaktadır:

MIME-Version: 1.0
Content-Type: image/png; file=ts-charts.png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png

iVBORw0KGgoAAAANSUhEUgAAAnoAAAHqCAMAAAC (etc etc)

Öyleyse soru şu, burada neyi özlüyorum ve görüntünün satır içinde görüntülenmesini nasıl sağlayabilirim?

Yanıtlar

1 Mark Sep 25 2020 at 20:04

Bazı nedenlerden dolayı, doğrudan RFC standart yolundan vanilyada çalışmasını sağlayamadım; Bu şekilde nasıl yapılacağını bilen biri varsa , lütfen gönderi paylaşın.

Bu yüzden pes ettim ve resmi yerleştirmek için satır içi HTML / CID kullandım.

İşte bunu nasıl yaptım:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=mixedsection;

--mixedsection
Content-Type: multipart/related; boundary=relatedsection;

--relatedsection
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 8Bit
Content-Disposition: inline

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body>
    <p><img src="cid:myembeddedimage" alt=""></p>
  </body>
</html>

--relatedsection
Content-Type: image/png; name=ts-charts.png
Content-ID: myembeddedimage
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png

iVBORw0KGgoAAAANSUhEUgAAAnoAAAHqCAMAAACk+hPgAAABpFBMVEX//3 (etc etc)

--relatedsection--
--mixedsection--

Not Ben de değiştirdim:

Content-Type: image/png; file=ts-charts.png

file özelliğini kaldırıp bir name özelliği ile değiştirerek:

Content-Type: image/png; name=ts-charts.png

Bunun iyi ya da önerilen bir yöntem olduğuna inanmıyorum ama işe yarıyor.

DÜZENLEME: .... Sadece bitirmek için. Hayatım boyunca düz metin ve gömülü HTML resimlerini nasıl karıştıracağımı çözemedim, bu yüzden metni HTML'ye koymayı tercih ettim.

İşte son mesaj:

MIME-Version: 1.0
Content-Type: multipart/related; boundary=relatedsection;

--relatedsection
Content-Type: text/html;
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<html>
   <head>
      <meta http-equiv="content-type" content="text/html;">
   </head>
   <body>
      <p> Below is an embedded image ...</p>
      <p><img src="cid:myembeddedimage" alt=""></p>
   </body>
</html>

--relatedsection
Content-Type: image/png; name=ts-charts.png
Content-ID: myembeddedimage
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png
 
AHqCAMAAACk+hPgAAABpFBMVEX///8PDw8jIyPDw8OPj333mOm2ajzGtEbdPpm (etc (etc)
--relatedsection--

Bu mesajı bir değişim sunucusu üzerinden çalıştırdığım için, eklerin (att0001, att0002) mesaja eklenmesiyle sonuçlandığından, dış çok parçalı / karma olanı kaldırmak zorunda kaldım. Thunderbird, gmail veya i-Phones'da istemcinin çağrısı ne olursa olsun bu hayalet eklentilerle hiç sorun değil.