Ankündigung

Einklappen
Keine Ankündigung bisher.

13: Die 3 E-Postel und die Freuden des Briefverkehrs

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 13: Die 3 E-Postel und die Freuden des Briefverkehrs

    13:

    Von: Karl-Heinz Gierig
    An: Wunschzettel@Der-Weihnachtsmann-am-Nordpol.org
    Betreff: Will ich haben! Wünsch ich mir!
    Anhang: wunschzettel.pdf


    Lieber Weihnacksmann!

    Auch dieses Jahr war ich sehr ahrtig. Ich habe mir Müe gegeben,
    meine Schwester möglichst wenig zu ärgern und immers meine
    Hausaufgaben pünktlich gemacht. Naja, fast immers…

    Wie in jedem Jahr schicke ich Dir mein Wunschzettel. Ich hoffe,
    Du kannst schön viel davon liefern. Die wichtigsten Sachen stehen
    gleich oben. Weil das so viel war, habe ich Dir diesmal das ganze
    per PDF als Anhang geschickt. Den PDF-Reader findest Du ja bei Adobe.

    Mit freundlichen Grüßen,
    in großer Erwatung

    Dein Kalle



    Wollte Kalle diese E-Mail per PHP schicken, würde Ihm das wohl ziemlich viel Mühe bereiten. Als erstes hätten Ihn vermutlich die Umlaute geärgert. Im Text und vor allem im Betreff, überall Umlaute. Ein Charset-Header muss her. Oder gar eine ISO-Codierung fürs Subject? Dann fällt ihm ein, dass er ja noch ein fetziges Bild und unbedingt den Link zum Adobe Reader einbauen will ― schließlich soll’s der Weihnacksmann ja so einfach wie möglich haben. Außerdem kommt der alte Bärtige doch vermutlich erst mit grüner Schrift so richtig in Schenklaune. Fazit: eine HTML-Mail muss her. Dann noch das Wichtigste: Der PDF-Anhang!
    Mime-Types, Content-Types, Transfer-Encodings, Boundaries… Vielleicht alles noch als Plain text? Sicher ist sicher?

    Kalle raucht der Kopf. „Gott“, denkt er sich, „da bin ich ja Ostern noch nicht fertig. Da kann ich meinen PHP-Wunschzettelgenerator wohl vergessen…“

    Doch halt! Von ferne naht kein Glockenklang, sondern der Rat der Weisen! „Mailing Klasse“ flüstern Sie in sein Ohr. Kalle fragt kurz Tante Google und plötzlich ist alles ganz einfach. Einmal fix die Hilfe aufgerufen und ein paar Kommandos abgepinselt:

    PHP-Code:
    <?php


    require_once './Swift-4.0.5/lib/swift_required.php';


    $subject     'Will ich haben! Wünsch ich mir!';
    $from        'Karl-Heinz@Gierig-Family.de';
    $to          'Wunschzettel@Der-Weihnachtsmann-am-Nordpol.org';
    $attachment  'wunschzettel.pdf'// muß im selben Folder liegen


    // Als erstes brauchen wir ein Objekt für unsere Nachricht
    $message Swift_Message::newInstance($subject);

    // Die bekommt gleich Absender und Empfängerangabe (Kurznotation über Queuing geht auch)
    $message->setTo($to);
    $message->setFrom($from);


    // Ein weihnachtliches Bildchen..
    $smiley 'smiley.gif'// muß im selben Folder liegen

    // ..muß für die Email mit ID eingebettet werden
    $cid $message->embed(Swift_Image::fromPath($smiley));

    // ein gutes Schreiben ist die halbe Miete
    $message->setBody(
    '
    <html>
     <head></head>
     <body>
      <div style="color:#0b0;">

      <p>Lieber Weihnacksmann!</p>

      <p>Auch dieses Jahr war ich sehr ahrtig. Ich habe mir Müe gegeben,
         meine Schwester möglichst wenig zu ärgern und immers meine
         Hausaufgaben pünktlich gemacht. Naja, fast immers…</p>

      <p>Wie in jedem Jahr schicke ich Dir mein Wunschzettel. Ich hoffe,
         Du kannst schön viel davon liefern. Die wichtigsten Sachen stehen
         gleich oben. Weil das so viel war, habe ich Dir diesmal das ganze
         per PDF als Anhang geschickt. Den PDF-Reader findest Du ja 
         bei <a href="http://get.adobe.com/de/reader/">Adobe</a>.</p>

      <p>Mit freundlichen Grüßen,<br />
         in großer Erwartung</p>

      <p><big>Dein Kalle</big> <img src="' 
    $cid '" alt="Image" /></p>
      </div>
      </body>
    </html>' 
    ,

    'text/html' 
    );
      
    // Das Wichtigste! Die PDF-Wunschliste
    $message->attach(Swift_Attachment::fromPath($attachment));

    // Hier bestimmen wir die Sendemethode. Fortgeschrittene benutzen besser SMTP
    $transport Swift_MailTransport::newInstance();

    // Unser Mailerobjekt wird mit der Sendemethode erzeugt
    $mailer Swift_Mailer::newInstance($transport);

    // Und schon geht die Nachricht auf die Reise
    if ($mailer->send($message)) {
      echo 
    'Hurra.';
    }
    else {
      echo 
    'Fehler! Schnell F5 drücken!!';
    }
    Die Klasse flugs auf dem Server installiert, Pfade angepasst und das Dauerfeuer kann losgehen.

    Wenn Ihr noch keine Geschenke habt und ganz Web-Zwei-Nullig noch ein paar Bestellungen ordern wollt, dann flugs zu einem der nachfolgenden Produkte gegriffen:

    http://swiftmailer.org/
    http://sourceforge.net/projects/phpmailer/
    http://pear.php.net/package/Mail/

    Auch Zend und ezComponents stellen Mailer bereit, die aber nur in Verbindung mit den jeweiligen Umgebungen funktionieren.


    Es gibt also mehr als den altbekannten PHPMailer. Das da oben war ― unschwer zu erkennen ― die Swiftmailer-Klasse in der 4er Version.

    Drei Ergänzungen noch:
    1. Natürlich müßt Ihr den Absender an Eure Domain anpassen. Sonst verweigert Euer Mailserver noch die Auslieferung. Oder schlimmer: Der Weihnachtsmann liefert an den Falschen!
    2. Schützt Eure Verzeichnisse! Oder wollt Ihr auch noch von Fremden ungeliebte Geschenke?
    3. SwiftMailer benutzt Exceptions. Für alle Fälle solltet Ihr also alles per try/catch umschließen. Leider wird das in Beispielcodes (konsequent auch in meinem) in der Regel vergessen.


    PS: Wer jetzt immer noch uneinsichtig fragt, was denn an [MAN]mail[/MAN]() so verkehrt ist, der möge sich in einer heimeligen Adventsstunde mal sämtliche RFCs zum Thema E-Mail zu Gemüte führen. Und sich fragen, ob er all diese Vorschriften mal locker aus dem Handgelenk programmiert, wofür etablierte Mailingklassen hunderte Scripte bereitstellen. Auch für einfache Textnachrichten lohnt sich der Griff zur Mailer-Klasse. Nur Mut.

    Frohes Mailen! Euer Nikolaus.


  • #2
    Ich denke wir brauchen eine Automatik die einen Link auf diesen Beitrag postet für jeden der in einem Beitrag mail() benutzt
    robo47.net - Blog, Codeschnipsel und mehr
    | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

    Kommentar


    • #3
      Ja. Kann man sich ja althergebracht mit Greasemonkey basteln.
      Wenn es ok ist, würde ich gerne noch auf Deine Artikelserie hinweisen, die ja auch diverse Mailingklassen beleuchtet. In diesem Umfang war das hier natürlich nicht möglich.

      Also: Mail() ist tot, es lebe mail()
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Gerne
        robo47.net - Blog, Codeschnipsel und mehr
        | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

        Kommentar

        Lädt...
        X