Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Email mit Anhang    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
     Email mit Anhang Zitat | Bearbeiten

Diese Funktion sendet eine Email mit einer Datei als Anhang.

Wenn man Emails versendet, dann möchte man ja oft eine Datei als Anhang mitversenden. Dies können z.B. Bilder/Logos sein, Archive oder einfach die Email als HTML-Datei, um Darstellungsprobleme zu verhindern.
Mit dieser Funktion kann man beliebig viele Dateien als Anhang versenden. Diese Dateien können z.B. hochgeladen werden, oder bereits auf dem Server gespeichert sein.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
<?php
function mail_att($to,$subject,$message,$anhang)
   {
   
$absender "Mein Name";
   
$absender_mail "ich@domain";
   
$reply "antwort@adresse";

   
$mime_boundary "-----=" md5(uniqid(mt_rand(), 1));

   
$header  ="From:".$absender."<".$absender_mail.">\n";
   
$header .= "Reply-To: ".$reply."\n";

   
$header.= "MIME-Version: 1.0\r\n";
   
$header.= "Content-Type: multipart/mixed;\r\n";
   
$header.= " boundary=\"".$mime_boundary."\"\r\n";

   
$content "This is a multi-part message in MIME format.\r\n\r\n";
   
$content.= "--".$mime_boundary."\r\n";
   
$content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n";
   
$content.= "Content-Transfer-Encoding: 8bit\r\n\r\n";
   
$content.= $message."\r\n";

   
//$anhang ist ein Mehrdimensionals Array
   //$anhang enthält mehrere Dateien
   
if(is_array($anhang) AND is_array(current($anhang)))
      {
      foreach(
$anhang AS $dat)
         {
         
$data chunk_split(base64_encode($dat['data']));
         
$content.= "--".$mime_boundary."\r\n";
         
$content.= "Content-Disposition: attachment;\r\n";
         
$content.= "\tfilename=\"".$dat['name']."\";\r\n";
         
$content.= "Content-Length: .".$dat['size'].";\r\n";
         
$content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n";
         
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
         
$content.= $data."\r\n";
         }
      
$content .= "--".$mime_boundary."--"
      }
   else 
//Nur 1 Datei als Anhang
      
{
      
$data chunk_split(base64_encode($anhang['data']));
      
$content.= "--".$mime_boundary."\r\n";
      
$content.= "Content-Disposition: attachment;\r\n";
      
$content.= "\tfilename=\"".$anhang['name']."\";\r\n";
      
$content.= "Content-Length: .".$dat['size'].";\r\n";
      
$content.= "Content-Type: ".$anhang['type']."; name=\"".$anhang['name']."\"\r\n";
      
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
      
$content.= $data."\r\n";
      } 
      
    
   

   if(@
mail($to$subject$content$header)) return true;
   else return 
false;
   }
?>


$anhang hat dabei folgende Struktur:
$anhang["name"] = Name der Datei
$anhang["size"] = Größe der Datei in Byte
$anhang["type"] = MIME-Dateityp
$anhang["data"] = Dateiinhalt

Für mehrere Dateien einfach $anhang als mehrdimensionales Array übergeben.

Z.B. so:
$anhang[] = array("name"=>$name1, "size"=>$size1, "type"=>$type1, "data"=>$data1);
$anhang[] = array("name"=>$name2, "size"=>$size2, "type"=>$type2, "data"=>$data2);




Also die Funktion könnte man beim Datei-Upload z.B. so benutzt:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php
$anhang 
= array();
$anhang["name"] = $_FILES['datei_feld']['name'];
$anhang["size"] = $_FILES['datei_feld']['size'];
$anhang["type"] = $_FILES['datei_feld']['type'];
$anhang["data"] = implode("",file($_FILES['datei_feld']['tmp_name']));

mail_att("empf@domain","Email mit Anhang","Im Anhang ist eine Datei",$anhang);
?>


Falls man eine auf dem Server gespeicherte Datei versenden möchte, kann dies z.B. so erfolgen:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<?php
$pfad
"ordner/datei.exe";

$anhang = array();
$anhang["name"] = basename($pfad);
$anhang["size"] = filesize($pfad);
$anhang["data"] = implode("",file($pfad));

if(
function_exists("mime_content_type"))
   
$anhang["type"] = mime_content_type($pfad);
else
   
$anhang["type"] = "application/octet-stream";


mail_att("empf@domain","Email mit Anhang","Im Anhang ist eine Datei",$anhang);
?>



