E-mailbericht met meerdere bijlagen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

10/10/2014 14:24:37
Quote Anchor link
Hallo allemaal,

Met behulp van het script op deze site heb ik een e-mailfunctie gemaakt waarbij een bijlage kan worden meegezonden. Tot zover werkt alles goed.
Nu komt de uitdaging om meerdere bijlagen mee te sturen.
Wie kan mij een suggestie doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
if($cKnopKeuze == $cKnopTekst3) {   // Knop Testmail
    
        $cGeadresseerde = $_SESSION['inlognaam'];
        $cAfzenderEmail = $_SESSION['inlognaam'];
        
        if(!empty($_FILES['bijlage']['name'])) {    // Bijlage bijgesloten
            //check filesize
            if($_FILES['bijlage']['size'] < 1024*50)  {
        
                $html = true;
                $headers     = 'From: ' . $cAfzenderEmail . PHP_EOL;
                $headers    .= 'Reply-To: ' . $cAfzenderEmail . PHP_EOL;
                $headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
                $headers    .= 'X-Priority: Normal' . PHP_EOL;
                $headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
                //email bestaat uit meerdere  bestanden dus vertel wat de scheidings teken is en dat het een multipart is
                $headers .= "Content-Type: multipart/mixed; boundary=\"".bound."\"\r\n";
                //we zenden een attachment mee
                $headers .= "Content-Disposition:  attachment\r\n";
                //readfile
                $fp = fopen($_FILES['bijlage']['tmp_name'],'r');
                $bestand = fread($fp,$_FILES['bijlage']['size']);
                fclose($fp);
                //create body
                //generenen een body. Dit is een multi part gezeik
                $body.= "This is a multi-part message in MIME format.\r\n";
                $body.= "\r\n";
                //boundary
                $body.= "--" . bound . "\r\n";
                //content type + charater set (iso in dit geval)
                $body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
                //codering (7 bit)
                $body.= "Content-Transfer-Encoding: 7bit\r\n";
                $body.= "\r\n";
                //het bericht
                $body.= $_POST['editor1'] ."\r\n";
                //boundary
                $body.= "--" . bound . "\r\n";
                //content type + naam bestand (database.sql)
                $body .= "Content-Type: application/octet-stream; name=".$_FILES['bijlage']['name']."\r\n";
                //codering
                $body .= "Content-Transfer-Encoding: base64\r\n";
                //als bijlage toegevoegd
                $body.= "Content-disposition: attachment\r\n";
                $body .= "\n";
                $body .= chunk_split(base64_encode($bestand )) . "\r\n";
        
                // Verzenden e-mailbericht        
                if(mail($cGeadresseerde,$cOnderwerp,$body,$headers)) {
                    $cStatus = "Geslaagd";
                } else {
                    $cStatus = "Mislukt";
                }
            }
        } else {    // Geen bijlage bijgesloten
            $html        = true;
            $headers     = 'From: ' . $cAfzenderEmail . PHP_EOL;
            $headers    .= 'Reply-To: ' . $cAfzenderEmail . PHP_EOL;
            $headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
            $headers    .= 'X-Priority: Normal' . PHP_EOL;
            $headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
            $headers    .= ($html) ? 'Content-type: text/html; charset=UTF-8' . PHP_EOL : '';
        
            // Verzenden e-mailbericht                    
            if(mail($cGeadresseerde,$cOnderwerp,$cBericht2,$headers)) {
                $cStatus = "Geslaagd";
            } else {
                $cStatus = "Mislukt";
            }
        }
        
        $cEmailbericht = "TEST";
        $cAfzender = $_SESSION['inlognaam'];
        include "queries/sql_ins_emaillog.php";
        $cResultLoggen = mysqli_query($verbinding,$sql);
        
        $_SESSION['cLogging'] = "Verzonden e-mail: " . $cOnderwerp . "\n";
        $_SESSION['cLogging'] .= "Status verzending: " . $cStatus . "\n";
        $_SESSION['cLogging'] .= "Aantal adressen: 1" . "\n";
        
        header("Location: #sAryui6GfdBhhiK");
    }


Pagina met bronscript: Ga naar de pagina


George
 
PHP hulp

PHP hulp

17/04/2024 01:53:58
 
- Ariën  -
Beheerder

- Ariën -

10/10/2014 14:26:12
Quote Anchor link
Is het geen makkelijker idee om PHPmailer te gebruiken?
 
George van Baasbank

George van Baasbank

10/10/2014 14:29:55
Quote Anchor link
Aar,

Nee dat kan niet omdat mijn script deel uit maakt van een zgn. e-mailcenter waar de gebruiker mailberichten naar een specifieke groep personen moet sturen. (Cast en Crew van het Podiumspektakel)
 
- Ariën  -
Beheerder

- Ariën -

10/10/2014 14:48:07
Quote Anchor link
Ik zie niet in waarom je PHPmailer niet daarvoor kan inzetten?
Anyway...

Dit zal wel moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
 
// array with filenames to be sent as attachment
$files = array("file_1.ext","file_2.ext","file_3.ext",......);
 
// email fields: to, from, subject, and so on
$to = "[email protected]";
$from = "[email protected]";
$subject ="My subject";
$message = "My message";
$headers = "From: $from";
 
// boundary
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
// headers for attachment
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
 
// multipart boundary
$message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
$message .= "--{$mime_boundary}\n";
 
// preparing attachments
for($x=0;$x<count($files);$x++){
    $file = fopen($files[$x],"rb");
    $data = fread($file,filesize($files[$x]));
    fclose($file);
    $data = chunk_split(base64_encode($data));
    $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
    "Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
    "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    $message .= "--{$mime_boundary}\n";
}

 
// send
 
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
    echo "<p>mail sent to $to!</p>";
}
else {
    echo "<p>mail could not be sent!</p>";
}

 
?>

Bron: http://www.emanueleferonato.com/2008/07/22/sending-email-with-multiple-attachments-with-php/
 
George van Baasbank

George van Baasbank

10/10/2014 17:22:26
Quote Anchor link
Hallo Aar,

Bedankt voor je hulp. Ik krijg het alleen op dit moment (nog) niet werkend. Het lijkt er op dat ik de door mij geselecteerde bestanden niet in de door jou genoemde array $files krijg.

Mijn html-code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<p class="standaardtekstcontent">Bij te sluiten bestand(en):</p>
<input type="file" name="bijlage" id="mailonderwerp" multiple="multiple" placeholder="Selecteer bestand" value="<?php echo $_SESSION['bestandsnaam'] ; ?>" />


Mijn PHP-code om het veld uit te lezen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$aBijlage
= array();
$aBijlage = $_FILES['bijlage']['name'];
?>


Doe ik hier iets fout?
 
- Ariën  -
Beheerder

- Ariën -

10/10/2014 17:31:00
Quote Anchor link
Moet je ze niet uit de temp-map halen?
 
Ivo P

Ivo P

10/10/2014 18:53:13
Quote Anchor link
En aangezien jij kennelijk merrdere files uploadt:

http://stackoverflow.com/questions/2704314/multiple-file-upload-in-php
 
George van Baasbank

George van Baasbank

16/10/2014 09:23:49
Quote Anchor link
Goedemiddag allemaal,

Ik kom er niet helemaal uit:

Ik had hier eerst een ander bericht staan maar dat heb ik verwijderd omdat het mij nu WEL gelukt is om meerdere bijlagen toe te voegen.
Tot zover gaat alles nu goed. De aanhouder wint.
Er is in mijn code nog wel een opmerkelijk iets: Naast de juiste bijlagen worden ook twee bestanden toegevoegd (attachment.txt) met daarin de zelfde tekst als in de e-mail en er wordt een .dat-bestand toegevoegd.
Wie kan in onderstaande code daar de bron voor aanwijzen? Graag zou ik dit soort bestanden niet in mijn e-mail willen opnemen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
if(!empty($_FILES['bijlage']['name'])) {    // Bijlage bijgesloten
   $html = true;
   $headers     = 'From: ' . $cAfzenderEmail . PHP_EOL;
   $headers    .= 'Reply-To: ' . $cAfzenderEmail . PHP_EOL;
   $headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
   $headers    .= 'X-Priority: Normal' . PHP_EOL;
   $headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
   //email bestaat uit meerdere  bestanden dus vertel wat de scheidings teken is en dat het een multipart is
   $headers .= "Content-Type: multipart/mixed; boundary=\"" . $mime_boundary . "\"\r\n";
   //we zenden een attachment mee
   $headers .= "Content-Disposition:  attachment\r\n";
   $nAfteller = 0;
   while($nAfteller <= $nBijlagen) {
      //readfile
      $fp = fopen($_FILES['bijlage']['name'][$nAfteller]);
      $bestand = fread($fp,$_FILES['bijlage']['size'][$nAfteller]);
      fclose($fp);
      //create body
      //generenen een body. Dit is een multi part gezeik

      $body.= "This is a multi-part message in MIME format.\r\n";
      $body.= "\r\n";
      //boundary
      $body.= "--" . $mime_boundary . "\r\n";
      //content type + charater set (iso in dit geval)
      $body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
      //codering (7 bit)
      $body.= "Content-Transfer-Encoding: 7bit\r\n";
      $body.= "\r\n";
      //het bericht
      $body.= HaalHakenWeg($_POST['editor1']) ."\r\n";
      //boundary
      $body.= "--" . $mime_boundary . "\r\n";
      //content type + naam bestand (database.sql)
      $body .= "Content-Type: application/octet-stream; name=".$_FILES['bijlage']['name'][$nAfteller]."\r\n";
      //codering
      $body .= "Content-Transfer-Encoding: base64\r\n";
      //als bijlage toegevoegd
      $body.= "Content-disposition: attachment\r\n";
      $body .= "\n";
      $body .= chunk_split(base64_encode($bestand )) . "\r\n";
      $nAfteller++;
   }

        
   // Verzenden e-mailbericht        
   if(mail($cGeadresseerde,$cOnderwerp,$body,$headers)) {
      $cStatus = "Geslaagd";
   }
else {
      $cStatus = "Mislukt";
   }
}

?>
Gewijzigd op 16/10/2014 11:57:43 door George van Baasbank
 
George van Baasbank

George van Baasbank

26/10/2014 15:25:01
Quote Anchor link
Bedankt allemaal om mij over te halen PHPMailer te gebruiken.
E.e.a. is met de volgende code gelukt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// Start PHPMailer  
$mail = new PHPMailer();
$mail->IsHTML(true);
$body = $cBericht2;
$mail->AddReplyTo($cAfzenderEmail,"");
$mail->SetFrom($cAfzenderEmail, "");
$address = $cGeadresseerde;
$mail->AddAddress($address, "");
$mail->Subject = $cOnderwerp;
$mail->AltBody = "Om dit bericht te kunnen lezen is een HTML-compatibel browser nodig!";
$mail->MsgHTML($body);
$nAfteller = 0;
while($nAfteller < $nBijlagen) {
   $mail->AddAttachment($_FILES['bijlage']['tmp_name'][$nAfteller],$_FILES['bijlage']['name'][$nAfteller]);    // Voeg attachment toe
   $nAfteller++;
}

                    
$mail->Send();
// Einde PHPMailer

?>


Topic gesloten

George
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.