Übersicht

Mail für PHP.

Inhaltsverzeichnis

Requirements

  • PHP 5.5+
  • blar/mime @dev
  • blar/curl @dev
  • blar/common @dev

Installation

Es wird die Installation per Composer_ empfohlen, da hiermit auch alle Abhängigkeiten automatisch aufgelöst werden können. Bei der Installation per Git müssen die Abhängigkeiten manuell gelöst werden.

Installation mit Composer

$ composer require blar/test @dev

Installation mit Git

$ git clone https://github.com/blar/test.git

:: _Composer http://getcomposer.org/

Mail

Über die Standardfunktion mail von PHP können einfache E-Mails versendet werden. Wenn es jedoch darum geht, komplexere E-Mails zu versenden wird es sehr kompliziert.

Auch ist es mit mail() nicht möglich, direkt über externe SMTP-Server E-Mails zu versenden.

Transports

Es werden verschiedene Transports bereitgestellt um E-Mails zu versenden.

Sendmail-Transport

$transport = new SendmailTransport();
$transport->sendMail($mail);

Bemerkung

Der Versand von E-Mails per Sendmail ist meist einfacher, da dies vom Administrator vorkonfiguriert sein sollte.

Curl-Transport

$transport = new CurlTransport('example.com');
$transport->setCredentials('username', 'password');
$transport->sendMail($mail);

Bemerkung

Der Versand von E-Mail per Curl ist deutlich (~1.000%) schneller, da nicht für jede E-Mail ein neuer Prozess von Sendmail gestartet wird, sondern alle E-Mails mit der selben SMTP-Verbindung versendet werden.

Warnung

Auch wenn der E-Mail-Versand durch Curl einen Geschwindigkeitssteigerung von ~1.000% gegenüber den Standardversand per Sendmail verursacht, so sollte trotzdem keine unnötigen oder sogar unerwünschten E-Mails versendet werden.

Beispiel

$mail = new Mail();
$mail->setFrom('foobar@example.com');
$mail->setTo('foo@example.com, bar@example.com');

Bemerkung

Mail::setTo() setzt den Envelope-To. In dieser Liste sind alle Empfänger enthalten. Diese müssen nicht in der E-Mail unter den Headern To und CC erscheinen.

E-Mail-Adressen als Objekte

$mail = new Mail();
$mail->setFrom(new MailAddress('foobar@example.com', 'Foo Bar'));

$addressCollection = new AddressCollection();
$addressCollection->push('foo@example.com');
$addressCollection->push('bar@example.com');
$mail->setTo($addressCollection);

Zusätzliche Header

$mail = new Mail();
$mail->setFrom(new MailAddress('foobar@example.com', 'Foo Bar'));

$addressCollection = new AddressCollection();
$addressCollection->push('foo@example.com');
$addressCollection->push('bar@example.com');
$mail->setTo($addressCollection);

$headers = $mail->getHeaders();
$headers->set('Content-Type', 'text/html');
$headers->set('Subject', 'Hello World');

$mail->push('<p>Hello World</p>');

Fluid Interface

$addressCollection = new AddressCollection();
$addressCollection
    ->push('foo@example.com')
    ->push('bar@example.com');

$mail = new Mail();

$mail
    ->setFrom(new MailAddress('foobar@example.com', 'Foo Bar'))
    ->setTo($addressCollection);

$mail
     ->getHeaders()
     ->set('Content-Type', 'text/html')
     ->set('Subject', 'Hello World')
     ->push('<p>Hello World</p>');

BCC

$mail = new Mail();
$mail->setTo('foo@example.com, bar@example.com');
$mail->getHeaders()->set('To', 'foo@example.com');

Bemerkung

foo@example.com erscheind als Empfänger im E-Mail-Client. Der Empfänger bar@example.com erhält auch die E-Mail, wird jedoch nicht als Empfänger in der Angezeigt (BCC).