Tom1tk: einfache Mime-Mail-Funktion (hoffentlich); 2. Test

Beitrag lesen

Halloa und schönen guten Abend!

Hello, wird wohl doch ne längere Sache... :-)

Entschuldige bitte....

Also: Die Attachments werden verschickt, aber es kommt nur ne*.dat-Datei an. Die Inhalte dieser Dat-Datei passen (umbennenen und überprüft!!) Das geht also, nur heißt die Datei noch falsch??

Was an dem Code sonst noch verbesserungswürdig (ausser sicherheitsabfragen und dergleichen). Ist hier nur vereinfacht zum testen.

Ach ja, dieses eine Leerzeichen bewirkte, dass meine Attachments als Plain-Text versendet wurden.

Was oder für was ist eigentlich die boundary?

VIELEN Dank, weils auch schon so oft gepostet wurde (aber nie richtig fertig ausdiskuiert wurde!!)

Greets

Code:

<?
if ($action==versenden){

$from="$absender";
$recipient="$empfaenger";
$subject="mail-test";

$boundary = strtoupper(md5(uniqid(time())));

$header = "From: $from\n"; //kommt von Formular
$header .= "MIME-Version: 1.0";
$header .= "\nContent-Type: multipart/mixed; boundary="$boundary"";

nach den zwei Zeilenschaltungen beginnt der Mailbody

$header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";

nach dieser Boundary beginnt der erste Mime-Teil

$header .= "\n--$boundary";
$header .= "\nContent-Type: text/plain";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n$text";

#$header .= "\n\n$text";

hier wird das Attachment vorbereitet.

/*###### Hier ohne Array #########################
$fh = fopen($file,"r");
if ($fh)
{
$file_content = fread($fh,filesize($filename));
fclose($fh);
$file_content = chunk_split(base64_encode($file_content),76,"\n");
$header .= "\n--$boundary";
$header .= "\nContent-Type: application/octetstream;"."name="".basename($filename).""";
$header .= "\nContent-Transfer-Encoding: base64";
$header .= "\nContent-Disposition: attachment;"."filename="".basename($filename).""";
$header .= "\n\n$file_content\n";
}

#####################*/

Jetzt mit array

if (is_array($attach))
{
foreach($attach as $filename)
{

$fh = @fopen($filename,"r"); ## da war noch ein Fehler (file->filename)
if ($fh)
{
$file_content = fread($fh,filesize($filename));
fclose($fh);
$file_content = chunk_split(base64_encode($file_content),76,"\n");
$header .= "\n\n--$boundary"; ## hier die Leerzeilen
$header .= "\nContent-Type: application/octetstream;"."name="".basename($filename).""";
$header .= "\nContent-Transfer-Encoding: base64";
$header .= "\nContent-Disposition: attachment;"."filename="".basename($filename).""";
$header .= "\n\n$file_content\n";
}
else
{
$err[] = "Attachment File ".$filename." ließ sich nicht öffnen";
}

} ## end foreach()
} ## endif isarray
else
{
$err[] = "Attachment fehlt.";
}

###Ende Vorbereitung
$header .= "\n--$boundary--";

$ok = mail($recipient,$subject,"",$header);
if ($ok=="true"){print "Nachricht wurde versandt...<br><br>";}
else{print "Konnte Nachricht nicht versenden...<br><br>";}
print $header."<br><br>";#Nur kontrolle
print $file."<br><br>";#nur kontrolle
} //Ende send==True
?>

<html>
<body>
<form action="index.php" method="post" enctype="multipart/form-data" target="_blank">

<form action="index.php" method="post" target="_blank">
Empfänger: <input type="text" name="empfaenger" value=""><br>
Absender: <input type="text" name="absender" value=""><br>
Text: <textarea name="text" rows="10" cols="50" WRAP="VIRTUAL"></TEXTAREA><br>
Attachment: <input type="file" name="attach[]"><br>
Attachment: <input type="file" name="attach[]"><br>
<input type="submit" value="versenden" name="action">
</body>
</html>