Mehrere Dateien, die z.B. auf dem Server liegen, sendet man so:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<?php
$pfad 
= array();
$pfad[] = "ordner/datei1.exe";
$pfad[] = "ordner/datei2.zip";
$pfad[] = "ordner/datei3.gif";
//....

$anhang = array();
foreach(
$pfad AS $name)
   {
 
   
$name basename($name);
   
$size filesize($name);
   
$data implode("",file($name));

   if(
function_exists("mime_content_type"))
      
$type mime_content_type($name);
   else
      
$type "application/octet-stream";
    
$anhang[] = array("name"=>$name"size"=>$size"type"=>$type"data"=>$data);
    }

mail_att("empf@domain","Email mit Anhang","Im Anhang sind mehrere Datei",$anhang);
?>


Natürlich könnte man auch einen String o.ä. welches der PHP Script vorher erstellt hat, als z.B. Textdatei-Anhang versenden.


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



25.11.2005, 18:41 Profil | PM | E-Mail  
yngvar
Mitglied
Anfänger


Dabei seit: 09.04.2005
Herkunft: deutschland
Posts: 34
      Zitat | Bearbeiten

Hi,

hier (wie auch bei der erweiterten Blätterfunktion) war ich sehr erliechter, habe aber auch noch eine if Abfrage an der Stelle hinzugefügt, wo die Datein in den Anhang geschrieben werden. Die if Abfrage lautete einfach:

 Code 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?
// [...]
if ($anhang == "" OR empty($anhang)) //die zwei abfragen sind doch nich das gleiche oder?
  {
  // hinzufügen des Anhangs
  }
  else {} // Nur Formhalber dabei
//[...]
?>


Gruß Heinrich



10.01.2008, 13:59 Profil | PM | E-Mail  
Gast


     Zeilenumbrüche Zitat | Bearbeiten

Hallo zusammen,

das Script ist ja richtig schön und funktioniert auch, doch leider bekomm ich in einer Text-Mail damit keine Zeilenumbrüche hin.

Normalerweise wird ja der Zeilenumbruch bei der der Standardfunktion mail(); im Text einfach mit \n definiert, doch in diesem Script haut das überhaupt nicht hin.

Gibt es hier nen kleinen Trick den ich kennen sollte..?


18.02.2008, 12:46  
Gast


      Zitat | Bearbeiten

Ich stoße auf selbiges Problem: Keine Zeilenumbrüche möglich Hülfe!

Zudem würde ich gerne jemanden (optional) CC setzen. Die Lösung google ich aber wohl besser erstmal...

Ansonsten: Schönes Script - copy, paste, funzt, danke!


14.07.2008, 10:51  
Gast


     Problem Zitat | Bearbeiten

Hallo zusammen,

ich habe ein ganz anderes Problem mit diesem Script. Anscheinend liegt hier irgendwo ein Fehler im Detail.

1.) Sende ich mit diesem Script - eine CSV Datei an eine Mail Adresse auf .gmx dann wird die Datei in der Übersicht mit einer Klammer angezeigt öffne ich die Mail dann ist kein Anhang mehr vorhanden und im Text stehen teile des Headers. (siehe Bild in der Anlage)

2.) Schaue ich mir die Mail im Internet mit dem Webmail Programm Horde an (gesendet an eine andere Mail Adresse) dann sieht die Mail korrekt aus.

3.) Hole ich die Mail von 1.) oder 2.) mit Outlook Express / Outlook 2003 ab sieht die Mail aus wie unter 1.) beschrieben aus.

4.) Hole ich die Mail mit Thunderbird ab, dann soll Sie wohl in Ordnung sein.

Kann mir hier irgendjemand einen Tipp geben.... Ich bin ratlos. Ich würde sagen das hier evtl. die Erkennung des Trenners der einzelnen Elemente nicht klappt ??

Danke und Gruß
Bernd

Dateianhang:
 anhang.jpg  (76 KB, 1138 mal herruntergeladen)

22.09.2008, 11:59  
Gast


      Zitat | Bearbeiten

So, das ist ja jetzt alles schön und gut, aber verzeih mir, ich raffe es nicht ganz.
Ich habe mal versucht den Code zu übernehmen und bei meinem Problem zu benutzen, hat aber nicht geklappt.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:


<?php

    $page 
