mart: Verlinkung von Grafiken in einer PHP-erstellten HTML-Mail

Hallo,

ich versuche seit einigen Tagen per PHP eine Multipart-Message (MIME-Mail) zu erstellen. Problematisch hat sich dabei allerdings das Verlinken der Grafiken im HTML des Nachrichtentextes erwiesen (Die Grafiken sollen als Attachments mitgeschickt werden).

Outlook reagiert dabei völlig unproblematisch und ich kann die Grafiken im Attachment einfach so behandeln, als ob sie im selben Verzeichnis wie die HTML-Datei liegen (liegt vermutlich daran, dass outlook die Mail samt Attachments in einem temporären Verzeichnis ablegt).
also: <a href="example.jpg" ...>

Der Netscape Mail Client und auch Freemailer wie Hotmail kommen damit aber nicht klar. Sie zeigen dann die Bilder im HTML als fehlend an und dafür am Ende der MAIL.

Ich habe inzwischen herausgefunden, dass sich einige professionelle Newsletterversender einer sogenannten Content-ID bedienen, die im jeweiligen Part der Multipart-Message angegeben ist.

Im Mailcode sieht das etwa so aus:

------=_NextPart_000_0002_01C1A929.1E7B60C0
Content-Type: image/gif;
 name="nh1.gif"
Content-Transfer-Encoding: base64
Content-ID: fcdbfab8783f92a82c39d12a49d8e12b@newsletter

und der Link im HTML auf das jeweilige Image sieht dann so aus:

<img src="cid:fcdbfab8783f92a82c39d12a49d8e12b@newsletter" ...>

Nun habe ich probiert, in meiner eigenen zusammengebastelten Multipartmessage selber content-ids zu vergeben, allerdings funktioniert das auch nicht. Meines Erachtens hat sieht diese ID auch sehr generiert aus.

Kann mir vielleicht nun jemand helfen:

a) wie erstelle ich diese content-ids?
oder
b) eine andere Lösung des Verlinken auf Aattachments zu finden?

Ich weiss, dass es auch noch die Möglichkeit des Verlinkens ins Web gibt, doch finde ich diese Variante nicht sehr attraktiv.

Ihr würdet mir wirklich sehr helfen,

gruss,

mart

  1. ich versuche seit einigen Tagen per PHP eine Multipart-Message (MIME-Mail) zu erstellen. Problematisch hat sich dabei allerdings das Verlinken der Grafiken im HTML des Nachrichtentextes erwiesen (Die Grafiken sollen als Attachments mitgeschickt werden).

    Im Mailcode sieht das etwa so aus:

    ------=_NextPart_000_0002_01C1A929.1E7B60C0
    Content-Type: image/gif;
    name="nh1.gif"
    Content-Transfer-Encoding: base64
    Content-ID: fcdbfab8783f92a82c39d12a49d8e12b@newsletter

    und der Link im HTML auf das jeweilige Image sieht dann so aus:

    <img src="cid:fcdbfab8783f92a82c39d12a49d8e12b@newsletter" ...>

    a) wie erstelle ich diese content-ids?

    Denk dir einfach eine aus. Hauptsache, sie ist innerhalb der Mail eindeutig. Dasselbe gilt für den Trenner (das NextPart-Dings oben).

    Dieses Format ist übrigens standardisiert: Google sagt zu "content-id header html mail": RFC 2111. Probier's mal, steht sogar ein Beispiel drin.

    Gruß,
      soenk.e

    1. hallo soenk.e,

      das hab ich probiert, die mail sieht wie folgt aus:

      From - Thu Jan 31 17:10:01 2002
      X-UIDL: 1012493322.17067
      X-Mozilla-Status: 0001
      X-Mozilla-Status2: 00000000
      Return-path: cgi-mailer-bounces@kundenserver.de
      Envelope-to: martin@plush-online.de
      Delivery-date: Thu, 31 Jan 2002 17:08:42 +0100
      Received: from [212.227.118.7] (helo=infong75)
       by mxbulk01.kundenserver.de with smtp (Exim 3.22 #2)
       id 16WJlM-0008NC-00
       for martin@plush-online.de; Thu, 31 Jan 2002 17:08:36 +0100
      Received: by infong75 (sSMTP sendmail emulation); Thu, 31 Jan 2002 17:08:36 +0100
      X-Complaints-To: abuse@kundenserver.de
      X-Sender-Info: 13587520@infong75
      Date: Thu, 31 Jan 2002 17:08:36 +0100
      Precedence: bulk
      To: martin@plush-online.de
      Subject: Sie haben eine E-Card
      From: schubidu
      Errors-To: martin@plush-online.de
      MIME-Version: 1.0
      Content-Type: multipart/mixed; boundary = b0831418c517c569ede80585619636281
      Message-Id: E16WJlM-0008NC-00@mxbulk01.kundenserver.de

      This is a MIME encoded message.

      --b0831418c517c569ede80585619636281
      Content-Type: text/html
      Content-Transfer-Encoding: base64
      Content-ID: <text>

      DQo8aW1nIHNyYz0iY2lkOmh1cGVAZWNhcmQiIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgYWx0PSIi

      IGJvcmRlcj0iMCI+DQo=

      --b0831418c517c569ede80585619636281
      Content-Type: image/gif; name = "plush.gif"
      Content-Transfer-Encoding: base64
      Content-ID: hupe@ecard

      R0lGODlhYABgAKIAAP///

      hier ist das bild

      q+++OyQAADs=

      --b0831418c517c569ede80585619636281--

      Das HTML im body sieht so aus:

      <img src="cid:hupe@ecard" width="96" height="96" alt="" border="0">

      Trotzdem zeigen netscape und die freemailer nur mist an!

      Siehst du eventuell noch nen fehler?

      gruss,

      mart

      1. das hab ich probiert, die mail sieht wie folgt aus:

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

        This is a MIME encoded message.

        --b0831418c517c569ede80585619636281

        Content-Type: text/html
        Content-Transfer-Encoding: base64
        Content-ID: <text>

        --b0831418c517c569ede80585619636281

        Content-Type: image/gif; name = "plush.gif"
        Content-Transfer-Encoding: base64
        Content-ID: hupe@ecard

        --b0831418c517c569ede80585619636281--

        Das HTML im body sieht so aus:
        <img src="cid:hupe@ecard" width="96" height="96" alt="" border="0">
        Trotzdem zeigen netscape und die freemailer nur mist an!

        Das sieht aber etwas anders aus als das Beispiel in RFC 2111.

        • MIME-Typ ist dort: multipart/related; boundary="blabla"; type=Text/HTML
        • Warum um alles in der Welt verpackst du den HTML-Text mit base64?
        • Zwei Striche am Ende der letzten Trennmarkierung zuviel.

        Falls das Beispiel 1:1 abgetippt wirklich nicht funktionieren sollte, hilft nur noch, dir selber eine solche Nachricht von einem anderen Dienst zuschicken zu lassen und die dann so lange zu bearbeiten, bis es nicht mehr funktioniert.

        Gruß,
          soenk.e

        1. hallo soenk.e,

          ganz grossen dank,

          • MIME-Typ ist dort: multipart/related; boundary="blabla";

          die lösung lag am wort /related...

          jetzt funzt es,

          danke,

          *ganz doll erfreut sei*

          mart