Kolumne: Apache Zeta Components
Kommentare

Seit dem 21. Mai diesen Jahres sind die Zeta Components, ehemals eZ Components, nun Mitglied im Apache Incubator und auf bestem Weg, in Zukunft ein echtes Top-Level-Projekt der Apache Software Foundation

Seit dem 21. Mai diesen Jahres sind die Zeta Components, ehemals eZ Components, nun Mitglied im Apache Incubator und auf bestem Weg, in Zukunft ein echtes Top-Level-Projekt der Apache Software Foundation (ASF) zu werden. Die technische Infrastruktur für das Projekt steht nun: eZ Systems hat den Code an die ASF übergeben, ab jetzt wird also das SVN der ASF verwendet. Die neue Website finden Sie unter dem offiziellen URL oder einfacher unter zetacomponents.org. Daneben sind alle wesentlichen Mailinglisten eingerichtet, beispielsweise können Sie via zeta-users@incubator.apache.org mit anderen Benutzern diskutieren. Was noch fehlt, sind einige technische Kleinigkeiten, Entwicklungsprozesse und . Sie!

Ganz richtig, Sie als Interessent und Verwender der Zeta Components sind nun gefragt, mit ins Boot zu steigen. Denn natürlich lebt ein vitales Open-Source-Projekt vom Engagement vieler Entwickler und kann jede helfende Hand gebrauchen: Haben Sie eine Idee für ein cooles neues Feature? Sind Sie über einen Bug gestolpert und haben vielleicht sogar Lust, ihn zu beheben? Sie benutzen eine Komponente und haben Schwachstellen in der Dokumentation aufgedeckt? Sie möchten an interessanten technischen Diskussionen teilhaben? Dann packen Sie doch einfach selbst mit an! Melden Sie sich auf der Entwickler-Mailingliste unter zeta-dev@incubator.apache.org an und schon kann es losgehen. Nur keine Scheu!

Doch genug Werbung, zurück zur Technik. Ich dachte mir, ich stelle an dieser Stelle mal wieder eine unserer Komponenten vor: Diesmal die Zeta-Mailkomponente. Mit ihr können Sie nicht nur komplexe E-Mails – beispielsweise mit Attachements und alternativen HTML-/Textinhalten – versenden, sondern auch solche empfangen. Der Clou daran: Für das Versenden und Empfangen werden die gleichen Datenobjekte verwendet, sodass Sie empfangene E-Mails manipulieren und dann direkt weiterversenden können.

Das Beispiel in Listing 1 zeigt ein kleines Digest-Skript, das von dieser Funktionalität Gebrauch macht. Voraussetzung ist, dass die Zeta Components korrekt im include_path installiert sind. Wie das geht, erfahren Sie in der Installationsanleitung.

require_once 'Base/src/ezc_bootstrap.php';

$imap = new ezcMailImapTransport( "imap.example.com" );

$imap->authenticate( "foobar", "secret" );
$imap->selectMailbox( 'Inbox' );

$rawMails = $imap->fetchAll();

$parser = new ezcMailParser();
$retMails = $parser->parseMail( $rawMails );

$mail = new ezcMail();
$mail->from = new ezcMailAddress( 'no-reply@example.com' );
$mail->addTo(
    new ezcMailAddress( 'dest@example.com', 'John Doe' )
);
$mail->subject = 'Daily digest';

$digest = new ezcMailMultipartDigest();
foreach ( $retMails as $retMail )
{
    $digest->appendPart( new ezcMailRfc822Digest( $retMail ) );
}
$mail->body = $digest;

$transport = new ezcMailMtaTransport();
$transport->send( $mail );  

Zunächst wird hier ein ezcMailImapTransport instanziiert, der zur Kommunikation mit einem IMAP-Server dient und eine Verbindung zum angegebenen Server aufbaut. Die nächsten Kommandos authentifizieren Sie gegenüber dem Server und selektieren die Standardmailbox. Nun werden in die Variable $rawMails die Quelltexte aller E-Mails in dieser Mailbox geladen. Der ezcMailParser parst diese dann in E-Mail-Objekte der Klasse ezcMail.

Ein ebensolches Objekt wird anschließend in $mail erzeugt, um eine neue E-Mail zu versenden. Diesem Objekt werden der Absender der neuen E-Mail sowie ein Empfänger und der Betreff Daily digest mitgeteilt. Um nun alle empfangenen E-Mails weiterzuleiten, wird ein E-Mail-Körper vom ezcMailMultipartDigest benötigt, der beliebig viele innere E-Mail-Objekte aufnehmen kann. Jedes dieser Mailobjekte muss allerdings in eine ezcMailRfc822Digest gekapselt werden.

Schlussendlich wird ein weiteres Transportobjekt erzeugt, diesmal zum Versenden der neu erzeugten E-Mail über die PHP-eigene mail()-Funktion (ezcMailMtaTransport). Die wenigen Codezeilen realisieren also einen einfachen Digest-Dienst, der alle E-Mails einer IMAP-Mailbox abfragt und gesammelt an eine E-Mail weiterleitet. Weitere Informationen zur Funktion der Mailkomponente finden Sie unter zetac.org/Mail.

Tobias Schlitt ist Diplom-Informatiker (Uni) und arbeitet seit mehr als 10 Jahren in professionellen Webprojekten auf Basis von PHP. Als Open-Source-Enthusiast beteiligt er sich an verschiedensten Community-Projekten. Tobias ist Mitgründer der Qafoo GmbH, die Services rund um hochqualitative PHP-Entwicklung anbietet, sowie Consulting, Training und Support zu Apache Zeta Components.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -