marco: Problem beim versenden von Multipart Message mit PHP

hallo, ich habe folgendes problem:

beim versenden folgender multipart message (autoresponder nach ausfüllen und absenden eines formulars) mit php wird die email im emailprogramm (z.b. mail unter OSX 10.4.8 und webmailer 1und1) nicht richtig wiedergegeben.

php-script:

<?php
$to       = "ich@meiner-domain.de";
$benutzer = $HTTP_POST_VARS['user'];
$mail     = $HTTP_POST_VARS['mail'];
$subject  = $HTTP_POST_VARS['betreff'];
$nachricht= $HTTP_POST_VARS['anfrage'];

$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/alternative; boundary=multimessage_antwort\n";
$header .= "From: absender@domain.de\r\n";

$antwort .= "--multimessage_antwort";
$antwort .= "Content-Type: text/html\n";
$antwort .= "Content-Transfer-Encoding: quoted-printable\n\n";
$antwort .='<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<html><body bgcolor="white" leftmargin="25" marginheight="25" marginwidth="25" topmargin="25">
<style type="text/css">
   body {color: #003; font: 10px/13px Verdana, Arial, Helvetica, Geneva, Swiss }
</style>
<b>Vielen Dank f&uuml;r Ihre Anfrage, '.$benutzer.'.</b><br> Wir werden diese umgehend bearbeiten.<p><br>
Text Ihrer Anfrage:<br>'.$nachricht.'
<p><br>
Ihr Team von<font color="#f30"> TOP </font>Absender<p><br>
<a href="http://www.meine-domain.de"><img src="http://www.meine-domain.de/images/logo.jpeg" /></a></body></html>';
$antwort .= "\n";

$antwort .= "--multimessage_antwort";
$antwort .= "Content-Type: text/plain; charset='iso-8859-1'\n";
$antwort .= "Content-Transfer-Encoding: 7bit\n\n";
$antwort .= "Vielen Dank für Ihre Anfrage, ".$benutzer.".\n";
$antwort .= "Wir werden diese umgehend bearbeiten.\n";
$antwort .= "\n";
$antwort .= "Text Ihrer Anfrage:\n";
$antwort .= "".$nachricht."\n";
$antwort .= "\n";
$antwort .= "Ihr Team von TOP Absender.\n";

$antwort .= "--multimessage_antwort--";

mail($mail, "AW: ".$subject, $antwort, $header);
?>

---- ende script

$benutzer = $HTTP_POST_VARS['user'];
$mail     = $HTTP_POST_VARS['mail'];
$subject  = $HTTP_POST_VARS['betreff'];
$nachricht= $HTTP_POST_VARS['anfrage'];

kommen vom formular.

das script habe ich in einfacherer form aus dem archiv dieses forums. aber leider sieht die email im emailprogramm dann so aus:

--multimessage_antwortContent-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<html><body bgcolor="white" leftmargin="25" marginheight="25" marginwidth="25" topmargin="25">
<style type="text/css">
   body {color: #003; font: 10px/13px Verdana, Arial, Helvetica, Geneva, Swiss }
</style>
<b>Vielen Dank f&uuml;r Ihre Anfrage, mustermann.</b><br> Wir werden diese umgehend bearbeiten.<p><br>
Text Ihrer Anfrage:<br>Hier steht die Anfrage (Text vom Formular)
<p><br>
Ihr Team von<font color="#f30"> TOP </font>Absender<p><br>
<a href="http://www.meine-domain.de"><img src="http://www.meine-domain.de/images/logo.jpeg" /></a></body></html>
--multimessage_antwortContent-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

Vielen Dank für Ihre Anfrage, mustermann.
Wir werden diese umgehend bearbeiten.

Text Ihrer Anfrage:
Hier steht die Anfrage (Text vom Formular)

Ihr Team von TOP Absender.
--multimessage_antwort--

ich sitze da jetzt schon mehre tage dran und komme einfach nicht weiter. nach dem motto viele augen sehen mehr als zwei - kann mir bitte jemand helfen?

gruß

marco

  1. Hallo,

    das script habe ich in einfacherer form aus dem archiv dieses forums. aber leider sieht die email im emailprogramm dann so aus:

    --multimessage_antwortContent-Type: text/html

    ...

    --multimessage_antwortContent-Type: text/plain; charset='iso-8859-1'

    Nach dem "--boundary" fehlt jeweils eine Zeilenschaltung.

    viele Grüße

    Axel

    1. hallo

      Nach dem "--boundary" fehlt jeweils eine Zeilenschaltung.

      vielen dank, axel. genau das war der fehler. zusätzlich habe ich noch die antwort, die in text/html codiert ist hinter die text/plain- codierte gesetzt. jetzt wird bevorzugt die html-mail angezeigt und wenn das nicht geht die text-mail.

      genau so wollte ich es haben.

      nochmals vielen dank und freundliche grüße

      marco

  2. Hallo,

    beim versenden folgender multipart message (autoresponder nach ausfüllen und absenden eines formulars) mit php wird die email im emailprogramm (z.b. mail unter OSX 10.4.8 und webmailer 1und1) nicht richtig wiedergegeben.

    nachdem das eigentliche Problem ja, wie es aussieht, gelöst ist, möchte ich dir noch ein paar Gedanken mit auf den Weg geben.

    $benutzer = $HTTP_POST_VARS['user'];
    $mail     = $HTTP_POST_VARS['mail'];
    $subject  = $HTTP_POST_VARS['betreff'];
    $nachricht= $HTTP_POST_VARS['anfrage'];

    Eigentlich sollte es $HTTP_POST_VARS[] schon lange nicht mehr geben, es wird nur von einigen PHP-Installationen aus Kulanz noch unterstützt. Das gilt auch für $HTTP_GET_VARS und Konsorten. Korrekt wäre hier der Zugriff über die superglobalen Arrays $_POST[], $_GET[], $_SERVER[] etc.

    $header .= "MIME-Version: 1.0\n";
    $header .= "Content-Type: multipart/alternative; boundary=multimessage_antwort\n";
    $header .= "From: absender@domain.de\r\n";

    Fehler: In den RFCs für Mails ist festgelegt, dass Headerzeilen mit CR/LF abgeschlossen werden, nicht nur mit einem Linefeed. Die Erfahrung zeigt zwar, dass die meistens MTAs auch mit einem Linefeed als Trennzeichen klarkommen, aber korrekt ist es nicht - eines Tages gerätst du an einen Mailserver, der's genau nimmt.

    <a href="http://www.meine-domain.de"><img src="http://www.meine-domain.de/images/logo.jpeg" /></a></body></html>';

    Und wenn ich gerade schon beim Meckern bin: Für neutrale Beispiele sind extra die Beispieldomains example.net, example.org, example.com oder *.example ins Leben gerufen worden, damit nicht unbeabsichtigt die Inhaber real existierender Domains Ärger kriegen.

    mail($mail, "AW: ".$subject, $antwort, $header);

    Du hast nur Outlook-geschädigte Kommunikationspartner? Normalerweise verwendet man für eine Antwort das Betreff-Präfix "Re:" für Reply. Das "AW:" ist eine Marotte von Outlook.

    So long,
     Martin

    --
    Viele Fachleute vertreten die Ansicht, jedes Feature eines Programms, das sich nicht auf Wunsch abstellen lässt, sei ein Bug.
    Außer bei Microsoft. Da ist es umgekehrt.
    1. hallo martin.
      du hast geschrieben:

      Eigentlich sollte es $HTTP_POST_VARS[] schon lange nicht mehr geben, es wird nur von einigen PHP-Installationen aus Kulanz noch unterstützt. Das gilt auch für $HTTP_GET_VARS und Konsorten. Korrekt wäre hier der Zugriff über die superglobalen Arrays $_POST[], $_GET[], $_SERVER[] etc.

      danke für den tipp - das wusste ich nicht (ich sollte mir mal wieder ein neues php-buch gönnen ;-))

      $header .= "MIME-Version: 1.0\n";
      $header .= "Content-Type: multipart/alternative; boundary=multimessage_antwort\n";
      $header .= "From: absender@domain.de\r\n";

      Fehler: In den RFCs für Mails ist festgelegt, dass Headerzeilen mit CR/LF abgeschlossen werden, nicht nur mit einem Linefeed. Die Erfahrung zeigt zwar, dass die meistens MTAs auch mit einem Linefeed als Trennzeichen klarkommen, aber korrekt ist es nicht - eines Tages gerätst du an einen Mailserver, der's genau nimmt.

      auch hierfür danke. aber leider funktioniert dann mein script nicht mehr (die mail sieht dann wieder so aus wie in meiner eröffnungsfrage gezeigt). könntest du mir am obigen beispiel die genaue schreibweise zeigen?

      <a href="http://www.meine-domain.de"><img src="http://www.meine-domain.de/images/logo.jpeg" /></a></body></html>';

      Und wenn ich gerade schon beim Meckern bin: Für neutrale Beispiele sind extra die Beispieldomains example.net, example.org, example.com oder *.example ins Leben gerufen worden, damit nicht unbeabsichtigt die Inhaber real existierender Domains Ärger kriegen.

      ich bin nicht so forumserfahren - also auch hierfür danke.

      mail($mail, "AW: ".$subject, $antwort, $header);

      Du hast nur Outlook-geschädigte Kommunikationspartner? Normalerweise verwendet man für eine Antwort das Betreff-Präfix "Re:" für Reply. Das "AW:" ist eine Marotte von Outlook.

      da habe ich mir ehrlich gesagt keine gedanken drüber gemacht. ich habe das so in einer fortbildung gelernt. aber du hast natürlich recht - und gerade als Mac-user werde ich das sofort als erstes ändern ;-)

      danke und gruß

      marco

      1. Hallo Marco,

        In den RFCs für Mails ist festgelegt, dass Headerzeilen mit CR/LF abgeschlossen werden, nicht nur mit einem Linefeed. [...]
        auch hierfür danke. aber leider funktioniert dann mein script nicht mehr (die mail sieht dann wieder so aus wie in meiner eröffnungsfrage gezeigt). könntest du mir am obigen beispiel die genaue schreibweise zeigen?

        Ungefähr so:

        $header .= "MIME-Version: 1.0\r\n";
        $header .= "Content-Type: multipart/alternative; boundary=multimessage_antwort\r\n";
        $header .= "From: absender@domain.de\r\n";

        An einigen Stellen hattest du ja schon die Kombination "\r\n", aber halt nicht durchgehend.

        Für neutrale Beispiele sind extra die Beispieldomains example.net, example.org, example.com oder *.example ins Leben gerufen worden, damit nicht unbeabsichtigt die Inhaber real existierender Domains Ärger kriegen.
        ich bin nicht so forumserfahren - also auch hierfür danke.

        Mit "Forum" hat das nicht viel zu tun - aber trotzdem bitte sehr, gern geschehen. ;-)

        Das "AW:" ist eine Marotte von Outlook.
        da habe ich mir ehrlich gesagt keine gedanken drüber gemacht. ich habe das so in einer fortbildung gelernt. aber du hast natürlich recht - und gerade als Mac-user werde ich das sofort als erstes ändern ;-)

        ;-)

        Schönen Abend noch,
         Martin

        --
        "Life! Don't talk to me about life!"
          (Marvin, the paranoid android in Douglas Adams' "The Hitchhiker's Guide To The Galaxy")