Email mit 2 anhänge!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dazu müsstest du uns schon ein wenig Code zeigen und am besten die Roh-Email. Sind die Dateien auf dem Server schon 0kb? Funktioniert der Upload? Steht in der E-Mail Zeichenwirrwar? Das lässt sich schwer erraten...
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • formular.html

    HTML-Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>HTML Email mit Dateianhang</title>
    6. </head>
    7. <body>
    8. <form action="mail.php" method="post" enctype="multipart/form-data" name="textmail">
    9. Name: <input type="text" name="name" id="name" /><br />
    10. Email: <input type="text" name="email" id="email" /><br />
    11. Betreff: <input type="text" name="betreff" id="betreff" /><br />
    12. Nachricht: <textarea name="nachricht" id="nachricht" cols="20" rows="2"></textarea><br />
    13. Anhang: <input name="datei" id="datei" type="file" /><br />
    14. Anhang: <input name="datei2" id="datei2" type="file" /><br />
    15. <input name="senden" id="senden" type="submit" value="Formular senden" />
    16. </form>
    17. </body>
    18. </html>
    Alles anzeigen


    mail.php

    PHP-Quellcode

    1. <?php
    2. header( 'Content-Type: text/html; charset=utf-8' );
    3. // Empfänger Email
    4. $empfaenger = 'giulion@hotmail.de';
    5. // Prüfen ob das Formular abgeschickt wurde
    6. if (isset($_POST['senden']) && $_FILES['datei']['size'] > 0 && $_FILES['datei2']['size'] > 0)
    7. {
    8. // Funktionen einbinden
    9. include( 'funktionen.inc.php' );
    10. // Benutzereingaben bereinigen und auf Injection prüfen
    11. cleanInput();
    12. // Name prüfen
    13. $name = checkName( $_POST['name'] );
    14. // Email prüfen
    15. $email = checkEmail( $_POST['email'] );
    16. // Betreff und Nachricht prüfen
    17. if ((strlen( $_POST['betreff'] ) < 5) || (strlen( $_POST['nachricht'] ) < 5))
    18. {
    19. die( 'Bitte füllen Sie alle Felder aus!' );
    20. }
    21. else
    22. {
    23. $betreff = $_POST['betreff'];
    24. $nachricht = $_POST['nachricht'];
    25. }
    26. // Upload prüfen
    27. $uploadname = checkFile();
    28. $uploadname2 = checkFile2();
    29. // --------------------------------------------------------------------------------
    30. // Wurde das Script bisher nicht abgebrochen, wurde das Formular korrekt ausgefüllt
    31. // --------------------------------------------------------------------------------
    32. // Template mit dem Mailbody laden
    33. $template = file_get_contents( 'mailbody.txt' );
    34. // Trenner für den Anhang
    35. $trenner = md5( time() );
    36. // Platzhalter mit den Benutzereingaben ersetzen
    37. $template = str_replace( '###NAME###', htmlspecialchars( $name ), $template );
    38. $template = str_replace( '###EMAIL###', $email, $template );
    39. $template = str_replace( '###NACHRICHT###', nl2br( htmlspecialchars( $nachricht ) ), $template );
    40. // Mail Header erstellen
    41. $mailheader .= "Reply-To: " .$name. "<" .$email. ">\r\n";
    42. $mailheader .= "Return-Path: noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
    43. $mailheader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
    44. $mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n";
    45. $mailheader .= "From: PHP Email Tutorial<noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
    46. $mailheader .= "MIME-Version: 1.0\r\n";
    47. $mailheader .= "Content-Type: multipart/mixed;\r\n";
    48. $mailheader .= " boundary = " .$trenner;
    49. $mailheader .= "\r\n\r\n";
    50. // Mailbody vorbereiten
    51. $mailbody = "This is a multi-part message in MIME format\r\n";
    52. $mailbody .= "--" .$trenner. "\r\n";
    53. $mailbody .= "Content-Type: text/html; charset=UTF-8\r\n";
    54. $mailbody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
    55. $mailbody .= $template. "\r\n\r\n";
    56. // Anhang anfügen
    57. $mailbody .= "--" .$trenner. "\r\n";
    58. $mailbody .= "Content-Type: image/jpeg; name=\"" .$uploadname. "\"\r\n";
    59. $mailbody .= "Content-Transfer-Encoding: base64\r\n";
    60. $mailbody .= "Content-Disposition: attachment; filename=\"" .$uploadname. "\"\r\n\r\n";
    61. $mailbody .= chunk_split( base64_encode( file_get_contents( $_FILES['datei']['tmp_name'] ) ) );
    62. $mailbody .= "\n";
    63. // Anhang anfügen 2
    64. $mailbody .= "--" .$trenner. "\r\n";
    65. $mailbody .= "Content-Type: image/jpeg; name=\"" .$uploadname2. "\"\r\n";
    66. $mailbody .= "Content-Transfer-Encoding: base64\r\n";
    67. $mailbody .= "Content-Disposition: attachment; filename=\"" .$uploadname2. "\"\r\n\r\n";
    68. $mailbody .= chunk_split( base64_encode( file_get_contents( $_FILES['datei2']['tmp_name'] ) ) );
    69. $mailbody .= "\n";
    70. // Email versenden
    71. if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
    72. {
    73. // Bei erfolgreichem Versand Danke-Seite anzeigen
    74. echo 'Danke, die Email wurde verschickt!';
    75. }
    76. }
    77. ?>
    Alles anzeigen


    funktionen.inc.php

    PHP-Quellcode

    1. <?php
    2. header( 'Content-Type: text/html; charset=utf-8' );
    3. // Benutzereingabe bereinigen (trimmen, Slashes entfernen)
    4. function cleanInput()
    5. {
    6. checkInjection();
    7. if (get_magic_quotes_gpc()) $_POST = array_map( 'stripslashes', $_POST );
    8. $_POST = array_map( 'trim', $_POST );
    9. }
    10. // Name auf Gültigkeit prüfen
    11. function checkName( $name )
    12. {
    13. $muster_name = '/^([a-zA-ZäÄöÖüÜß\xc0-\xc2\xc8-\xcf\xd2-\xd4\xd9-\xdb\xe0-\xe2\xe8-\xef\xf2-\xf4\xf9-\xfb\x9f\xff\.\'\-_]?(\s)?)+$/';
    14. if (preg_match( $muster_name, $name ))
    15. {
    16. return $name;
    17. }
    18. else
    19. {
    20. die( 'Der eingegebene Name enthält nicht erlaubte Zeichen!' );
    21. }
    22. }
    23. // Email auf korrektes Format prüfen
    24. function checkEmail( $email )
    25. {
    26. $nonascii = "\x80-\xff";
    27. $nqtext = "[^\\\\$nonascii\015\012\"]";
    28. $qchar = "\\\\[^$nonascii]";
    29. $normuser = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
    30. $quotedstring = "\"(?:$nqtext|$qchar)+\"";
    31. $user_part = "(?:$normuser|$quotedstring)";
    32. $dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
    33. $dom_subpart = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
    34. $dom_tldpart = '[a-zA-Z]{2,5}';
    35. $domain_part = "$dom_subpart$dom_mainpart$dom_tldpart";
    36. $pattern = "$user_part\@$domain_part";
    37. $muster_email = "/^{$pattern}$/";
    38. if (preg_match( $muster_email, $email ))
    39. {
    40. return $email;
    41. }
    42. else
    43. {
    44. die( 'Die eingegebene Email-Adresse hat kein gültiges Format!' );
    45. }
    46. }
    47. // Dateianhang prüfen
    48. function checkFile()
    49. {
    50. if ($_FILES['datei']['error'] == 0 &&
    51. $_FILES['datei']['type'] == 'image/jpeg')
    52. {
    53. return $_FILES['datei']['name'];
    54. }
    55. else
    56. {
    57. die( 'Bitte eine gültige JPG Datei anhängen!' );
    58. }
    59. }
    60. function checkFile2()
    61. {
    62. if ($_FILES['datei2']['error'] == 0 &&
    63. $_FILES['datei2']['type'] == 'image/jpeg')
    64. {
    65. return $_FILES['datei2']['name'];
    66. }
    67. else
    68. {
    69. die( 'Bitte eine gültige JPG Datei anhängen!' );
    70. }
    71. }
    72. // Benutzereingaben auf mögliche Injection prüfen
    73. function checkInjection()
    74. {
    75. $email_injection = array( 'bcc:', 'boundary', 'cc:', 'content-transfer-encoding:', 'content-type:', 'mime-version:', 'subject:' );
    76. // Auf potentielle Email Injections prüfen
    77. foreach ($email_injection as $injection)
    78. {
    79. foreach ($_POST as $feld => $inhalt)
    80. {
    81. if (preg_match( "/{$injection}/i", $inhalt ))
    82. {
    83. header( 'location: http://www.google.com/search?hl=en&q=how+to+become+a+better+hacker' );
    84. exit;
    85. }
    86. }
    87. }
    88. return true;
    89. }
    90. ?>
    Alles anzeigen


    mailbody.txt

    HTML-Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Email als HTML mit Anhang</title>
    6. <style type="text/css">
    7. body { font: normal 12px Verdana, Arial, Helvetica, sans-serif; }
    8. a { color: blue; text-decoration: none; }
    9. h2 { font-size: 16px; font-weight: bold; }
    10. .gruen { color: green; }
    11. </style>
    12. </head>
    13. <body>
    14. <h2>Soeben ist eine Nachricht von <span class="gruen">###NAME###</span> eingetroffen.</h2>
    15. <p>Als Antwortadresse wurde <a href="mailto:###EMAIL###">###EMAIL###</a> angegeben.</p>
    16. <p>Die Nachricht die gesendet wurde lautet:<br />
    17. ###NACHRICHT###</p>
    18. </body>
    19. </html>
    Alles anzeigen


    In der Mail werden die daeinamen angezeigt.. daneben aber (0,0KB)
    Der inhalt wird auch net angezeigt.. =(
    [Blockierte Grafik: http://image-uploader.de/bild.php/2958,unbenanntHMYNX.jpg]

    EDIT://

    Mail CONTENT WIRD NUN AUCH ANGEZEIGT !! NUN FEHLEN NUR NOCH DIE BILDER!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von binneuhier ()

  • Es tut mir Leid, wenn ich deine Erfolge damit zunichte mache, aber E-Mails mit PHP zu versenden und damit alle möglichen Standards zu befolgen und Mail Injections vorzubeugen ist nicht so einfach.
    Deswegen würde ich mich auf fertige Scripte zu dem Anlass verlassen. Schau dir dazu mal die PHP Klasse PHP Mailer an, damit ist das super einfach:
    http://www.coder-wiki.de/HowTos/PHP-Webmailer-mit-PHPMailer

    Auch Anhänge kannst du ganz einfach hinzufügen.
    Dazu gibts die Methode: AddAttachment, siehe http://phpmailer.worxware.com/index.php?pg=methods

    Ich glaube in deinem Code fehlt der Content-Length Header. Der müsste sich aus strlen($mailheader) + strlen($mailbody) ergeben - bin mir aber nicht sicher.
    Schau dir besser mal phpmailer an und stelle im Zweifel dazu nochmal Fragen ;)