$_GET["page"];
    
  if (
$page == "start")
     {
    
        echo 
"<form action=\"bilderversand.php?page=mail\" method=\"post\">";
        echo 
"<b>Ihr Name:</b><br>";
        echo 
"<input type=\"text\" name=\"name\"><br>";      
        echo 
"<b>Ihr Nachname:</b><br>";
        echo 
"<input type=\"text\" name=\"nachname\"><br>";
        echo 
"<b>Ihre E-Mail-Adresse</b><br>";
        echo 
"<input type=\"text\" name=\"email\"><br><br>";
        echo 
"<input type=\"Submit\" value=\"Absenden\" id=\"none\">";
        echo 
"</form>";
        
        echo 
"<div id=\"content\">";
        echo 
"Hallo ehemalige Klassenmitglieder der 7c Jahrgang 07/08.<br>";
        echo 
"Wir haben ein erfolgreiches Jahr hinter uns gebracht und viele sch&ouml;ne Erinnerungen mitgenommen, nicht zuletzt dank unserer tollen Lehrer, die wir dieses Schuljahr &uuml;ber hatten.<br>";
        echo 
"Leider musste uns zwei Mitglieder der Klasse verabschieden, ich w&uuml;nsche ihnen an dieser Stelle noch einmal viel Gl&uuml;ck auf ihrer neuen Schule.<br>";
        echo 
"Das gr&ouml;&szlig;ste unserer Projekte dieses Jahr war wahrscheinlich das Bemalen der Wand.<br>";
        echo 
"Da bei diesem Werk viele Mitglieder der Klasse mitgewirkt haben, w&auml;re es eine Verschwendung, sollte dieses Bild in der Verseknung verschwinden.<br>";
        echo 
"Deswegen hat unsere Lehrerin Frau Rast-Erler (an dieser Stelle noch einmal einen au&szlig;erordentlichen Dank) letztes Jahr die Gunst der Stunde genutzt, um ein paar Fotos festzuhalten.<br>";
        echo 
"Auf diesen befinden sich sämtliche sehenswerte Details, zusammen mit einigen der Maler.<br>";
        echo 
"Wer diese Bilder m&ouml;chte, der sollte im nebenstehenden Formular alle geforderten Angaben eingeben und dann auf Absenden klicken.<br>";
        echo 
"Die Bilder werden nun automatisch per E-Mail verschickt.";
        echo 
"</div>";
        
     }
     
  else if (
$page == "mail")
          {
          
            
$name    $_POST["name"];
            
$coname  $_POST["nachname"];
            
$email   $_POST["email"];
          
             echo 
"<div id=\"content\">";
             echo 
"Herzlich Willkommen <b>".$name." ".$coname."</b>. Die Bilder, die sie haben wollen, werden ihnen automatisch geschickt.<br>";
             echo 
"Sollten sie nicht angekommen sein, so schreiben sie bitte an <a href=\"mailto:alexander0206@gmx.de\">mich</a>.";
             echo 
"Eine weitere Lösung ist es, <a href=\"bilderversand.php?page=alternate\">hier</a> zu klicken.<br>";
             echo 
"</div>";
            
              
$empfaenger "$email";
              
$betreff "Urwald-pics";
              
$from "From: Alexander Mosca-Spatz <alexander0206@gmx.de>";
              
$inhalt "<img src=\"1.jpg\"><img src=\"2.jpg\"><img src=\"3.jpg\"><img src=\"4.jpg\"><img src=\"5.jpg\"><img src=\"6.jpg\"><img src=\"7.jpg\"><img src=\"8.jpg\"><img src=\"9.jpg\"><img src=\"10.jpg\">";

                 
mail($empfaenger$betreff$inhalt$from);   
    
          } 
?>



Also ich weiß jetzt nicht, ob es so auch klappt, wäre nett, wenn mir das jemand sagen könnte.
Wie kann ich jetzt dein Beispiel so umformen, dass meins läuft??


16.11.2008, 17:55  
Gast


      Zitat | Bearbeiten

Hi. ich habe das selbe problem (oder sogar noch krasser) wie mein Vorredner. Habe jetzt alle möglichen Variationen mit diesem Script durchgeführt, aber es passiert immer das gleiche:
1.: Es ist kein Anhang an der Mail
2.: dafür steht sowohl ein Teil des Headers im Text
3.: Als auch der Anhang in verschlüsselter Form selbst (mit Bildern oder sonstigem)isses übrigens das gleiche).
Was mach ich verkehrt?
MfG Marcus Dietze


06.08.2009, 12:54  
Gast


     fehler Zitat | Bearbeiten

Hallo,

Zeile 46 ist falsch:

$content.= "Content-Length: .".$dat['size'].";\r\n";

Es muss lauten:
$content.= "Content-Length: ".$anhang['size'].";\r\n";

Grüße!


08.08.2009, 18:39  
Gast


      Zitat | Bearbeiten

Zitat:
Orginal von Gast
Ich stoße auf selbiges Problem: Keine Zeilenumbrüche möglich Hülfe!


das problem habe ich mit:

$content.= "Content-Type: text/plain\r\n";

an stelle von:

$content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n";

erledigt.



21.08.2009, 12:02  
Gast


      Zitat | Bearbeiten

da ich ja über das kontaktformular keine fragen bezüglich php stellen soll muss ich laichenschänder spielen

mein problem bei googlemail wird alles richtig angezeigt und bei gmx nicht alle hilfen von oben hab ich bereits berücksichtigt


14.02.2011, 10:07  
Gast


     Frage Zitat | Bearbeiten

Bei mir wird der Inhalt der Mail immer als Anhang angefügt. Wie ändert man das?

(Inhalt wird aus einer html Datei per file_get_contents gezogen, und die variable mit dem string drin übergebe ich dann.)


28.03.2011, 13:28  
Sohn der Sonne
Mitglied
Neuling


Dabei seit: 28.03.2011
Herkunft: keine Angabe
Posts: 2
      Zitat | Bearbeiten

Letzter Post war von mir, hab mich mal registriert.


28.03.2011, 13:38 Profil | PM | E-Mail  
Sohn der Sonne
Mitglied
Neuling


Dabei seit: 28.03.2011
Herkunft: keine Angabe
Posts: 2
      Zitat | Bearbeiten

Inhalt der Mail:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:

                                                                                                                                                                                                                                                               
Delivered-To: irgendwas@irgendwer.de
Received: by 10.52.99.202 with SMTP id es10cs43769vdb;
        Mon, 28 Mar 2011 04:47:26 -0700 (PDT)
Received: by 10.204.187.194 with SMTP id cx2mr3269215bkb.167.1301312845321;
        Mon, 28 Mar 2011 04:47:25 -0700 (PDT)
Return-Path: <postmaster@localhost>
Received: from irgendwer.de (ds83-169-60-65.dedicated.hosteurope.de [83.169.60.65])
        by mx.google.com with ESMTPS id 10si3635482bkj.11.2011.03.28.04.47.24
        (version=TLSv1/SSLv3 cipher=OTHER);
        Mon, 28 Mar 2011 04:47:25 -0700 (PDT)
Received-SPF: neutral (google.com: 83.169.60.65 is neither permitted nor denied by best guess record for domain of postmaster@localhost) client-ip=83.169.60.65;
Authentication-Results: mx.google.com; spf=neutral (google.com: 83.169.60.65 is neither permitted nor denied by best guess record for domain of postmaster@localhost) smtp.mail=postmaster@localhost
Received: (qmail 14495 invoked from network); 28 Mar 2011 13:47:24 +0200
Received: from ip-92-50-95-125.unitymediagroup.de (HELO localhost) (92.50.95.125)
  by ds83-169-60-65.dedicated.hosteurope.de with SMTP; 28 Mar 2011 13:47:24 +0200
Received: from Spooler by localhost (Mercury/32 v4.62) ID MO000026;
  28 Mar 2011 13:47:09 +0200
Received: from spooler by localhost (Mercury/32 v4.62); 28 Mar 2011 13:47:05 +0200
Received: from Danny-PC (127.0.0.1) by Test (Mercury/32 v4.62) ID MG000025;
   28 Mar 2011 13:46:55 +0200
Date: Mon, 28 Mar 2011 13:46:55 +0200
Subject: bla
To: irgendwas@irgendwer.de
From:bla<postmaster@localhost>
Reply-To: postmaster@localhost
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="-----=0d4b5f4f60fcc25cee737e9dc5af7782"
Message-ID: <10088CA94CE0@localhost>

This is a multi-part message in MIME format.

Content-Type: text/html charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

<!DOCTYPE html
      PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?xml version="1.0" encoding="utf-8"?>
<html
      xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="en-US"
      lang="en-US">
