# PHP Email mit Anhang



## creamycewie (15. Mai 2012)

Hi, derzeit nutze ich folgendes Script um Emails zu versenden:


```
// Email verschicken
							
							$betreff = "Ihre Registrierung bei Modius.at";
							$nachricht = "
Mein text
";
							$header = "From: me@you.at" . "\r\n" .
								"Reply-To: me@you.at" . "\r\n" . "Content-Type: text/html; charset=UTF-8\r\n" . "Content-Transfer-Encoding: 8bit\r\n" .
								"X-Mailer: PHP/" . phpversion();
							
							mail($email, $betreff, $nachricht, $header);
```

Wie kann ich hier eine Nachricht anhängen, welche ich mit 
<form method="post" action="Send.php" enctype="multipart/form-data">

<input type="file" name="attachment" /><br />
<br />
<input type="submit"  value="absenden"/>

anhänge?

Und kann ich die $email auch mit mehreren adressen füllen?

danke & LG


----------



## Parantatatam (15. Mai 2012)

Mit Anhängen zu versenden ist eigentlich recht einfach.. also wenn man weiß, wie das im Quelltext aussieht: erstmal musst du deine ganze E-Mail als multipart/mixed definieren und dann eine Boundary:

```
... (andere E-Mail-Kopfzeilen)
Content-Type: multipart/mixed; boundary="**1" (bei den **1 packst du am besten einen SHA1-Hash hin)

--**1
Content-Type: multipart/alternative; boundary="**2" (andere Boundary)

--**2
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

(hier kommt dein Inhalt rein)

--**2--

--**1
Content-Type: (MIME-Typ deiner Datei); name="(Dateiname)"
Content-Disposition: attachment; filename="(Dateiname)"
Content-Transfer-Encoding: base64

(Base64-kodierter Inhalt deiner Datei)

--**1--
```


----------



## creamycewie (15. Mai 2012)

Hi. Soweit so gut, allerdings leider unverständlich.
Was müsst ich hier einsetzen wenn ich eine PDF-Datei versenden will, welche ich zuerst mit 

```
<form method="post" action="Send.php" enctype="multipart/form-data">

<input type="file" name="attachment" /><br />
<br />
<input type="submit" value="absenden"/>
```
 hochgeladen hab


----------



## chickenwing (15. Mai 2012)

Die "Faulen" unter uns (so wie ich z.B.) müssen das Rad aber nicht neu erfinden:
http://phpmailer.worxware.com/
(z.B.)

Ich setze diese Bibliothek bei einigen Projekten ein (u.a. Newsletter-Versand). Der Aufbau ist extrem simpel: Klasse includen, Variablen setzen (im folgnden ein Newsletter-Beispiel sowohl als Text und HTML mit eingebetteten Bildern und Anhang eines Flyers):


```
require("phpmailer/class.phpmailer.php");  

$mail = new PHPMailer();  
$mail->clearAllRecipients(); 		                         // Alle (bisherigen) Empfänger löschen
   
$mail->IsSMTP();                                                      // der Klasse mitteilen, SMTP zu nutzen
$mail->Host     = "smtp.deinedomain.de";               // SMTP server  
   
$mail->From     = "newsletter@deinedomain.de"; 
$mail->FromName = "deinedomain Newsletter"; 
$mail->AddAddress("empfaengeradresse@anderedomain.tld", "Registrierte Newsletter");  
$mail->AddBCC('noch_eine_mailadresse_im_bcc_angeben@empfaengerdomain.tld'); 

// Einlesen der Inhalte 
$filename="em7.html";
$filename_nohtm="em7.txt";
$handle=fopen($filename, "r");
$contents=fread($handle, filesize($filename));
fclose($handle);
$handle=fopen($filename_nohtm, "r");
$altcontents=fread($handle, filesize($filename_nohtm));
fclose($handle);

$mail->AddEmbeddedImage('images/newsletter_header12-11.jpg', 'bild0', 'newsletter_header12-11.jpg'); 
$mail->AddAttachment('images/referenz_20.jpg', 'referenz_20.jpg', 'base64', 'application/octet-stream'); 

$mail->Subject  = "Newsletter Dezember 2011";  
$mail->Body     = $contents; 
$mail->AltBody  = $altcontents;
$mail->WordWrap = 80;  
$mail->IsHTML(true);   
 if(!$mail->Send()) {  
	echo 'Nachricht konnte nicht versandt werden.';  
	echo 'Mailer error: ' . $mail->ErrorInfo;  
} else {  
       echo 'Nachricht wurde versandt.';  
}
```

Das war's. Obiges Beispiel ist schon etwas "komplizierter". Wer Bilder in HTML-Mails einbinden will, sollte sich das übliche Verfahren (z.B. bild0, bild1 usw.) genauer anschauen. Nachladen von Bildern halte ich (aus Sicht des Empfängers) für keine gute Idee.
Wer nur reine Textmails damit versenden möchte, kann sich das Einlesen per fread() sparen und gibt den Text/Inhalt einfach im Script an.
Gegenüber mail() ist der Versand über smtp auch schneller.... allerdings nur dann, wenn man auch viele Mails verschickt (eben Newsletter z.B.).

Greetz
CW


----------



## creamycewie (15. Mai 2012)

Hmmm, das geht alles zu tief, ich will nur mein bestehendes Script um den Dateianhang, welchen ich mittels POST übergeben hab (liegt NICHT IN NEM VERZEICHNISS) erweitern.

Fällt dazu niemandem was ganz simples ein?


----------



## Godstyle (15. Mai 2012)

Hi, versuchs mal hiermet:


```
<?php
$empfaenger = "empfaenger@mailadresse.xy"; // Empfänger E-Mail Adresse
$betreff = "E-Mail mit Anhang"; // Betreff

$dateiname = "bild.gif"; // Dateiname
$dateiname_mail = "anhang.gif";

$id = md5(uniqid(time()));
$dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));

 // Absender Name und E-Mail Adresse
$kopf = "From: Manfred Mustermann <meine@mailadresse.xy>\n";
$kopf .= "MIME-Version: 1.0\n";
$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
$kopf .= "This is a multi-part message in MIME format\n";
$kopf .= "--$id\n";
$kopf .= "Content-Type: text/plain\n";
$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
$kopf .= "E-Mail mit Anhang"; // Inhalt der E-Mail (Body)
$kopf .= "\n--$id";
// Content-Type: image/gif, image/jpeg, image/png 
$kopf .= "\nContent-Type: image/gif; name=$dateiname_mail\n";
$kopf .= "Content-Transfer-Encoding: base64\n";
$kopf .= "Content-Disposition: attachment; filename=$dateiname_mail\n\n";
$kopf .= chunk_split(base64_encode($dateiinhalt));
$kopf .= "\n--$id--";
mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden
?>
```


----------



## creamycewie (16. Mai 2012)

@GodSinner,

danke, doch was müsst ich hier für $dateiname eingeben?
bzw. wie kann ich auslesen, welchen Dateinamen die Geuppte Datei hat?
mittels 

```
$_FILES['datei1'] ['tmp_name']
```
?


danke schonmal und LG


----------



## Godstyle (16. Mai 2012)

Hi, falls du mich mit GodSinner meintest, so meine antwort.

Du hast die Möglichkeit mit ['filename'] den derzeitigen Namen zu ermitteln.

Dann wäre das Script wie folgt anzupassen:


```
$dateiname = $_FILES['attachment']['name'];


$_FILES['attachment']['tmp_name'] #enthält den namen der datei in einem temporeren Verzeichnis.
$_FILES['attachment']['name']     #enthält den namen den die datei vor dem upload hatte
```


lg


----------



## creamycewie (17. Mai 2012)

Ich habs nun folgend versucht:


```
<?php

error_reporting(E_ALL);
$empfaenger = "meinemail@me.de"; // Empfänger E-Mail Adresse
$betreff = "Test"; // Betreff

$dateiname = $_FILES['attachment']['tmp_name']; // Dateiname
$dateiname_mail = "test.pdf";

$id = md5(uniqid(time()));
$dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));

 // Absender Name und E-Mail Adresse
$kopf = "From: test <test@mde.de>\n";
$kopf .= "MIME-Version: 1.0\n";
$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
$kopf .= "This is a multi-part message in MIME format\n";
$kopf .= "--$id\n";
$kopf .= "Content-Type: text/plain\n";
$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
$kopf .= "Testnachricht"; // Inhalt der E-Mail (Body)
$kopf .= "\n--$id";
// Content-Type: image/gif, image/jpeg, image/png 
$kopf .= "\nContent-Type: image/gif; name=$dateiname_mail\n";
$kopf .= "Content-Transfer-Encoding: base64\n";
$kopf .= "Content-Disposition: attachment; filename=$dateiname_mail\n\n";
$kopf .= chunk_split(base64_encode($dateiinhalt));
$kopf .= "\n--$id--";
mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden

header ("Location: admin.php?page=5");
?>
```

Ich erhalte keinen Fehler, allerdings auch keine Email.

woran liegt das?


----------



## Godstyle (17. Mai 2012)

hast du auch in Zeile 2 den empfäger geändert?

wenn ja, dann nichh mal das header raus und lass die alle variablen anzeigen um zu sehen ob sie richtig belegt wurden.


----------



## creamycewie (17. Mai 2012)

Ja, ich geb mir mal die Varriablen aus...


----------



## bofh1337 (19. Mai 2012)

Kann die PHP-Funktion mail (); eigentlich eine Mail mit Anhang verschicken? Ich habe sowas noch nie getestet, sondern eine SMTP-Klasse gebaut, dort kann ich dann sogar auch Bounce Messages prüfen


----------



## Godstyle (19. Mai 2012)

Hallo bofh1337,

ja, mail() ist in der Lage Dateien mit anhang zu versenden und das script wie ich gepostet habe funktioniert eigentlich auch.

lg


edit, auch mehrere empfänger sind recht einfach umzusetzen, einfach:


```
$empfaenger  = 'max@example.com' . ', '; // beachten das Komma
$empfaenger .= 'moritz@example.com';
```

geht auch als array wenn du an mehrere User senden willst. 

Was genau meinst du mit Bounce messages, hab nur kurz nachgesehen aber nicht direkt das passende gefunden.


----------



## Andreas Dunstheimer (19. Mai 2012)

Bounce-messages sind die vom Mailserver generierten Auto-replies ... also z.B. "address unknown" oder "mailbox over quota" u.ä.


----------



## creamycewie (20. Mai 2012)

Rauskommen tut folgendes:


