E-mailbericht met meerdere bijlagen
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)
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
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");
}
$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
Is het geen makkelijker idee om PHPmailer te gebruiken?
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)
Anyway...
Dit zal wel moeten werken:
Code (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
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>";
}
?>
// 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/
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)
1
2
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'] ; ?>" />
<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:
Doe ik hier iets fout?
Moet je ze niet uit de temp-map halen?
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)
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
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";
}
}
?>
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
E.e.a. is met de volgende code gelukt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
?>
// 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