<head profile="http://www.w3.org/2005/10/profile">
<title>Export of mailing: </title>
<link rel="stylesheet" type="text/css" href="templates/style.css" />
<link rel="icon" href="templates/favicon.png" type="image/png" />
</head>
<body>
    Inhalt
</body>
</html>

-------=0d4b5f4f60fcc25cee737e9dc5af7782
Content-Disposition: attachment;
    filename="newsletter.html";
Content-Length: .;
Content-Type: application/xhtml+xml; name="newsletter.html"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h

[...]

Ij5baGllcl08L2E+ITwvdGQ+IAk8L3RyPiAgICAgPC90Ym9keT48L3RhYmxlPiA8L2NlbnRlcj48
L2JvZHk+PC9odG1sPg==



28.03.2011, 14:12 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hi Zusammen...

Ich verzweifle auch grade...

ich bekomme nicht mal die Mail!

Ich sende Daten per Session über mehrere Seiten, das senden klappt auch solange ich keine Dateien mitsenden möchte (dafür hatte ich ein einfacheres Script)

Ich würde gerne mal vorne anfangen:

Ich komme von formular1.php

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:

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

<input type="file" size="12" name="anhang" id="anhang"/>
<input type="text" name="Name" id="Name">

</form>


Zu meinem Formular2.php

Hier wurstl ich ein bisschen mit meinen Daten rum und will die dann versenden...
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:

$empfaenger  = 'info@email'; // beachten Sie das Komma
if ($_POST['kopie'] == "kopie") {
$kempfaenger =  $_POST['Email'];
$to = $empfaenger .' , '.$kempfaenger;
}
else {
    $to = $empfaenger;
    }
$subject ="Anfrage über Formular";
    
//Mach aus dem Post was lesbares...
if($_POST)
{
 $message = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $message .= $strName.$strDelimiter.$value_array."\n<br>";
   }
  }
  else
  {
   $message .= $strName.$strDelimiter.$value."\n<br>";
  }
 }

 if(get_magic_quotes_gpc())
 {
  $message = stripslashes($message);
 }


function mail_att($to,$subject,$message,$anhang) 
   { 
   $absender = "Anfrageformular"; 
   $absender_mail = "info@email.de"; 
   $reply = "replay@email.de"; 

   $mime_boundary = "-----=" . md5(uniqid(mt_rand(), 1)); 

   $header  ="From:".$absender."<".$absender_mail.">\n"; 
   $header .= "Reply-To: ".$reply."\n"; 

   $header.= "MIME-Version: 1.0\r\n"; 
   $header.= "Content-Type: multipart/mixed;\r\n"; 
   $header.= " boundary=\"".$mime_boundary."\"\r\n"; 

   $content = "This is a multi-part message in MIME format.\r\n\r\n"; 
   $content.= "--".$mime_boundary."\r\n"; 
   $content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n";
   $content.= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
   $content.= $message."\r\n"; 

   //$anhang ist ein Mehrdimensionals Array 
   //$anhang enthält mehrere Dateien 
   if(is_array($anhang) AND is_array(current($anhang))) 
      { 
      foreach($anhang AS $dat) 
         { 
         $data = chunk_split(base64_encode($dat['data'])); 
         $content.= "--".$mime_boundary."\r\n"; 
         $content.= "Content-Disposition: attachment;\r\n"; 
         $content.= "\tfilename=\"".$dat['name']."\";\r\n"; 
         $content.= "Content-Length: ".$anhang['size'].";\r\n"; 
         $content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n"; 
         $content.= "Content-Transfer-Encoding: base64\r\n\r\n"; 
         $content.= $data."\r\n"; 
         } 
      $content .= "--".$mime_boundary."--";  
      } 
   else //Nur 1 Datei als Anhang 
      { 
      $data = chunk_split(base64_encode($anhang['data'])); 
      $content.= "--".$mime_boundary."\r\n"; 
      $content.= "Content-Disposition: attachment;\r\n"; 
      $content.= "\tfilename=\"".$anhang['name']."\";\r\n"; 
      $content.= "Content-Length: .".$dat['size'].";\r\n"; 
      $content.= "Content-Type: ".$anhang['type']."; name=\"".$anhang['name']."\"\r\n"; 
      $content.= "Content-Transfer-Encoding: base64\r\n\r\n"; 
      $content.= $data."\r\n"; 
      }  
          

   if(@mail($to, $subject, $content, $header)) return true; 
   else return false; 
   } 
}


Wenn ich allerdings schon meine Dateiupload ausgebe bekomme ich nur ein "N"
echo $_POST('anhang') = "N"
muss da nicht der Pfad kommen?

Also so wie ich es euch hier aufgelistet habe, wird nicht mal eine Mail gesendet...

Wird die Funktion nicht aufgerufen?
Normalerweise mache ich das ohne function!

Hilfe... :-)

Danke
Gruß
Kai


09.06.2011, 19:54  
Gast


     Wurst gefunden... Zitat | Bearbeiten

Hi Leute,

also ich hab die Wurst gefunden...
das Formular läuft jetzt wie gewünscht, Daten werden auch gesendet...

ABER:

Ich bekomme die Dateien nicht mit gesendet

Mein Dateien Array:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:


 [_FILES] => Array
        (
            [upload0] => Array
                (
                    [name] => IMG_0082.jpg
                    [type] => image/jpeg
                    [tmp_name] => /var/www/web123455/phptmp/phpBvqGeX
                    [error] => 0
                    [size] => 367977
                )

            [upload1] => Array
                (
                    [name] => IMG_0083.jpg
                    [type] => image/jpeg
                    [tmp_name] => /var/www/web12345/phptmp/phpRheSIB
                    [error] => 0
                    [size] => 296711
                )

        )


Meine Mail funktion:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:

if($_POST)
{
$empfaenger  = 'php@deutschland.de'; // beachten Sie das Komma
if ($_POST['kopie'] == "kopie") {
$kempfaenger =  $_POST['Email'];
$to = $empfaenger .' , '.$kempfaenger;
}
else {
    $to = $empfaenger;
    }
$subject ="Anfrage über Formular";
//hier nehme ich mein daten array auseinander
 $message = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $message .= $strName.$strDelimiter." - ".$value_array."\n";
   }
  }
  else
  {
   $message .= $strName.$strDelimiter." - ".$value."\n";
  }
 }

 if(get_magic_quotes_gpc())
 {
  $message = stripslashes($message);
 }


//hier die oben beschriebene mail funktion
   $absender = "Formular Absender"; 
   $absender_mail = "php@deutschland.de"; 
   $reply = "replay@deutschland.de"; 

   $mime_boundary = "-----=" . md5(uniqid(mt_rand(), 1)); 

   $header  ="From:".$absender."<".$absender_mail.">\n"; 
   $header .= "Reply-To: ".$reply."\n"; 

   $header.= "MIME-Version: 1.0\r\n"; 
   $header.= "Content-Type: multipart/mixed;\r\n"; 
   $header.= " boundary=\"".$mime_boundary."\"\r\n"; 

   $content = "This is a multi-part message in MIME format.\r\n\r\n"; 
   $content.= "--".$mime_boundary."\r\n"; 
   $content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n"; 
   $content.= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
   $content.= $message."\r\n"; 

  //$anhang ist ein Mehrdimensionals Array 
   //$anhang enthält mehrere Dateien 
  
      $i=0;
      foreach($_FILES AS $dat) 
         { 
         $i++;
         $data = chunk_split(base64_encode($dat['upload'.$i.'']['data'])); 
         $content.= "--".$mime_boundary."\r\n"; 
         $content.= "Content-Disposition: attachment;\r\n"; 
         $content.= "\tfilename=\"".$dat['name']."\";\r\n"; 
         $content.= "Content-Length: .".$dat['size'].";\r\n"; 
         $content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n"; 
         $content.= "Content-Transfer-Encoding: base64\r\n\r\n"; 
         $content.= $data."\r\n"; 
         } 
    

   if(@mail($to, $subject, $content , $header)) return true; 
   else return false; 
   } 




Meine Email die ich bekomme


This is a multi-part message in MIME format.

-------=f9ff6a8ff4c449a2b515cabdc47b74e1
Content-Type: text/html charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

viel entfernter inhalt....
datei - Yes
anhaenge - 2
Firma - Hans Wurst
Name - Klaus
Vorname - Meier
Strasse - Hauptstr 12
PLZ - 12345
Ort - Entenhausen
kopie - kopie
Nachricht - jhcgfvhbjnkml,kmjnlhbkgvjf

-------=f9ff6a8ff4c449a2b515cabdc47b74e1
Content-Disposition: attachment;
filename="IMG_0082.jpg";
Content-Length: .367977;
Content-Type: image/jpeg; name="IMG_0082.jpg"
Content-Transfer-Encoding: base64



