phpbar.de logo

Mailinglisten-Archive

[php] Mail::send() - die Zweite

[php] Mail::send() - die Zweite

Andreas Heigl a.heigl at wdv.de
Die Okt 19 14:11:34 CEST 2004


Am 19.10.2004 13:21 Uhr schrieb "Steffen Kother" unter
<steffen.kother at gmx.net>:

> Hallo und einen schönen Tag an euch,
> 
> das mit den Namen im From und Reply-To der Mail funktioniert. Habe
> jetzt aber bzgl. meiner Aufgabenstellung ein Verständnisproblem:
> 
> Die Mail soll einen Anhang bekommen und im Mailtext soll ein Link und
> ein bissl Text aufgeführt werden.
> 
> Der Text und Link sind nicht das Thema. Mir geht es um den Anhang. Je
> nach Anzahl der Anhänge wird ja der Mailbody gesplittet. Wie muss ich
> das mit dem Content-Type und Content-Transfer-Encoding machen? Wie
> setze ich die in die Mail ein? auch einfach als Header?
> 
> Vielen Dank für Eure Infos dazu, gern auch zum Nachlesen.
Schau mal unter http://phpguru.org/static/mime.mail.html nach. da brauchst
du den ganzen kram nicht selbst programmieren.

alternativ muss folgendes im Body stehen:

$message = 'MIME-Version: 1.0
    Content-Type: multipart/mixed;
        boundary="=_8acd99179245df15889920fa3e2e5b9a"';

Die Boundary kannst du selbst erstellen ( z.B. $boundary =
'_/'.md5(time()).'\_';)
multipart/mixed steht für gemischte Inhalte, multipart/alternative für
mehrmals derselbe Inhalt in unterschiedlicher Aufbereitung (text, html und
pdf z.B.)
Dann kommt im Body die erste Nachricht:
$message .= '   This is a multipart message in MIME format ';

(Da kann irgendwas stehen, nett ist ein erläuternder Text für clients, die
kein multipart verstehen)

Dann kommen _zwei_ Zeilenschaltungen (CRLF, also \r\n) und der Trenner
angeführt von _zwei_ '-', also:

$message .= "\r\n\r\n" . '--' . $boundary . "\r\n";

Dann kommt die Codierung des nächsten Teiles

$message .= 'Content-Type: image/gif; charset="iso-8859-1"' . "\r\n".
            'Content-Transfer-Encoding: base64' . "\r\n".
            'Content-Disposition: inline; filename="' . $dateiname . '"';

Dabei steht inline für 'zeige mir das dokument im Body der nachricht an.
Alternativ kann auch attachmant gewählt werden. Dann wird die Datei eben als
anlage eingebunden

Dann kommen wieder zwei CRLF

$message .= "\r\n\r\n";

Und dann kommt der Inhalt des nächsten Teiles

$message .= base64_encode ( file_get_contents ( $dateiname ) );

Und dann wieder der nächste Trenner

$message .= "\r\n\r\n" . '--' . $boundary . "\r\n";

und die Schritte zwischen den Trennern kannst du beliebig oft wiederholen.
Du musst nur die entsprechenden Infos bereitstellen (Content-Type etc)

wenn du es noch genauer wissen willst, schau in den RFCs nach
(z.B. hier: http://www.ietf.org/rfc/rfc2045.txt )

hth

Grüße

Andreas


-- 

wdv Medien & Kommunikation GmbH & Co. OHG
Mediendatenverarbeitung
Andreas Heigl
Siemensstrasse 6
61352 Bad Homburg
Germany
Telefon +49-(0)6172-670-185
Telefax +49-(0)6172-670-181
www.wdv.de


php::bar PHP Wiki   -   Listenarchive