Ergebnis 1 bis 12 von 12

Thema: Multipart/Alternative Mime Message versenden

  1. #1
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Multipart/Alternative Mime Message versenden

    Hallo zusammen,

    wie kann ich mit dem FZ2 eine E-Mail versenden, die sowohl aus einer text/plain Version als auch einer text/html Version besteht.
    Ich hab jetzt schon verschiedenes ausprobiert, aber so ganz noch nicht verstanden, wie ich das mit Zend\Mail\Mime und so hin bekomme.

  2. Aktuelles Zend Framework Stellenangebot


    PHP - Entwickler (m/w) - Standort Köln
    von Job Ambition GmbH

    Details ansehen
  3. #2
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    04.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 41 Times in 40 Posts
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  4. #3
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Leider hilft mir das nicht weiter, weil der Text und der HTML Teil dann einfach nacheinander dargestellt werden. Es soll aber als Alternative gesetzt werden.
    MIME type to satisfy HTML, email, images and plain text? - Stack Overflow

    Folgendes habe ich derzeit versucht:
    Code:
    $mailMessageBody->setParts(array($textMimePart, $htmlMimePart));

  5. #4
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    04.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Zitat Zitat von JanMalte Beitrag anzeigen
    Leider hilft mir das nicht weiter, weil der Text und der HTML Teil dann einfach nacheinander dargestellt werden. Es soll aber als Alternative gesetzt werden.
    MIME type to satisfy HTML, email, images and plain text? - Stack Overflow

    Folgendes habe ich derzeit versucht:
    Code:
    $mailMessageBody->setParts(array($textMimePart, $htmlMimePart));
    Mal einen anderen Mail-Client ausprobieren.
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  6. #5
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Am Mail Client liegt es nicht. Der MailCode ist einfach falsch aufgebaut. Es fehlt der "multipart/alternative" Part, der um den HTML und den Text Part liegen sollte. Leider bietet das Zend Framework aber keine Möglichkeit mehrere MimeParts zu verschachteln. Genau das wäre aber notwendig hierfür.
    Code:
    Content-Type: multipart/mixed;
     boundary="=_a399c8c909e22d066f1ff418f3beeebe"
    From: =?UTF-8?Q?MindBase=20Test=20User?= <test@example.com>
    X-UIDL: 4G@"!nOA"!J(\"!O2c"!
    
    This is a message in Mime Format.  If you see this, your mail reader does not support this format.
    
    --=_a399c8c909e22d066f1ff418f3beeebe
    Content-Type: text/plain
    Content-Transfer-Encoding: utf-8
    
    Sehr geehrter TestUser_Password_Recovery,
    
    Sie haben ein neues Passwort angefordert, das wir Ihnen mit dieser E-Mail zusenden. Bitte nutzen Sie dies nur für Ihr nächstes Login. 
    
    Es grüßt Sie herzlich,
    Ihr Team
    --=_a399c8c909e22d066f1ff418f3beeebe
    Content-Type: text/html
    Content-Transfer-Encoding: utf-8
    
    <html>
        <head>
            <title>New Password Request</title>
        </head>
        <body>
            Sehr geehrter TestUser_Password_Recovery,<br />
            <br />
            Sie haben ein neues Passwort angefordert, das wir Ihnen mit dieser E-Mail zusenden. Bitte nutzen Sie dies nur für Ihr nächstes Login.<br />
            <br />
            (Bitte beachten Sie bei der Eingabe die Groß- und Kleinschreibung).<br />
            <br />
            Es grüßt Sie herzlich,<br />
            <i>Ihr Team</i>
        </body>
    </html>
    --=_a399c8c909e22d066f1ff418f3beeebe--
    Geändert von JanMalte (16.01.2013 um 11:10 Uhr)

  7. #6
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.042
    Thanks
    2
    Thanked 222 Times in 215 Posts

    Standard

    Zitat Zitat von JanMalte Beitrag anzeigen
    Leider bietet Zend aber keine Möglichkeit mehrere MimeParts zu verschachteln. Genau das wäre aber notwendig hierfür.
    Es geht nach wie vor um das „Zend Framework“ und nicht um die Firma „Zend“!

    Was soll das dann nach deiner Meinung bewirken?
    PHP-Code:
    $body = new MimeMessage();
    $body->setParts(array($text$html$image));

    $message = new Message();
    $message->setBody($body); 
    Zeig doch bitte mal mit Code auf, wie du deine Nachricht erstellst.
    Zum Zend Framework stehen jedem folgende fünf Quellen zum Nachschlagen zur Verfügung:

  8. #7
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    PHP-Code:
    $renderer $this->getTemplateRenderer();

    $mailMessageBodyMime = new Mime();
    $mailMessageBodyMime->encoding 'UTF-8';
    $mailMessageBody = new MimeMessage();
    $mailMessageBody->setMime($mailMessageBodyMime);

    // Add Text Part using the template
    $textMimePart null;
    if (
    $this->getTextTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getTextTemplate());
        
    $textMimePart = new MimePart($renderer->render($viewModel));
        
    $textMimePart->type 'text/plain';
        
    $textMimePart->encoding 'UTF-8';
    }

    // Add HTML Part using the template
    $htmlMimePart null;
    if (
    $this->getHtmlTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getHtmlTemplate());
        
    $htmlMimePart = new MimePart($renderer->render($viewModel));
        
    $htmlMimePart->type 'text/html';
        
    $htmlMimePart->encoding 'UTF-8';
    }

    // Set the parts of the MimeMessage
    if ($textMimePart != null && $htmlMimePart != null) {
        
    $mailMessageBody->setParts(array($textMimePart$htmlMimePart));
    } elseif (
    $htmlMimePart != null) {
        
    $mailMessageBody->setParts(array($htmlMimePart));
    } elseif (
    $textMimePart != null) {
        
    $mailMessageBody->setParts(array($textMimePart));
    }

    // Set the MimeMessage as Body of the MailMessage
    $this->getMessage()->setBody($mailMessageBody);

    // Set the parts of the MimeMessage
    if ($textMimePart != null && $htmlMimePart != null) {
        
    $this->getMessage()
            ->
    getHeaders()
            ->
    addHeaderLine('content-type''multipart/alternative');

    Ich bekomme aber am Ende keine verschachtelte Emailstruktur:
    Code:
    Content-Type: multipart/mixed;
     boundary="=_03272993a60afa52f72151904b7bb47b"
    MIME-Version: 1.0
    From: =?UTF-8?Q?MindBase=20Test=20User?= <test@example.com>
    X-UIDL: >PU!!-6*#!3RJ!!KJB"!
    
    This is a message in Mime Format.  If you see this, your mail reader does not support this format.
    
    --=_03272993a60afa52f72151904b7bb47b
    Content-Type: text/plain
    Content-Transfer-Encoding: UTF-8
    
    Sehr geehrter TestUser_Password_Recovery,
    
    Sie haben ein neues Passwort angefordert, das wir Ihnen mit dieser E-Mail zusenden. Bitte nutzen Sie dies nur für Ihr nächstes Login. 
    
    Ihr neues Passwort lautet: 
    (Bitte beachten Sie bei der Eingabe die Groß- und Kleinschreibung).
    
    Es grüßt Sie herzlich,
    Ihr Team
    --=_03272993a60afa52f72151904b7bb47b
    Content-Type: text/html
    Content-Transfer-Encoding: UTF-8
    
    <html>
        <head>
            <title>New Password Request</title>
        </head>
        <body>
            Sehr geehrter TestUser_Password_Recovery,<br />
            <br />
            Sie haben ein neues Passwort angefordert, das wir Ihnen mit dieser E-Mail zusenden. Bitte nutzen Sie dies nur für Ihr nächstes Login.<br />
            <br />
            Ihr neues Passwort lautet: <br />
            (Bitte beachten Sie bei der Eingabe die Groß- und Kleinschreibung).<br />
            <br />
            Es grüßt Sie herzlich,<br />
            <i>Ihr Team</i>
        </body>
    </html>
    --=_03272993a60afa52f72151904b7bb47b--

  9. #8
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    04.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Seit wann/wo kann man irgendwo verschiedene Contants mit unterschiedlichen Typen ohne Container-Typ verschachteln?
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  10. #9
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ja, genau das ist ja meine Frage. Wie bekomme ich die Contents ordentlich verschachtelt?
    Folgender Code kann und soll ja natürlich nicht wirklich funktionieren.

    Ziel ist MIME type to satisfy HTML, email, images and plain text? - Stack Overflow

    Der jetzige Code basiert auf Zend Framework und Sending an HTML with text alternative email with Zend\Mail – Rob Allen's DevNotes und funktioniert nicht richtig.
    PHP-Code:
    $renderer $this->getTemplateRenderer();

    // Create the Text Part using the template
    $textMimePart null;
    if (
    $this->getTextTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getTextTemplate());
        
    $textMimePart = new MimePart($renderer->render($viewModel));
        
    $textMimePart->type 'text/plain';
    }

    // Create the HTML Part using the template
    $htmlMimePart null;
    if (
    $this->getHtmlTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getHtmlTemplate());
        
    $htmlMimePart = new MimePart($renderer->render($viewModel));
        
    $htmlMimePart->type 'text/html';
    }

    $mailMessageBody = new MimeMessage();

    // Set the parts of the MimeMessage
    if ($textMimePart != null && $htmlMimePart != null) {
        
    $mailMessageBody->setParts(array($textMimePart$htmlMimePart));
    } elseif (
    $htmlMimePart != null) {
        
    $mailMessageBody->setParts(array($htmlMimePart));
    } elseif (
    $textMimePart != null) {
        
    $mailMessageBody->setParts(array($textMimePart));
    }

    // Set the MimeMessage as Body of the MailMessage
    $this->getMessage()->setBody($mailMessageBody);

    // Set the parts of the MimeMessage
    if ($textMimePart != null && $htmlMimePart != null) {
        
    $this->getMessage()
            ->
    getHeaders()
            ->
    addHeaderLine('content-type''multipart/alternative');
    }

    return 
    $this->getMessage(); 

  11. #10
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    143
    Thanks
    5
    Thanked 18 Times in 17 Posts

    Standard

    Schau dir mal Sending an HTML with text alternative email with Zend\Mail – Rob Allen's DevNotes an. Ich glaube, entscheidend dürfte folgende Zeile sein, alles andere sieht (soweit ich das beim groben Vergleichen sehen konnte) eigentlich gut aus:

    PHP-Code:
    $message->getHeaders()->get('content-type')->setType('multipart/alternative'); 
    /edit: Hätte genauer lesen sollen, die Seite hast du ja selbst entdeckt. Aber das setzen des Content-Typs ist da trotzdem anders.

    Übrigens: Habe mir gerade mal einen alten Artikel bei Dr. Web durchgelesen. Da wird eigentlich nichts verschachtelt, sondern ganz normal nacheinander dargestellt und mit Hilfe eines boundaries getrennt.

  12. #11
    Erfahrener Benutzer Avatar von JanMalte
    Registriert seit
    11.03.2008
    Ort
    Mannheim & Berlin
    Beiträge
    102
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ok, das Problem ist wohl gelöst. Es fehlte auch der Charset und einiges war nicht ganz korrekt. Folgender Code funktioniert jetzt soweit.

    Kannst du mir vielleicht gerade noch den Link zu dem Artikel bei Dr. Web geben? Würde mich ja schon interessieren was da so steht.

    PHP-Code:
    $renderer $this->getTemplateRenderer();

    // Create the Text Part using the template
    $textPart null;
    if (
    $this->getTextTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getTextTemplate());
        
    $textBody $renderer->render($viewModel);
        
    $textPart = new MimePart($textBody);
        
    $textPart->type "text/plain";
        
    $textPart->charset "UTF-8";
    }

    // Create the HTML Part using the template
    $htmlPart null;
    if (
    $this->getHtmlTemplate() != null) {
        
    $viewModel = new ViewModel($params);
        
    $viewModel->setTemplate($this->getHtmlTemplate());
        
    $htmlBody $renderer->render($viewModel);
        
    $htmlPart = new MimePart($htmlBody);
        
    $htmlPart->type "text/html";
        
    $htmlPart->charset "UTF-8";
    }

    // Create the MimeMessage
    $body = new MimeMessage();

    // Set the parts of the MimeMessage
    if ($textPart != null && $htmlPart != null) {
        
    $body->setParts(array($textPart$htmlPart));
    } elseif (
    $htmlPart != null) {
        
    $body->setParts(array($htmlPart));
    } elseif (
    $textPart != null) {
        
    $body->setParts(array($textPart));
    }

    $message = new MailMessage();
    $message->setEncoding("UTF-8");
    $message->setBody($body);
    // Set the correct Content-Type header
    if ($textPart != null && $htmlPart != null) {
        
    $message->getHeaders()->get('content-type')
            ->
    addParameter('charset''UTF-8')
            ->
    setType('multipart/alternative');
    } elseif (
    $htmlPart != null) {
        
    $message->getHeaders()->get('content-type')
            ->
    addParameter('charset''UTF-8')
            ->
    setType("text/html");
    } elseif (
    $textPart != null) {
        
    $message->getHeaders()->get('content-type')
            ->
    addParameter('charset''UTF-8')
            ->
    setType("text/plain");
    }

    $this->setMessage($message);

    return 
    $this->getMessage(); 

  13. #12
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    143
    Thanks
    5
    Thanked 18 Times in 17 Posts

    Standard

    Sicher, den Artikel findest du auf Aufbau von MIME-Mails - Dr. Web Magazin - zwar schon ziemlich alt, aber die Techik hat sich da ja nicht geändert

Ähnliche Themen

  1. sqlite alternative
    Von -iis- im Forum DB
    Antworten: 5
    Letzter Beitrag: 06.11.2012, 09:48
  2. Zend Multipart Mailempfang nicht auf allen Rechnern
    Von jensen im Forum ZF2 Grundlagen
    Antworten: 2
    Letzter Beitrag: 04.05.2012, 21:27
  3. iCal Email mit Zend_Mail versenden
    Von webdevilopers im Forum MFS
    Antworten: 1
    Letzter Beitrag: 03.08.2011, 10:51
  4. Fileupload / Mime-Validation macht Probleme
    Von G.Schuster im Forum Formulare
    Antworten: 12
    Letzter Beitrag: 30.10.2009, 15:15
  5. Formulardaten per Mail versenden
    Von mondy im Forum Formulare
    Antworten: 5
    Letzter Beitrag: 03.12.2008, 14:26

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •