Home > Mail, PEAR, php > E-Mail mit Anhang über PHP 4 versenden

E-Mail mit Anhang über PHP 4 versenden

January 27th, 2009

Immer wieder stößt man auf Server bzw. Webseiten die noch mit PHP 4 betrieben werden. Daran wird sich auch in absehbarer Zukunft nichts ändern. Wer also mal eben schnell was in so einer antiquierten Umgegebung erledigen möchte kann nicht auf moderne Frameworks setzten, da diese meist PHP 5 erfordern. Eines der bekanntesten Frameworks die PHP 5 unterstützen ist sicherlich PEAR, das obwohl es zu “The PHP Group” gehört, eine vom Aussterben bedrohte Spezies ist. Wie auch immer, für alte Systeme sollte es dennoch nützlich sein. Sollte…

Für das Arbeiten mit PEAR haben die Amerikaner extra den Begriff “pain in the ass” geprägt (oder gab es den schon vorher und waren es gar die Engländer?). Mal fehlen Komponenten mal werden Klassen nicht gefunden, mal ist PEAR nicht auf dem Server installiert etc. pp…Ich denke jeder kennt das Dilemma, es ist nicht Fleisch und nicht Fisch.

Hier ist nun meine Lösung für das Versenden einer Mail mit Attachment und der Hilfe von PEAR. Es handelt sich um eine Zusammenstellung der benötigten PEAR Komponenten und einem Script das alles zusammenfügt. Die PEAR Scripte sind leicht modifiziert, ich musste einfach ein paar Pfade anpassen. Für Server bei denen der Versand über die native mail() Funktion von PHP nicht konfiguriert ist, was die absolute Ausnahme ist, habe ich SMTP Versand als Option mit eingebaut.

PEAR Mailer mit Anhang

Hier nun das Demo Script für den Mailversand:

 
ini_set("display_errors", 1);
 
define('FROM', 'Ralf Kramer <rk@belisar.de>');
define('SUBJECT', 'Happy Mail!');
define('USE_SMTP', false);
define('SMTP_HOST', 'mail.mustersample.com');
define('SMTP_USER', 'max@mustersample.com');
define('SMTP_PASSWORD', 'yoursecret');
define('EMAIL_RECIPIENT', 'max@mustersample.com');
 
function send_mail(){
 
	require_once ("Pear/Mail.php");
 
	// uncomment this line if php complainy about a missing nt_smtp class
	#include_once ("Pear/SMTP.php");

	require_once ("Pear/Mail/mime.php");
 
	$text = 'A happy little mail for you. Enjoy!';
	$html = 'A happy little mail for you. Enjoy!';
	$crlf = "\n";
	$header = array( 'From' => FROM, 'Subject' => SUBJECT );
	$file = "sendme.txt";
	$mime = new Mail_mime($crlf);
 
	$mime->setTXTBody($text);
	$mime->setHTMLBody($html);
	$mime->addAttachment( $file, 'text/plain');
 
	$body = $mime->get();
	$header = $mime->headers($header);
 
   	$smtp["host"] = SMTP_HOST;
    $smtp["port"] = "25";
    $smtp["auth"] = false;
	$smtp["localhost"] = $_SERVER['HTTP_HOST'];
    $smtp["timeout"] = 10;
    $smtp["username"] = SMTP_USER;
    $smtp["password"] = SMTP_PASSWORD;
 
	if(USE_SMTP)
		$mail =&amp; Mail::factory('smtp', $smtp);
	else
		$mail =&amp; Mail::factory('mail');
 
	$res = $mail->send(EMAIL_RECIPIENT, $header, $body);
 
	if($res === true)
		echo "Mail send.";
	else
		debug('Mail sending failed.' . $res->message);
}
 
function debug($msg){
	header("Status: 400 Bad Request");
	echo $msg;
	die();
}
 
send_mail();

In diesem Zusammenhang:

  1. SMPT 450 : Sender address rejected: Domain not found Diese kleine böse Falle hat mich gerade locker eine Stunde...
  2. 554 Helo command rejected: Sorry, localhost is local, not remote Vollkommen unerwartet bekomme ich nun diese Fehlermeldung beim Versenden einer...
  3. Zend_Mail_Storage_Pop3 verschluckt Umlaute im Subject Das verarbeiten von E-Mail ist und bleibt eine Qual. Es...

Mail, PEAR, php

  1. No comments yet.
  1. No trackbacks yet.