Zum Inhalt

E-Mail

Die E-Mail1 ist zum einen ein System zur computerbasierten Verwaltung von briefähnlichen Nachrichten und deren Übertragung über Computernetzwerke, insbesondere über das Internet. Zum anderen werden auch die auf diesem elektronischen Weg übertragenen Nachrichten selbst als E-Mails bezeichnet.

Mail-Klasse

Mit Hilfe der Mailklasse \Alvine\Net\Mail\Mail lässt sich eine E-Mail zusammenstellen und per SMTP-Client versenden. Alternativ kann die Hilfsmethode \Alvine\Net\Mail\Mail::send() direkt verwendet werden. Diese erstellt einen SMTP-Client und versendet sich selber mit diesem Client.

´´´php // 1

// Neue Mail erstellen
$mail=new \Alvine\Net\Mail\Mail();

$to=$to??'[email protected]';
$from=$from??'[email protected]';
$mailserver=$mailserver??'smtp.example.com';
$client=$client??'me.example.com';
$port=$port??25;
// TESTWERTE NICHT FÜR DOKU

/**
 * Mailparameter übergeben und mit dem 
 * Standard SMTP-Client versenden
 */
try {

    // Handler
    $handler=new \Alvine\Util\Logging\Handler\Memory();

    // Logger
    $logger=\Alvine\Util\Logging\Logger::getInstance(\Alvine\Util\Logging\LoggerDefaultName::MESSAGE);
    $logger->addHandler($handler);
    $handler->setThreshold(\Alvine\Util\Logging\Level::ALL);

    $mail->addTo($to)
        ->setFrom($from)
        ->setSubject('Testmail')
        ->addAlternativeParts('<html>', 'plain')
        ->send($mailserver, $port, $client);

    // Ausgabe der Logdaten
    echo $handler->getBuffer();
    // Ergebnis -> Dies ist ein Log-Trace und eine Log-Debug Zeile!
} catch(\Alvine\Net\Mail\SMTPClientException $e) {
    echo "Exception: ".$e->getMessage();
}

Das Ergebnis aus dem Logger ist dann in etwa so:

220 mailhog.example ESMTP MailHog
EHLO mailhog
250-Hello mailhog
250-PIPELINING
250 AUTH PLAIN
MAIL FROM:<[email protected]>
250 Sender [email protected] ok
RCPT TO:<[email protected]>
250 Recipient [email protected] ok
DATA
354 End data with <CR><LF>.<CR><LF>
Date: 11 Sep 2019 18:00:37 +0000
From: [email protected]
Reply-To: [email protected]
Subject: Testmail
To: [email protected]
Message-ID: <ca24d237-518d-4cd7-acd1-007ca4d72ada@1f4cd243>
MIME-Version: 1.0
Content-Type: MULTIPART/alternative; BOUNDARY="8323329-704665374-1568224837=:1889"

--8323329-704665374-1568224837=:1889
Content-Type: TEXT/plain; CHARSET=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE

plain
--8323329-704665374-1568224837=:1889
Content-Type: TEXT/html; CHARSET=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE

<html>
--8323329-704665374-1568224837=:1889--

.
250 Ok: queued as psjB0TUNhB61XKXQtlVmh4oBCiRZX9CZ-II9oTIBjCY=@example
QUIT
221 Bye
a11a3b41-de43-48ac-b7ef-921220b7246d ```

Beim Versand einer E-Mail, muss in der EHLO/HELO Begrüßung ein gültiger Hostname stehen. Aus der Spezifikation RFC5321:

In the EHLO command, the host sending the command identifies itself; the command may be interpreted as saying "Hello, I am " (and, in the case of EHLO, "and I support service extension requests").

The domain name given in the EHLO command MUST be either a primary host name (a domain name that resolves to an address RR) or, if the host has no name, an address literal, as described in Section 4.1.3 and discussed further in the EHLO discussion of Section 4.1.4.*

Im Standard wird die PHP-Methode gethostname() verwendet. In Containern oder lokalen Installationen wird hier oft ein nicht im DNS auflösbarer Name wie localhost zurückgegeben. In diesen Fällen muss man mit der Methode \Alvine\Net\Mail\SMTPClient::setHostname(string $name) einen gültiger Domainname setzen.


  1. kurz Mail; engl. electronic mail für „elektronische Post“ oder E-Post 

  2. Das Simple Mail Transfer Protocol