-------=f9ff6a8ff4c449a2b515cabdc47b74e1
Content-Disposition: attachment;
filename="IMG_0083.jpg";
Content-Length: .296711;
Content-Type: image/jpeg; name="IMG_0083.jpg"
Content-Transfer-Encoding: base64



kann jemand erkennen warum ich die Dateien nicht bekomme?

Ich hoffe jemand hat Rat für mich...

Wenns läuft dann poste ich hier mein 3 Seitiges Formular...

Danke und schöne Pfingsten
Kai



11.06.2011, 23:34  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2496
      Zitat | Bearbeiten

Ich würde eine Mail mit Anhang mit PHPMailer verschicken. Auch ganz einfach zu bedienen.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
12.06.2011, 00:24 Profil | PM | E-Mail  
Gast


     Perfekt Zitat | Bearbeiten

alles bestens (habe nur die Reihenfolge verändert:
$name = "wetter/aktuell.gif";
$size = filesize($name);
$data = implode("",file($name));
$name = basename($name);
(also basename nach size und data).
mit
$content.= "Content-Type: text/plain\r\n";
funktionieren auch die Zeilenvorschübe im mail wieder (daran wäre ich fast verzweifelt).
Danke - das war der beste Vorschlag im web, den ich gefunden habe!


08.12.2011, 08:24  
malong
Mitglied
Neuling


Dabei seit: 04.03.2012
Herkunft: keine Angabe
Posts: 1
      Zitat | Bearbeiten

Kann mir jemand sagen wie nun die reienfolge ist?
ich bekomme als Anhang immer nur zwar die Datei aber als Kapute Datei?

<?php
$anhang = array();
$anhang["name"] = $_FILES['datei_feld']['name'];
$anhang["size"] = $_FILES['datei_feld']['size'];
$anhang["type"] = $_FILES['datei_feld']['type'];
$anhang["data"] = implode("",file($_FILES['datei_feld']['tmp_name']));
?>




Post wurde schon 1x editiert, das letzte mal am 07.03.2012 um 21:20 von malong
04.03.2012, 17:09 Profil | PM | E-Mail  
tempuser
Mitglied
Neuling


Dabei seit: 28.08.2012
Herkunft: keine Angabe
Posts: 5
      Zitat | Bearbeiten

Hallo zusammen!

Ich möchte meine Frage nicht doppelt stellen, aber hier passt sie auch perfekt rein.

Kann mir bitte jemand eine Antwort auf den folgenden Link geben? Das wäre super.

Kurze Anmerkung: Ich stelle sie hier auch noch, da die Angelegenheit recht dringlich ist.

Vielen Dank!!


30.08.2012, 10:36 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

kein link gefolgt


01.09.2012, 22:13  
tempuser
Mitglied
Neuling


Dabei seit: 28.08.2012
Herkunft: keine Angabe
Posts: 5
      Zitat | Bearbeiten

Oh Gott, hupsi!

http://forum.php-einfach.de/thread.php?threadid=11993&seite=1&#ende


03.09.2012, 10:19 Profil | PM | E-Mail  
Gast


     Problem mehrere Anhänge Zitat | Bearbeiten

Hallo zusammen

Ich habe ein Problem mit mehreren Anhängen. Grunsätzlich funktioniert alles, ausser dass die Datei leer ist, wenn sie empfangen wird.

Wenn ich es mit dem einzelnen Anhang Code versuche klappt es...

Könnt ihr mir das weiter helfen? Oder kennt jemand sonst noch das Problem?

Vielen Dank und Grüsse

Lars


16.09.2012, 22:02  
Gast


      Zitat | Bearbeiten

so geht es


 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:


function mail_att($to, $subject, $message, $anhang) {
    $absender = "Mail from Domain";
    $absender_mail = "info@domain.com";
    $reply = "info@domain.de";

    $mt_rand = rand(1111111111111111, 9999999999999999); // 21 . "_=";
    $mime_boundary_mixed = "=_mixed " . $mt_rand . "_=";
    $mime_boundary_alternative = "=_alternative " . $mt_rand . "_=";

    $header = "From:" . $absender . "<" . $absender_mail . ">\n";
    $header.= "Reply-To: " . $reply . "\n";
    $header.= 'Cc: info@domain.de' . "\n";
    $header.= 'MIME-Version: 1.0' . "\r\n";
    $header.= 'Content-Type: multipart/mixed; boundary="' . $mime_boundary_mixed . '"' . "\r\n";

    $content.= '--' . $mime_boundary_mixed . "\r\n";
    $content.= 'Content-Type: multipart/alternative; boundary="' . $mime_boundary_alternative . '"' . "\r\n\r\n";
    $content.= '--' . $mime_boundary_alternative . "\r\n" . 'Content-type: text/html; "charset=iso-8859-1"' . "\r\n\r\n";
    $content.= $message . "\r\n\r\n";
    $content.= '--' . $mime_boundary_alternative . '--' . "\r\n\r\n";

    //$anhang ist ein Mehrdimensionals Array 
    //$anhang enthält mehrere Dateien 
    
    
    if (is_array($anhang) AND is_array(current($anhang))) {
        foreach ($anhang AS $dat) {
            $data = chunk_split(base64_encode($dat['data']));
            $content.= '--' . $mime_boundary_mixed . "\r\n";
            $content.= 'Content-Disposition: attachment; filename="' . $dat['name'] . '"' . "\r\n";
            $content.= "Content-Length: ." . $dat['size'] . ";\r\n";
            $content.= "Content-Type: " . $dat['type'] . "; name=\"" . $dat['name'] . "\r\n";
            $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
            $content.= $data . "\r\n";
        }
        $content .= "--" . $mime_boundary_mixed . "--" . "\r\n";
    } else { //Nur 1 Datei als Anhang 
        $data = chunk_split(base64_encode($anhang['data']));
        $content.= '--' . $mime_boundary_mixed . "\r\n";
        $content.= 'Content-Disposition: attachment; filename="' . $anhang['name'] . '"' . "\r\n";
        $content.= "Content-Length: ." . $anhang['size'] . ";\r\n";
        $content.= "Content-Type: " . $anhang['type'] . "; name=\"" . $anhang['name'] . "\r\n";
        $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
        $content.= $data . "\r\n";
        $content.= "--" . $mime_boundary_mixed . "--";
    }




    if (mail($to, $subject, $content, $header))
        return true;
    else
        return false;
}





Post wurde schon 1x editiert, das letzte mal am 11.02.2013 um 18:36 von Andavos
08.10.2012, 18:01  
Widderchen
Mitglied
Neuling


Dabei seit: 03.08.2014
Herkunft: keine Angabe
Posts: 1
      Zitat | Bearbeiten

Hallo zusammen,

ich habe da zwei Fragen zu diesem Script.
1. Warum kann ich nur .jpg Dateien anhängen?

2. Im Textbereich schreibe ich eine HTML Tabelle mit Logo hinein:
Zitat:
<img src='http://www.meineDomain.de/Bilder/Firmenlogo.jpg' alt='' border='0' height='130px' width='100%'>

Leider wird der Pfad aber nicht übermittelt.

Habe ich etwas übersehen?

Ich hoffe ihr könnt mir helfen.

Lg

Edit: Das mit dem Logo habe ich lösen können.




Post wurde schon 2x editiert, das letzte mal am 03.08.2014 um 14:26 von Widderchen
03.08.2014, 13:48 Profil | PM | E-Mail  
alve1989
Mitglied
Anfänger


Dabei seit: 17.08.2013
Herkunft: keine Angabe
Posts: 61
     Eine Datei klappt, mehrere nicht. Zitat | Bearbeiten

UPDATE: Nachdem ich die Dateien per cURL geladen und anschließend eingebunden habe, funktioniert es nun. Warum, kann ich jedoch nicht sagen...

Hallo Community,

vielen Dank für dieses tolle Snippet! Eigentlich funktioniert auch alls wunderbar - bis auf eine Kleinigkeit:

Ich versuche, ein iPhone-Konfigurationsprofil, welches auf dem Server liegt, mit dem Script zu versenden. Solange ich nur diese eine Datei anhänge, klappt das auch und ich kann das Profil wie gewünscht auf dem iPhone installieren.
Wenn ich nun aber noch eine zweite Date zusätzlich anhänge (auch gleichen Typs), funktioniert das Profil nicht mehr. Und das, obwohl die beiden Script-Teile offensichtlich (quasi) identisch sind?!

Ich hoffe, es findet sich jemand, der mir das erklären kann!

Ich danke schon mal herzlich im Voraus!




Post wurde schon 1x editiert, das letzte mal am 11.02.2015 um 12:04 von alve1989
11.02.2015, 10:59 Profil | PM | E-Mail  
Seiten (2):  1  2 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Email mit Anhang   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz