Prob mit "Mail mit Attachment " (att.txt-Dateien)

  • Themenstarter Themenstarter Markus_lip
  • Beginndatum Beginndatum
M

Markus_lip

Hallo ich nutze folgenden Quellcode um per php Mails mit Anhang zu verschicken:
PHP:
<?php 
$file = "images/anhang.gif"; 
$file_name = "anhang.gif"; 
$subject = testmail; 
$from = "test@absender.de"; 
$to = "test@emfaenger.de"; 
$content = "bla, bla, bla..."; 
$grenze="grenzlinie"; 

$headers ="MIME-Version: 1.0\r\n"; 
$headers.="From: $from\n"; 
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n"; 
$botschaft="\n--$grenze\n"; 
$botschaft.="Content-transfer-encoding: 8BIT\r\n"; 
$botschaft.="Content-type: text/plain\n\n"; 
$botschaft.= "$content"; 
$botschaft.="\n\n"; 
$botschaft.="\n--$grenze\n"; 
$botschaft.="Content-Type: application/octetstream;\n\tname=$file_name\n"; 
$botschaft.="Content-Transfer-Encoding: base64\n"; 
$botschaft.="Content-Disposition: attachment;\n\tfilename=$file_name\n\n"; 
$zeiger_auf_datei=fopen("$file","rb"); 
$inhalt_der_datei=fread($zeiger_auf_datei,filesize  ("$datei")); 
fclose($zeiger_auf_datei); 
$inhalt_der_datei=chunk_split(base64_encode($inhal  t_der_datei)); 
$botschaft.=$inhalt_der_datei; 
$botschaft.="\n\n"; 
$botschaft.="--$grenze"; 
mail("$to","test mit attachements",$botschaft,$headers); 
?>
Funktioniert soweit ganz gut, nur wird jedesmal zusätzlich eine leere Textdatei "z.B. ATT00019.txt" mitgeschickt.
Kann mir jemand sagen, wo ich den Fehler eingebaut habe?

Vielen Dank im Voraus ;-)
 
äh du bist auch nicht MIME conform,....

der anfang und die zwischenstücke eines boundarys bestehen aus
"--" . $boundaryname
das haste eh richtig.
aber das ende eines boundarys bildet sich aus
"--" . $boundaryname . "--"

Ich hab mal vor kurzem eine filemailer routeine geschrieben, kannste benutzen wenn du willst...

hier:

PHP:
<?php

/*
function SendMail($From, $FromName, $To, $ToName, $Subject, $Text, $Html, $AttmFiles)
$From      ... sender mail address like "my@address.com"
$FromName  ... sender name like "My Name"
$To        ... recipient mail address like "your@address.com"
$ToName    ... recipients name like "Your Name"
$Subject  ... subject of the mail like "This is my first testmail"
$Text      ... text version of the mail
$Html      ... html version of the mail
$AttmFiles ... array containing the filenames to attach like array("file1","file2")
*/

function SendMail($From,$FromName,$To,$ToName,$Subject,$Text,$Html,$AttmFiles) {
	$OB="----=_OuterBoundary_000";              //Konstanten festlegen und fehler abfangen
	$IB="----=_InnerBoundery_001";
	$Html=$Html?$Html:preg_replace("/\n/","<br>",$Text)
		or die("Es wurde weder eine Text noch eine HTML nachricht angegeben.");
	$Text=$Text?$Text:"Diese Nachricht kann nur von einem HTML fähigen Mailprogramm ".
         		  "korrekt angezeigt Werden.";
	if(!isset($From)) die("Eine Absenderaddresse angegeben");
	if(!isset($To)) die("Keine Empfängeraddresse angegeben");


	$headers ="MIME-Version: 1.0\n";
	$headers.="From: ".$FromName." <".$From.">\n";       //Mail-haupt-header vorbereiten
//	$headers.="To: ".$ToName." <".$To.">\n";
	$headers.="Reply-To: ".$FromName." <".$From.">\n";
	$headers.="Content-Type: multipart/mixed;\n\tboundary=\"".$OB."\"\n";

	//Standartnachricht an alte ARPA mail programme
	$Msg ="This is a multi-part message in MIME format.\n";
	$Msg.="\n--".$OB."\n";
	$Msg.="Content-Type: multipart/alternative;\n\tboundary=\"".$IB."\"\n\n";

	//plaintext section
 	$Msg.="\n--".$IB."\n";
	$Msg.="Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n";
	$Msg.="Content-Transfer-Encoding: quoted-printable\n\n";
	$Msg.=$Text."\n\n";

	// html section
	$Msg.="\n--".$IB."\n";
	$Msg.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\n";
	$Msg.="Content-Transfer-Encoding: base64\n\n";
         //base64 um gemäßs RFC822 die ASCII norm einhalten zu können.
         //chunk_split um gemäß RFC2045 alle 76 byte einen zeilenumbruch einzufügen
	$Msg.=chunk_split(base64_encode($Html))."\n\n";

	// Hier endet die nachrichtentext sektion, unten dran sind die attachments.
	$Msg.="\n--".$IB."--\n";

	// attachments
	if($AttmFiles){
		foreach($AttmFiles as $AttmFile){
			$patharray = explode ("/", $AttmFile);
			$FileName=$patharray[count($patharray)-1];
			$Msg.= "\n--".$OB."\n";
                         //Es handelt sich um binäre dateien mit 8bit je byte
			$Msg.="Content-Type: application/octetstream;\n\tname=\"".$FileName."\"\n";
			$Msg.="Content-Transfer-Encoding: base64\n";
                         //Es is ne datei, und heißt $FileName
			$Msg.="Content-Disposition: attachment;\n\tfilename=\"".$FileName."\"\n\n";

                         //Dateien laden und anhängen
			$fd=fopen ($AttmFile, "r");
			$FileContent=fread($fd,filesize($AttmFile));
			fclose ($fd);
                         //RFC 2045 und 822 kompatiblität beibehalten
			$FileContent=chunk_split(base64_encode($FileContent));
			$Msg.=$FileContent;
			$Msg.="\n\n";
		}
	}

	//Jede mail hatt irgendwo mal n ende.
	$Msg.="\n--".$OB."--\n";

         //Und Raus mit der mail
         mail($To,$Subject,$Msg,$headers);
}

/* Anwendungsbeispiel:

$ATTM=array("./mail.php",
           "./pictures/demo03.jpg");

SendMail(
   "chibisuke@chimera-crystals.de","Chimera-Crystals Webmailer",        //Sender
   "chibisuke@web.de","Empfaenger Name",    	  	 //Empfänger
   "Betrifft irgendwas irgendwo",                         //subject
   "This is the first test\n in text format\n.",		 //Nachricht als Plaintext
   "<font color=red>This is the first test in html format.</font>",
                                                          //Nachricht als HTML
   $ATTM);			                         //Attachmentdateinamen als array
?>
*/
 
Zurück