Emails mit Anhang versenden PHP?

3 Antworten

CODE:

<?php
session_start();

$pdo = new PDO('mysql:host=localhost;dbname=datenbankname', 'benutzername', 'passwort');

?>

<?php
function random_string() {
 if(function_exists('random_bytes')) {
 $bytes = random_bytes(16);
 $str = bin2hex($bytes);
 } else if(function_exists('openssl_random_pseudo_bytes')) {
 $bytes = openssl_random_pseudo_bytes(16);
 $str = bin2hex($bytes);
 } else if(function_exists('mcrypt_create_iv')) {
 $bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
 $str = bin2hex($bytes);
 } else {
 //Bitte euer_geheim_string durch einen zufälligen String mit >12 Zeichen austauschen
 $str = md5(uniqid('meinstring', true));
 }
 return $str;
}

if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="login.php">einloggen</a>');
}
 

 
 
$showForm = true;


 

 if(!isset($_POST['email']) || empty($_POST['email'])) {
 $error = "<b>Bitte eine E-Mail-Adresse eintragen</b>";
 } else {
    $sql = "SELECT betreff FROM email";
foreach ($pdo->query($sql) as $row) {
  $row['betreff'];
}

$tex = "SELECT text FROM email";
foreach ($pdo->query($tex) as $row1) {
  $row1['text'];
}

 $statement = $pdo->prepare("SELECT * FROM newsletter1 WHERE email = :email");
 $result = $statement->execute(array('email' => $_POST['email']));
 $user = $statement->fetch();
 
 
 $empfaenger = $user['email'];
 $betreff = $row['betreff'];
$datei = $dateien = array($_FILES['datei_feld']['tmp_name'] => $_FILES['datei_feld']['name']);;
 $from = "From: meinefirma <meine@email.de>";
 $text =  $row1['text'];
 
 
 mail($empfaenger, $betreff, $text, $from, $dateien);
 
 
 
 echo "Emails erfolgreich gesendet<br><br>";
 echo "<a href='www.firma.de'>Zurück zur Startseite</a>";
 $showForm = false;
 }
 

 
if($showForm):
?>
<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <link href="https://fonts.googleapis.com/css?family=Concert+One" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Audiowide" rel="stylesheet"><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><title>Senden</title>

 </head>
   <body>
    <div id="webseite">
        <div id="header">
        <img src="LOGO.png" height="133" width="268" alt="meinlogo">
        </div>
        
        
        <div id="main">
           
            <div id="inhalt">
<h2>Senden</h2>

 
<form action="?send=1" method="post"  enctype="multipart/form-data">
Email:<br>
<input type="email" name="email" value="<?php echo isset($_POST['email']) ? htmlentities($_POST['email']) : ''; ?>"><br><br>

<input name="datei_feld"type="file" size="50" accept="pdf/text/jpg/png/bmp"><br> </label>

<input type="submit" value="Senden" class="button">
</form>
 </div>
<?php
endif;
?>
            </div>
            <div id="footer">
            <p>&copy;2018 by firma</p>
            </div>
        </div>
    </div>


<script>











</script>






</body>
</html>

1) Könntest du nicht einmal deinen Quellcode ordentlich einrücken? Du klatscht ihn jedesmal hier einfach nur hinein. Ich werde ihn mir hier nun also nicht weiter anschauen.

2) Für den Upload von Dateien mit HTML5 gibt es einige Tutorials, wie dieses:

https://www.w3schools.com/Php/php_file_upload.asp

Die Datei muss auf jeden Fall erst einmal auf den Server geladen werden. Du solltest dabei eine bestimmte Maximalgröße setzen und auf den Dateityp prüfen.

3) Nutze für den E-Mail-Versand PHPMailer. Dies erspart dir einigen Aufwand, wenn du die hochgeladene Datei als Anhang verschicken möchtest.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$eMail = new PHPMailer();
$eMail->From = "someSender@someDomain.de";
$eMail->FromName = "Some sender";
$eMail->Subject = "Some subject";
$eMail->Body = "Some text";
$eMail->addAddress("someReceiver@someDomain.com");

$attachment = "some/filepath/to/some/file/to/attach";
$eMail->addAttachment($attachment, "SomeFileName");

$eMail->send();

Ich bin da schon einige Jahre raus, aber was nicht funktionieren kann, ist das Versenden der Dateien als Anhänge.

Dazu müsstest du dir anschauen, wie eine Multipart- E-Mail aufgebaut ist...

Dann die Dateien mit PHP einlesen, base64 codieren und entsprechend des richtigen Formates an die E-Mail anhängen...

Damals war es so, dass man die komplette Mail mit Text erstellen musste und den enstanden String als Header verschickt hat (also mail() ohne Message)