> string(7476) "From: Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=067d1d8871f280cda0c9a39b620ae94f This is a multi-part message in MIME format --067d1d8871f280cda0c9a39b620ae94f Content-Type: text/plain Content-Transfer-Encoding: 8bit
> Text
> --067d1d8871f280cda0c9a39b620ae94f Content-Type: application/pdf; name=test.pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=test.pdf JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29k ZT4+CnN0cmVhbQp4nI1YS28bNxC+61cQuXQJdDd8L+lbg6YF+giaxkCBJD34IcuuLdmxbAfwD8+5 M9wlZ2TTjmMIoTjvmY8zpL4INWgjFP6VxdF68WVhlRJh1GEIo1gvXPCxfr2YvgLHEEKEr8hL304X /4jNQovVzr6zqMHpIK6Xi5PnSO8XaohgK0ZUEbUIwVi063S0AnzMXM4HJ2xyWQNsBuP0rDpZYaOZ VHMR1FUIOxJK/AqfFUQdB4v/chr4+mgt3uwvXv89ouD+CUSHu1qY5IdkxOiC2F8vOiH3/wMuUB+R q7dhcFH01gwexI4Xn7qPsjeoN8VuKdGVoEx3LXsHmybE7kb2CunBp+5MYnTBuu5kZ7c33XmVPQBZ kALiv/u/ZdvGoe002CB6P05mP0jT3SLnndQg4n1A7l7HMIxG9JAU5ybOt7K34JDrVsh+Cewb+OD/ a9lrsG7BcaAIWGTba4lfwKc3YCM7dwGkYyRtQeoIPqdST5RrVIECWRKtHOJiKSfFN8iDQlfwucAv B1INKUVv/US8l16pKdBSCqPtEJ3oTZqTPFXBQOR/4PqHqSA2R8gqFzSKuTgOymHxPnV/yj4MJgLc wC5kxESLqehBvw8aQwE62DeYl7IJoY/DqJ3T3e8Q3WA0ADnXdpK/IHp13gDuwWMN2AlT1j93WFCn k+deMIWfJZX4CRA6Z+ZQCg7T47C18aAczkVOWg77lMKisG/IbSGLE8fESQFuaJM4PyDMg7MKOSv9 guI5rPJbZupGUgKr1JZ2ycArNKCdGUdEbMndNeVuVQ1ckqoNr2Chr0nojFewEdZBS4jIb8gTpolF zRK4Pcp5dymqwLlZCOuKiQOSu66bh7wadclUUd62V80iNMt9/0pa759FmsVDE7+HtBBxoEBvH8Yw Ie1R+ry3JX0mdj+DZyoXlVVnw6tXNpcP84FA28o+gnfRjyxyljlCxI8MUDVuVcmJZIYG9H6RvR/U aNwOSA55xygVvK2bOxVsQMdUTkWcmpZEJxktg8OALawKdY8CsnXTkp69Ku1pU5WBAHMWmkPv4mDm ccAKtYMsM8Yyb6ZZVyGi0gCDGQqJ3RirnoeDmQZWtDnP00qQlgZ+jH2o6K59ksUzzmCCwo4SUyen LlG3zUf/IIoSPDv632qKV80DxlJ2dMqP67PN8y9qI7ct9J+3gL7knGW+e53Hux6xrLmezZNzQqC5 5IOr6F612k+75/AwResUssZ/2czZXbsJk2HWqwYq/ROtyoR8Bautar4QNPuVw2IDfqeCz8dc27Fr O7pqtSNW0OMWnXLyE41IVuUT2Ug69c3DF4OoOdXbI2PT6C0fmqOsGQjrZ08AgVB61gSVkM/mlOX8 G81Mdi3Y2+kApbDQPwASvdWIgwx+0er7vJ82PGqtzPcYGz34O7bdS237F9sOzHbDIq3iS22nNmMz lY1x1lb+5AnWLuHNQXt4yhg6wdjh54t9PcwJ2xyIjvkI9/BM9fPF+h2at8nHCKdYATKcH7Ft4qaz sftK9GWmWzXCgSgruLBpwI8yGbpqMAbOK14uCwMJCewXCbAJN3g/RHhoxh2ZDak6bohv0RE9muhm 79ClK5K5bXh33pK5p82DynlaVxfMpb3qsqjimkyOMEeAnlKpT8rvFXjXGuNwoowm1IvCR3wnQXJj 7hIwd6KdegO8bF1CB+FVn3TIWclLqAVOnome+O45eAOAwZdq1mRioiuH9Q6ftmoym7tM5p0NmMBW V5W6V/deN1ZfMSmNJULPpRHmDASntFF+umX6mHLbnpXfVTPFYW+4zBHtnhYZMj7lwCunSw4MPhrK aknCzHbT98NGMl43ksG8XBV/njPjDFyXWBCXRWjzwGBmZJqadKbzvNLZ5j3JM1UzkkY3cl1ntDyR 09Pa4cN2RscZN/U4eKaIVeshpDJ9jUdFm5SgMgDEQSk73bAAIvgDioXzNdnUVVzINCgbOD4u62oj K1e1rMsPBN746ce4rFEV1lSlmbuValpU2qx85KB55Cr6YPGHwOzN7uHJebBFiy2+vt1fvIe//wEH ECHdZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjE1MzEKZW5kb2JqCjQgMCBvYmoKPDwvVHlwZS9Q YWdlL01lZGlhQm94IFswIDAgNTk1IDg0Ml0KL1JvdGF0ZSAwL1BhcmVudCAzIDAgUgovUmVzb3Vy Y2VzPDwvUHJvY1NldFsvUERGIC9UZXh0XQovRm9udCAxMCAwIFIKPj4KL0NvbnRlbnRzIDUgMCBS Cj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbCjQgMCBSCl0gL0NvdW50 IDEKPj4KZW5kb2JqCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIKL01ldGFk YXRhIDEyIDAgUgo+PgplbmRvYmoKMTAgMCBvYmoKPDwvUjcKNyAwIFIvUjgKOCAwIFIvUjkKOSAw IFI+PgplbmRvYmoKNyAwIG9iago8PC9CYXNlRm9udC9UaW1lcy1Sb21hbi9UeXBlL0ZvbnQKL1N1 YnR5cGUvVHlwZTE+PgplbmRvYmoKOCAwIG9iago8PC9CYXNlRm9udC9IZWx2ZXRpY2EtQm9sZC9U eXBlL0ZvbnQKL1N1YnR5cGUvVHlwZTE+PgplbmRvYmoKOSAwIG9iago8PC9CYXNlRm9udC9IZWx2 ZXRpY2EvVHlwZS9Gb250Ci9FbmNvZGluZyAxMSAwIFIvU3VidHlwZS9UeXBlMT4+CmVuZG9iagox MSAwIG9iago8PC9UeXBlL0VuY29kaW5nL0RpZmZlcmVuY2VzWwoyNDYvb2RpZXJlc2lzXT4+CmVu ZG9iagoxMiAwIG9iago8PC9UeXBlL01ldGFkYXRhCi9TdWJ0eXBlL1hNTC9MZW5ndGggMTc3Nj4+ c3RyZWFtCjw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlk Jz8+Cjw/YWRvYmUteGFwLWZpbHRlcnMgZXNjPSJDUkxGIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0n YWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J1hNUCB0b29sa2l0IDIuOS4xLTEzLCBmcmFtZXdvcmsg MS42Jz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk Zi1zeW50YXgtbnMjJyB4bWxuczppWD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KPHJk ZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JzE4OTI2YzFjLTU1NjUtMTFlMS0wMDAwLWU5NDM4ZGEz YWMwJiMzO0hTViYjNzsyMDEyLTAyLTA5VDExOjMzOjU5KzAxOjAwJmFwb3M7ICYjMTY7OiYjMTQz O1YmIzc7LCYjMjtAJiMxNjsmIzQ7JyB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRm LzEuMy8nPjxwZGY6UHJvZHVjZXI+R1BMIEdob3N0c2NyaXB0IDkuMDQ8L3BkZjpQcm9kdWNlcj4K PHBkZjpLZXl3b3Jkcz4oKTwvcGRmOktleXdvcmRzPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpE ZXNjcmlwdGlvbiByZGY6YWJvdXQ9JzE4OTI2YzFjLTU1NjUtMTFlMS0wMDAwLWU5NDM4ZGEzYWMw JiMzO0hTViYjNzsyMDEyLTAyLTA5VDExOjMzOjU5KzAxOjAwJmFwb3M7ICYjMTY7OiYjMTQzO1Ym Izc7LCYjMjtAJiMxNjsmIzQ7JyB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC8nPjx4bXA6TW9kaWZ5RGF0ZT4yMDEyLTAyLTA5VDExOjMzOjU5KzAxOjAwPC94bXA6TW9kaWZ5 RGF0ZT4KPHhtcDpDcmVhdGVEYXRlPjIwMTItMDItMDlUMTE6MzM6NTkrMDE6MDA8L3htcDpDcmVh dGVEYXRlPgo8eG1wOkNyZWF0b3JUb29sPlBERkNyZWF0b3IgVmVyc2lvbiAxLjIuMzwveG1wOkNy ZWF0b3JUb29sPjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0n MTg5MjZjMWMtNTU2NS0xMWUxLTAwMDAtZTk0MzhkYTNhYzAmIzM7SFNWJiM3OzIwMTItMDItMDlU MTE6MzM6NTkrMDE6MDAnIHhtbG5zOnhhcE1NPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv bW0vJyB4YXBNTTpEb2N1bWVudElEPSd1dWlkOjE4OTI2YzFjLTU1NjUtMTFlMS0wMDAwLWU5NDM4 ZGEzYWMwuF8mIzEyOTt30mMmIzMxOyYjMTY7Jy8+CjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0 PScxODkyNmMxYy01NTY1LTExZTEtMDAwMC1lOTQzOGRhM2FjMCYjMztIU1YmIzc7MjAxMi0wMi0w OVQxMTozMzo1OSswMTowMCcgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8x LjEvJyBkYzpmb3JtYXQ9J2FwcGxpY2F0aW9uL3BkZic+PGRjOnRpdGxlPjxyZGY6QWx0PjxyZGY6 bGkgeG1sOmxhbmc9J3gtZGVmYXVsdCc+WmVydGlmaWthdDwvcmRmOmxpPjwvcmRmOkFsdD48L2Rj OnRpdGxlPjxkYzpjcmVhdG9yPjxyZGY6U2VxPjxyZGY6bGk+Q3JlYW15Q2V3aWU8L3JkZjpsaT48 L3JkZjpTZXE+PC9kYzpjcmVhdG9yPjxkYzpkZXNjcmlwdGlvbj48cmRmOlNlcT48cmRmOmxpPigp PC9yZGY6bGk+PC9yZGY6U2VxPjwvZGM6ZGVzY3JpcHRpb24+PC9yZGY6RGVzY3JpcHRpb24+Cjwv cmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94 cGFja2V0IGVuZD0ndyc/PgplbmRzdHJlYW0KZW5kb2JqCjIgMCBvYmoKPDwvUHJvZHVjZXIoR1BM IEdob3N0c2NyaXB0IDkuMDQpCi9DcmVhdGlvbkRhdGUoRDoyMDEyMDIwOTExMzM1OSswMScwMCcp Ci9Nb2REYXRlKEQ6MjAxMjAyMDkxMTMzNTkrMDEnMDAnKQovVGl0bGUoXDM3NlwzNzdcMDAwWlww MDBlXDAwMHJcMDAwdFwwMDBpXDAwMGZcMDAwaVwwMDBrXDAwMGFcMDAwdCkKL0NyZWF0b3IoXDM3 NlwzNzdcMDAwUFwwMDBEXDAwMEZcMDAwQ1wwMDByXDAwMGVcMDAwYVwwMDB0XDAwMG9cMDAwclww MDAgXDAwMFZcMDAwZVwwMDByXDAwMHNcMDAwaVwwMDBvXDAwMG5cMDAwIFwwMDAxXDAwMC5cMDAw MlwwMDAuXDAwMDMpCi9BdXRob3IoXDM3NlwzNzdcMDAwQ1wwMDByXDAwMGVcMDAwYVwwMDBtXDAw MHlcMDAwQ1wwMDBlXDAwMHdcMDAwaVwwMDBlKQovS2V5d29yZHMoKQovU3ViamVjdCgpPj5lbmRv YmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMTgzNyAwMDAwMCBuIAowMDAw MDA0MDgxIDAwMDAwIG4gCjAwMDAwMDE3NzggMDAwMDAgbiAKMDAwMDAwMTYzNiAwMDAwMCBuIAow MDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDE2MTYgMDAwMDAgbiAKMDAwMDAwMTk1MCAwMDAwMCBu IAowMDAwMDAyMDE2IDAwMDAwIG4gCjAwMDAwMDIwODUgMDAwMDAgbiAKMDAwMDAwMTkwMiAwMDAw MCBuIAowMDAwMDAyMTY1IDAwMDAwIG4gCjAwMDAwMDIyMjggMDAwMDAgbiAKdHJhaWxlcgo8PCAv U2l6ZSAxMyAvUm9vdCAxIDAgUiAvSW5mbyAyIDAgUgovSUQgWzxGODEyNjBENEE4MDg0ODIyRDcz NDQ2MzBFMUUzMjA4RD48RjgxMjYwRDRBODA4NDgyMkQ3MzQ0NjMwRTFFMzIwOEQ+XQo+PgpzdGFy dHhyZWYKNDUwNgolJUVPRgo= --067d1d8871f280cda0c9a39b620ae94f--"




bei folgendem code:


```
<?php

error_reporting(E_ALL);
$empfaenger = "test2@meinedomain.at"; // Empfänger E-Mail Adresse
$betreff = "Test"; // Betreff

$dateiname = $_FILES['attachment']['tmp_name']; // Dateiname
$dateiname_mail = "test.pdf";

$id = md5(uniqid(time()));
$dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));

 // Absender Name und E-Mail Adresse
$kopf = "From: Test<test@meinedomain.at>\n";
$kopf .= "MIME-Version: 1.0\n";
$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
$kopf .= "This is a multi-part message in MIME format\n";
$kopf .= "--$id\n";
$kopf .= "Content-Type: text/plain\n";
$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
$kopf .= "Test"; // Inhalt der E-Mail (Body)
$kopf .= "\n--$id";
// Content-Type: image/gif, image/jpeg, image/png 
$kopf .= "\nContent-Type: application/pdf; name=$dateiname_mail\n";
$kopf .= "Content-Transfer-Encoding: base64\n";
$kopf .= "Content-Disposition: attachment; filename=$dateiname_mail\n\n";
$kopf .= chunk_split(base64_encode($dateiinhalt));
$kopf .= "\n--$id--";
mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden

var_dump ($kopf);
//header ("Location: admin.php?page=5");
?>
```

Woran kann der fehler liegen?

Danke & LG


----------



## Godstyle (20. Mai 2012)

Huhu,

ich habe das script grade getestet, es läuft Problemlos und auch der Anhang ist kein Problem.

Um dem Fehler auf die spur zu kommen:

1. liegt das script auf einem online Server oder versuchst du es evt vom Localhost aus, denn das kann nicht klappen.

2. Lass das Formular mal ganz weg, dazu nimmst du das script und änderst die makierten zeilen:


```
error_reporting(E_ALL);
$empfaenger = "xxxx@xxx.de"; // eine gültige email angeben am besten deine eigene
$betreff = "Test"; // Betreff

$dateiname = "1.jpg"; // Dateiname und dateiname_mail identisch
$dateiname_mail = "1.jpg";

$id = md5(uniqid(time()));
$dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));

 // Absender Name und E-Mail Adresse
$kopf = "From: Test<test@meinedomain.at>\n";
$kopf .= "MIME-Version: 1.0\n";
$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
$kopf .= "This is a multi-part message in MIME format\n";
$kopf .= "--$id\n";
$kopf .= "Content-Type: text/plain\n";
$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
$kopf .= "Test"; // Inhalt der E-Mail (Body)
$kopf .= "\n--$id";
// Content-Type: image/gif, image/jpeg, image/png 
$kopf .= "\nContent-Type: application/pdf; name=$dateiname_mail\n";
$kopf .= "Content-Transfer-Encoding: base64\n";
$kopf .= "Content-Disposition: attachment; filename=$dateiname_mail\n\n";
$kopf .= chunk_split(base64_encode($dateiinhalt));
$kopf .= "\n--$id--";
mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden
```

wenn du das so geändert hast lad mal ein Bild hoch, speichere es direkt neben diesem script im selben Ordner.

Nun rufe diese Datei direkt auf, du wirst zwar ein weises bild haben nur sollte dann die Mail ankommen. Hab es mit einer jpg datei getestet und klappte wunderbar.

Sag dann bescheid was sich ergeben hat.

lg


----------



## creamycewie (20. Mai 2012)

Hi, zu 1.) nein, es liegt am Server.

zu 2tens, versuch ich nachher, hoffe es geht ;-)


----------



## Godstyle (20. Mai 2012)

Sry wegen neuem Post.

SO ich habe mich mal hingesetzt und in folgender kombination klappt alles wunderbar, zunachst wir das mail script includet, ich poste dir mal das gesammte form script:


```
<?php
	require_once('mail_anhang.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>

<body>
<?php 

if(isset($scs_msg) && !empty($scs_msg)) {
	echo $scs_msg; }?>
<form method="post" action="" enctype="multipart/form-data" name="mail_form">

<input type="file" name="attachment" /><br />
<br />
<input type="submit" value="absenden" name="submit_mail_form"/>
</form>
</body>
</html>
```

daneben erstellst du dann die Datei: mail_anhang.php.

Diese beinhaltet folgendes:


```
<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_POST['submit_mail_form'])) {
	echo "test2";
$empfaenger = "xxxx@xxxx.xx"; // Empfänger E-Mail Adresse
$betreff = "Test"; // Betreff


$dateiname = $_FILES['attachment']['tmp_name']; // Dateiname
$dateiname_mail = "testdatei";
$id = md5(uniqid(time()));
$dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));

 // Absender Name und E-Mail Adresse
$kopf = "From: Test<test@meinedomain.at>\n";
$kopf .= "MIME-Version: 1.0\n";
$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
$kopf .= "This is a multi-part message in MIME format\n";
$kopf .= "--$id\n";
$kopf .= "Content-Type: text/plain\n";
$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
$kopf .= "Test"; // Inhalt der E-Mail (Body)
$kopf .= "\n--$id";
// Content-Type: image/gif, image/jpeg, image/png 
$kopf .= "\nContent-Type: application/pdf; name=$dateiname_mail\n";
$kopf .= "Content-Transfer-Encoding: base64\n";
$kopf .= "Content-Disposition: attachment; filename=$dateiname_mail\n\n";
$kopf .= chunk_split(base64_encode($dateiinhalt));
$kopf .= "\n--$id--";
mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden
$scs_msg ="Datei wurde gesendet";
}

?>
```


Dort änderst du nun bitte noch die mail adresse, ich habe es mit verschiedenen dateien getestet, jpg, pdf, gif, u.a. dateien, habe alle bekommen also das script hat keine einschränkungen, dies solltest du jedoch machen falls du usern erlauben willst dateien zu senden.


----------

