Bcc, later toegevoegd, werkt niet [opgelost]
Nu probeer ik een bcc toe te voegen, en toch werkt het niet. Weet iemand wat ik hier mis?
$mail_from
$mail_to
Zijn voorzien van een e-mailadres.
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
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
$mailMessage = "<strong>Bijgaand het PDF-document</strong>";
$mailAttach = "pdf/".$kenmerk.".pdf";
// GENERATE AFSCHEIDING TUSSEN BERICHT EN ATTACHMENT
$mailBoundary = md5(time());
$mailHead = 'From: '.$email_from."\r\n";
// toegevoegd bcc check, dan $mailHead complementeren
if ($kopie=="1") {
$mailHead .= 'BCC: '.$email_from."\r\n";
}
// einde toevoeging en check
$mailHead .= 'X-Mailer: PHP/' . phpversion();
$mailHead .= implode("\r\n", [
"MIME-Version: 1.0",
"Content-Type: multipart/mixed; boundary=\"$mailBoundary\""
]);
// TUSSENDEEL
$mailBody = implode("\r\n", [
"--$mailBoundary",
"Content-type: text/html; charset=utf-8",
"",
$mailMessage
]);
// DECODING ATTACHMENT
$mailBody .= implode("\r\n", [
"",
"--$mailBoundary",
"Content-Type: application/octet-stream; name=\"". basename($mailAttach) . "\"",
"Content-Transfer-Encoding: base64",
"Content-Disposition: attachment",
"",
chunk_split(base64_encode(file_get_contents($mailAttach))),
"--$mailBoundary--"
]);
// STUUR DE MAIL NU MET BIJLAGE-ATTACHMENT
echo mail($mailTo, $mailSubject, $mailBody, $mailHead);
$mailAttach = "pdf/".$kenmerk.".pdf";
// GENERATE AFSCHEIDING TUSSEN BERICHT EN ATTACHMENT
$mailBoundary = md5(time());
$mailHead = 'From: '.$email_from."\r\n";
// toegevoegd bcc check, dan $mailHead complementeren
if ($kopie=="1") {
$mailHead .= 'BCC: '.$email_from."\r\n";
}
// einde toevoeging en check
$mailHead .= 'X-Mailer: PHP/' . phpversion();
$mailHead .= implode("\r\n", [
"MIME-Version: 1.0",
"Content-Type: multipart/mixed; boundary=\"$mailBoundary\""
]);
// TUSSENDEEL
$mailBody = implode("\r\n", [
"--$mailBoundary",
"Content-type: text/html; charset=utf-8",
"",
$mailMessage
]);
// DECODING ATTACHMENT
$mailBody .= implode("\r\n", [
"",
"--$mailBoundary",
"Content-Type: application/octet-stream; name=\"". basename($mailAttach) . "\"",
"Content-Transfer-Encoding: base64",
"Content-Disposition: attachment",
"",
chunk_split(base64_encode(file_get_contents($mailAttach))),
"--$mailBoundary--"
]);
// STUUR DE MAIL NU MET BIJLAGE-ATTACHMENT
echo mail($mailTo, $mailSubject, $mailBody, $mailHead);
Gewijzigd op 24/08/2022 16:10:30 door Jan te Pas
Verder zijn er ook prachtige libraries zoals PHPmailer die precies doen wat je wilt, zonder dat je het wiel opnieuw fabriceert.
Toevoeging op 24/08/2022 12:34:33:
@Ariën, even getest, alles komt goed in de header. Ik ga de spambak checken. Wellicht ligt daar de missing link!
Als je daar niet het fijne van weet (zoals ik) kan je het beste een beproefde class gebruiken.
Dan hoef je als het goed is ook niet in de spambak te kijken.
Bijvoorbeeld als $mail_from een willekeurig mailadres is dat niets met de afzendende server te maken heeft.
Bijvoorbeeld: je script stuurt mail met from = [email protected], maar dat doet jouw willekeurige server.
Grote kans dat in zo'n geval een ontvangende mailserver zegt "server X zou geen mails horen te sturen uit naam van phphulp.nl, dus die drop ik / zet ik in spam"
En bij droppen zie je hem nergens terug.
En dat maakt het lastig debuggen: effectief zit er voor de ontvanger geen verschil tussen "mail is niet verstuurd" en "mail komt niet aan". Maar technisch is dat een heel ander verhaal.
Als PHP en jouw server de mail "op de bus doen" is het technisch klaar.
Maar als hij niet (direct) aan komt, kan dat nog aan veel dingen liggen.
Dus de vraag is vooral "komt de mail echt niet buiten, of houdt de ontvangende server hem tegen?"
Controleer dit vooral niet met @gmail adressen: Google is nogal streng.
(en check ook even of het aan BCC ligt, of dat je de mail sowieso dus niet ontvangt)
Google is streng, maar Microsoft met Live, Hotmail, Outlook etc is een drama!
@Ivo P. Ik heb ook de spambak bekeken. Niets. Alle adressen zijn géén e-mailadressen. De code hierboven gebruik ik al geruime tijd, alle mails worden keurig afgehandeld en verstuurd. Nu probeer ik, wat ik dacht, een simpele handeling was, een bcc toe te voegen. Heb bcc BCC en combinaties gebruikt. Ik weet dan “\r\n” tussen apostrophes moeten staan. Dus ik ga lekker verder speuren. Dank.
En als je phpMailer uittest?
Toevoeging op 24/08/2022 16:14:04:
OPGELOST! Zoiets kleins…
Ik heb de oplossing gevonden. Was iets kleins. Hieronder de werkende code.
Het verschil is dat ik nu de code heb voorzien van ". En het werkt nu wel. Dank allen. Gelukkig hoef ik hier niet verder mee aan de slag. Iets kleins kan dus zorgen voor onvoorspelbare resultaten. Weer wat geleerd.
Dank allen
}
Maar maakt het nog uit of je BCC of Bcc gebruikt?
Kort zoeken levert dat de headers niet hoofdlettergevoelig moeten zijn, maar het op sommige servers wel zijn.
@Ivo P, Is inderdaad zo, maar ik heb inmiddels van alles geprobeerd in bovenstaande code. Inmiddels alles teruggezet. Blijft werken, is bij mij niet hoofdlettergevoelig. Alleen de aanhalngstekens zijn kennelijk een hickup geweest.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$mail = new PHPMailer(true);
try {
$mail->setFrom('[email protected]', 'mijn website');
$mail->addAddress('[email protected]', 'Joe krijgt de mail');
$mail->addAddress('[email protected]', 'Jane ook');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
$mail->addAttachment($mailAttach); // verwijzing naar de file op jouw server.
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
// mail is verstuurd: geef een succesmelding of redirect de gebruiker
// mail kan altijd nog ten prooi vallen aan spamfilters maar is in elk geval op weg gestuurd
}
catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>
$mail = new PHPMailer(true);
try {
$mail->setFrom('[email protected]', 'mijn website');
$mail->addAddress('[email protected]', 'Joe krijgt de mail');
$mail->addAddress('[email protected]', 'Jane ook');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
$mail->addAttachment($mailAttach); // verwijzing naar de file op jouw server.
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
// mail is verstuurd: geef een succesmelding of redirect de gebruiker
// mail kan altijd nog ten prooi vallen aan spamfilters maar is in elk geval op weg gestuurd
}
catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>
Toevoeging op 25/08/2022 09:28:50:
Ik vind het een groot voordeel dat je niet zelf keer op keer een script moet maken met de losse headers en de opdeling met mailboundry's en de content-type headers bij attachments.
@Ivo P, dank je wel. Ik heb dit toegepast bij een nieuwere site. Maar soms moet je met oude code rommelen. Fijn dat je hielp.