| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

26-05-2007, 10:22
|
|
enforcer
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 80
|
|
email mit anhang - einer zuviel?
Hallo..
Folgendes Problem: die Email wird mit Anhang verschickt. Die im Array enthaltenen Dokumente sind vorhanden. Allerdings habe ich noch eine attachment.pdf im Anhang? Wo kommt die die her?
PHP-Code:
<?
// Festlegen der Variablen
$dokumente_num = count($dokumente);
$Empfaenger = "meine@email.de";
$betreff = "Meine Daten";
$Header = "From: mir<meine@email.de>";
$Content = "";
// Beginn der Mail
$Trenner = md5(uniqid(time()));
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= $Content;
$Header .= "\n";
// Dokumente anhängen
for ($i=0; $i <= $dokumente_num; $i++) {
$filename = $pdf_pfad.$dokumente[$i];
$filenameMail = $dokumente[$i];
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: application/pdf; name=".$filenameMail;
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=".$filenameMail;
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($filename, "r"), filesize($filename));
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
}
$Header .= "--$Trenner--";
$status = mail($Empfaenger, $betreff, "", $Header);
?>
__________________
Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)
|

26-05-2007, 10:57
|
|
ArSeN
Registrierter Benutzer
|
|
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
|
|
Verwende anstelle von \n mal \r\n
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
|

31-07-2007, 09:13
|
|
xJonx
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Ort: Bielefeld
Beiträge: 414
|
|
ich hab leider gerade das selbe problem.
allerdings wirkt das \r\n nicht ...
ansonsten habe ich den selben script (fast)
woran könnte es noch liegen?
__________________
Design & Coding with a breeze of madness at xjonx
|

31-07-2007, 09:57
|
|
xkl1986
Member
|
|
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
|
|
Der Abschluss des Headers erfolgt mit \r\n\r\n
statt
PHP-Code:
$Header .= "--$Trenner--";
also
PHP-Code:
$Header .= "--$Trenner--\r\n\r\n";
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
|

31-07-2007, 10:04
|
|
xJonx
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Ort: Bielefeld
Beiträge: 414
|
|
ich hab ansich noch ne gute lösung:
PHP-Code:
for ($i = 0; $i < $docs; $i++) {
und nicht
PHP-Code:
for ($i = 0; $i <= $docs; $i++) {
Aber danke.
__________________
Design & Coding with a breeze of madness at xjonx
|

31-07-2007, 10:30
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Und wieso übergibst du den Inhalt der Email und die Header der einzelnen Parts in Header an Mail ? afaik gehören Header des Emailparts und Inhalt des Parts in eine eigene Var welche als body an mail() übergeben wird
Zitat:
|
bool mail ( string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] )
|
also die Header der einzelnen Parts und deren Inhalt gehören in message und nicht in additional headers. Dorthin gehören nur die Angaben, die Email weit gültig sind.
Gruss
tobi
|

31-07-2007, 10:53
|
|
xJonx
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Ort: Bielefeld
Beiträge: 414
|
|
ja weiß ich ja ... nur leider krieg ich das nicht fehler frei getrennt.
sonst würde ich es auch lieber so machen ...
__________________
Design & Coding with a breeze of madness at xjonx
|

31-07-2007, 10:59
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Zitat:
|
nur leider krieg ich das nicht fehler frei getrennt.
|
und dann behälst du es lieber fehlerbehaftet zusammen
Was spricht denn dagegen ein Var body einzuführen
PHP-Code:
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$body .= //Ab hier nur noch Body verwenden
Gruss
tobi
|

31-07-2007, 13:28
|
|
xJonx
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Ort: Bielefeld
Beiträge: 414
|
|
also so, am bsp:
PHP-Code:
<?
$dokumente_num = count($dokumente);
$Empfaenger = "meine@email.de";
$betreff = "Meine Daten";
$header = "From: mir<meine@email.de>";
$Content = "";
// Beginn der Mail
$Trenner = md5(uniqid(time()));
$header .= "\n";
$header .= "MIME-Version: 1.0";
$header .= "\n";
$header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$header .= "\n\n";
$body .= "This is a multi-part message in MIME format";
$body .= "\n";
$body .= "--$Trenner";
$body .= "\n";
$body .= "Content-Type: text/plain";
$body .= "\n";
$body .= "Content-Transfer-Encoding: 8bit";
$body .= "\n\n";
$body .= $Content;
$body .= "\n";
// Dokumente anhängen
for ($i=0; $i <= $dokumente_num; $i++) {
$filename = $pdf_pfad.$dokumente[$i];
$filenameMail = $dokumente[$i];
$body .= "--$Trenner";
$body .= "\n";
$body .= "Content-Type: application/pdf; name=".$filenameMail;
$body .= "\n";
$body .= "Content-Transfer-Encoding: base64";
$body .= "\n";
$body .= "Content-Disposition: attachment; filename=".$filenameMail;
$body .= "\n\n";
$Dateiinhalt = fread(fopen($filename, "r"), filesize($filename));
$body .= chunk_split(base64_encode($Dateiinhalt));
$body .= "\n";
}
$body .= "--$Trenner--";
$status = mail($Empfaenger, $betreff, $body, $header);
?>
__________________
Design & Coding with a breeze of madness at xjonx
|

31-07-2007, 21:12
|
|
enforcer
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 80
|
|
php5 & mysql5 sei dank gehts nun auch einfacher
PHP-Code:
<?php
// Festlegen der Variablen
$dokumente_num = count($dokumente);
$Empfaenger = "deine@email.de";
$Betreff = "Eine Email mit Anhang für PHP-Resource";
$Absender = "From: email <mein@email.de>";
$Nachricht = "txt der mail"
// Aufbau der Nachricht und des Anhangs
for ($i=0; $i <= $dokumente_num-1; $i++) {
$Nachricht .= "\r\n";
$Nachricht .= "begin 666 ".$dokumente_num[$i]."\r\n";
$Nachricht .= convert_uuencode(fread(fopen($dokumente_num[$i], "r"), filesize($dokumente_num[$i])));
$Nachricht .= "end\r\n";
}
mail($Empfaenger, $Betreff, $Nachricht, $Absender);
?>
so geht bei mir optimal und auch bei mehreren anhängen ganz einfach
__________________
Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)
|

29-07-2009, 14:06
|
|
rossixx
Registrierter Benutzer
|
|
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 461
|
|
bei mir kein anhang
PHP-Code:
$Empfaenger = "$email_ziel";
$betreff = "$betreff";
$header = "From: mir<meine@email.de>";
$header .= "To: ".$email_ziel."\r\n";
$Content = "xyz";
// Beginn der Mail
$Trenner = md5(uniqid(time()));
$header .= "\n";
$header .= "MIME-Version: 1.0";
$header .= "\r\n";
$header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$header .= "\n\n";
$body = $Content;
$body .= "\r\n";
$body .= "This is a multi-part message in MIME format";
$body .= "\n";
$body .= "--$Trenner--";
$body .= "\n";
$body .= "Content-Type: text/plain";
$body .= "\n";
$body .= "Content-Transfer-Encoding: 8bit";
$body .= "\n\n";
//$body .= $Content;
$body .= "\n";
if ($anhang_1_name) {
$filename = "tmp_upload/".$anhang_1_name;
$filenameMail = $anhang_1_name;
$body .= "--$Trenner--";
$body .= "\n";
$body .= "Content-Type: application/pdf; name=".$filenameMail;
$body .= "\n";
$body .= "Content-Transfer-Encoding: base64";
$body .= "\n";
$body .= "Content-Disposition: attachment; filename=".$filenameMail;
$body .= "\n\n";
$fff = chunk_split(base64_encode(file_get_contents($filename)));
echo "f=$fff <br> name = $filename";
$body .= "\r\n";
}
$body .= "--$Trenner--";
$status = mail($Empfaenger, $betreff, $body, $header);
sobald ich $fff in den body hänge ( $body = .$fff; ) wird keine email versendet.
ohne gehts aber dann is auch kein anhang dran.
|

29-07-2009, 14:56
|
|
rossixx
Registrierter Benutzer
|
|
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 461
|
|
Lösung gefunden - Email mit Anhang
PHP-Code:
function email_anhang( $email_ziel, $betreff, $mail_text, $absender, $anhang_1_name ){
$boundary = md5(uniqid(rand(), 1));
$header ="MIME-Version: 1.0\n";
$header.="From: $absender\n";
$header.="Content-Type: multipart/mixed; boundary=" . $boundary . "\n";
$msg="\n--" . $boundary . "\n";
$msg.="Content-Type: text/html;charset=iso-8859-1\n";
$msg.="Content-Transfer-Encoding: base64\n\n";
$msg.= chunk_split(base64_encode("
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"
\"http://www.w3.org/TR/REC-html40/loose.dtd\">
<html><head>
<title>$betreff</title>
</head><body>
<b>$mail_text - Das ist noch eine Testmail mit Anhang.</b>
</body></html>\n"));
$msg.="\n--" . $boundary . "\n";
$msg.="Content-Type: Application/pdf; name=$anhang_1_name\n";
$msg.="Content-Transfer-Encoding: base64\n";
$msg.="Content-Disposition:attachment;filename=$anhang_1_name\n\n";
$f=fopen("tmp_upload/$anhang_1_name","rb");
$msg.=chunk_split(base64_encode(fread($f,filesize("tmp_upload/$anhang_1_name"))));
fclose($f);
$msg.="\n--" . $boundary . "\n";
$status = mail($email_ziel, $betreff, $msg, $header);
return $status;
}
|

29-07-2009, 15:15
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Der letzte MIME-Part einer Multipart-Message muss aber mit abgeschlossen werden.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

29-07-2009, 15:32
|
|
rossixx
Registrierter Benutzer
|
|
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 461
|
|
aber sonst läuft es
welche zeile meinst du ????
|

29-07-2009, 15:35
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
PHP-Code:
$msg.="\n--" . $boundary . "\n"; // <==== die hier $status = mail($email_ziel, $betreff, $msg, $header); return $status;
Wenn es sonst läuft, ist das Glück würde ich sagen. Es gibt Internet-Standards aber nicht ohne Grund und die sollte man einhalten.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|