E-Mails mit PHP versenden
Sonntag, 11. März 2007 | Autor: Pr0g
Dateianhänge per E-Mail versenden (Teil 2)
Die erweiterte Funktion sieht nun wie folgt aus:
<?php
//
// E-Mail versenden
//
function SendMail($to, $from, $subject, $message_text, $message_html, $attachment, $reply = '') {
// Zeilenlänge der Textnachrichten auf 70 Zeichen beschränken
$message_text = wordwrap($message_text, 70);
// Alle Zeilenumbrüche in den Nachrichten auf \n setzen
$message_text = str_replace(array("\r\n", "\r"), "\n", $message_text);
$message_html = str_replace(array("\r\n", "\r"), "\n", $message_html);
// Absender auf gültige E-Mailadresse prüfen
$from = trim($from);
if (!preg_match('/^[\w.+-]{1,64}\@[\w.-]{1,255}\.[a-z]{2,6}$/', $from)) {
return false;
}
// Absender in Header schreiben
$header = 'From: ' . $from . "\r\n";
// Antwortadresse falls vorhanden in Header schreiben
if (!empty($reply)) {
$header .= 'Reply-To: ' . trim($reply) . "\r\n";
}
// Zufallsid als Blocknamen erzeugen
$boundary_mixed = md5(uniqid(time()));
$boundary_alternative = md5(uniqid(time()));
// Content-type auf Multipart setzen
$header .= 'MIME-Version: 1.0' . "\r\n"
. 'Content-Type: multipart/mixed; boundary="' . $boundary_mixed . '"' . "\r\n";
// Nachrichtenteile zusammensetzen
$message = '--' . $boundary_mixed . "\n"
. 'Content-Type: multipart/alternative; boundary="' . $boundary_alternative . '"'
. "\n\n"
. '--' . $boundary_alternative . "\n"
. 'Content-Type: text/plain; charset=ISO-8859-1' . "\n"
. 'Content-Transfer-Encoding: 8bit' . "\n\n"
. $message_text . "\n\n"
. '--' . $boundary_alternative . "\n"
. 'Content-Type: text/HTML; charset=ISO-8859-1' . "\n"
. 'Content-Transfer-Encoding: 8bit'. "\n\n"
. $message_html . "\n\n"
. '--' . $boundary_alternative . '--' . "\n\n";
// Dateien anhängen
if (is_array($attachment)) {
// Alle Dateieinträge durchlaufen
for ($i = 0; $i < count($attachment); $i++) {
// Datei öffnen (binär lesend)
$fp = fopen($attachment[$i]['filename'], 'rb');
// Inhalt auslesen
$filedata = fread($fp, filesize($attachment[$i]['filename']));
// Datei schließen
fclose($fp);
// Daten in Base64 umwandeln
$filedata = chunk_split(base64_encode($filedata));
// Daten an Nachricht anhängen
$message .= '--' . $boundary_mixed . "\n"
. 'Content-Type: ' . $attachment[$i]['filetype'] . ' name="'
. $attachment[$i]['newname'] . '"' . "\n"
. 'Content-Disposition: attachment; filename="'
. $attachment[$i]['newname'] . '"' . "\n"
. 'Content-Transfer-Encoding: base64' . "\n\n"
. $filedata . "\n\n";
}
}
// Letzten Block abschließen
$message .= '--' . $boundary_mixed . '--';
// E-Mail versenden
return mail($to, $subject, $message, $header);
}
?>
Ein Aufruf könnte wie folgt aussehen, bei mir liegen die zwei Bilder im selben Ordner wie die PHP Datei, daher wurde bei den Dateien kein Pfad mit angegeben:
<?php
// Text Nachricht
$message_text = "Zeile1\nZeile2";
// HTML Nachricht
$message_html = '
<html>
<head>
<title>E-Mail Titel</title>
</head>
<body>
Diese E-Mail verwendet <b>HTML</b><br />
Zeile 2
</body>
</html>
';
// Dateianhänge
$attachment = array();
$attachment[] = array(
'filename' => 'bild1.jpg',
'newname' => 'bild1.jpg',
'filetype' => 'image/jpeg'
);
$attachment[] = array(
'filename' => 'bild2.jpg',
'newname' => 'bild2.jpg',
'filetype' => 'image/jpeg'
);
$status = SendMail('Max Muster <max@domain.de>',
'Peter Muster <peter@domain>',
'Testbetreff',
$message_text,
$message_html,
$attachment);
echo 'E-Mail wurde ' . ($status ? '' : 'nicht ') . 'versendet!';
?>




Montag, 18. August 2008
Hi,
Anhand dem folgenden Beispiel wird beschrieben, wie man mit dem phpmailer eine einfache E-Mail versenden kann. http://www.phptoast.de/e-mails-versenden-mit-php/233/
Montag, 18. August 2008
Es ist sicher eine nette Alternative, aber auf das Absenden komplexerer Emails mit Dateianhängen geht das (recht kurze) Beispiel nicht ein. Kann die Klasse das überhaupt, eine Erwähnung der Funktionen wäre sicherlich noch nett
Montag, 18. August 2008
Na klar kann man mit der Klasse auch Mails mit Anhang versenden. Das kannst du über folgende Funktion relaisieren: AddAttachment()
Eine detaillierte Dokumentation findest du hier:
http://phpmailer.codeworxtech.com/index.php?pg=methods