Ik ben bezig een systeem te maken waar men emails mét attachments kan sturen naar de klanten.
Meerdere attachments dus.
Ik heb diverse scripts bekeken en dus delen overgenomen. Het zou moeten werken, ik heb met bestaande emails vergeleken en geanalyseerd op juiste opbouw.
Het lijkt te lukken, maar er gebeuren vreemde dingen. Een stukje code dat belangrijk is voor "herkennen" van email body, bleek verdwenen te zijn.
Ik zal stukjes code hier tonen zodat je kan zien of er ergens fout is.
Deze staat in functies.php. De function code werkt prima, gebruik ook op andere sites.
En in maakemail.php heb ik deze. Dat wordt aangeroepen via de emailformulier.
Maakpdf.php is al goed getest. Het werkt met FPDF code en ik heb al zonder problemen PDF mee gemaakt. Er zitten geen fouten in. De string gaat via return in de php en dat heb ik geen fouten mee gehad. Het werkt goed.
Bij tests is deel van te zien, die in alle testemails verschijnt onderaan.
Maar een stukje tekst ontbreekt steeds in alle mailtests. Dat zit NIET ertussen in alle testemails.
Waarom dat eruit is geknipt weet ik niet. Het is gewoon weg bij aankomst. Hierdoor leest de mailprogramma, maar ook online webmail, de geheel verkeerd en laat zien als één groot brok tekst zien met attachment codesoep eronder. Het kan zo niet!
Wie kan me goede tips geven over correct opbouwen van email? Zodat er niks weggelaten wordt tijdens versturen en goed gelezen wordt. Veel sites hebben soortgelijke code die ik gebruik, dus ik kan geen antwoord vinden. Ik weet niet precies wat de regels zijn in $header string en wat in $body moet komen staan.
Het sturen gaat met mail() functie.
Misschien zit het probleem in boundary regels. Ik heb dat overal gelijk gezet. Dat zou niet veel moeten uitmaken, want ik heb werkende emails gezien die overal gelijk is.
Aan je het woord.
Ik ben erg benieuwd.
Meerdere attachments dus.
Ik heb diverse scripts bekeken en dus delen overgenomen. Het zou moeten werken, ik heb met bestaande emails vergeleken en geanalyseerd op juiste opbouw.
Het lijkt te lukken, maar er gebeuren vreemde dingen. Een stukje code dat belangrijk is voor "herkennen" van email body, bleek verdwenen te zijn.
Ik zal stukjes code hier tonen zodat je kan zien of er ergens fout is.
Deze staat in functies.php. De function code werkt prima, gebruik ook op andere sites.
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
| function sendmail($mailTo,$mailSubject,$mailBody,$mailFrom,$type='text',$mime_boundary) { // extra // $mysite = whatsMySite(); // define("MYSITE",$mysite); $mailHeader=""; // header maken en sturen $mailHeader .= "From: $mailFrom\n"; $mailHeader .= "Reply-To: $mailFrom\n"; $mailHeader .= "X-Mailer: http://www.vdsluisvakanties.nl\n"; $mailHeader .= "X-Sender-IP: {$_SERVER['REMOTE_ADDR']}\n"; // type headers if ($type=="multi") { if ($mime_boundary=="") { list($mtime,$time)=explode(" ",microtime()); $fulltime=$time+$mtime; $semi_rand = md5($fulltime); $mime_boundary = "x{$semi_rand}x"; } $mailHeader .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"--------{$mime_boundary}\"\n"; $mailBody .= "\nMIME-Version: 1.0\n". "Content-Type: multipart/mixed;\n" . " boundary=\"--------{$mime_boundary}\"\n"; "This is a multi-part message in MIME format.\n". "--------{$mime_boundary}\n". "Content-Type: text/html; charset=UTF-8\n". $mailBody . "\n". "--------{$mime_boundary}--\n"; } if ($type=="html") { $mailHeader .= "MIME-Version: 1.0\n"; $mailHeader .= "Content-Type: text/html; charset=\"UTF-8\"\n"; $mailHeader .= "Content-Transfer-Encoding: 7bit\n\n"; } if ($type=="text") { $mailHeader .= "MIME-Version: 1.0\n"; $mailHeader .= "Content-Type: text/plain; charset=\"UTF-8\"\n"; $mailHeader .= "Content-Transfer-Encoding: 7bit\n\n"; } $mailParams = "-f$mailFrom"; $mailResult = mail($mailTo,$mailSubject,$mailBody,$mailHeader,$mailParams); return $mailResult; } function whatsMySite() { // protocol if(isset($_SERVER['HTTPS']) and ("on" == $_SERVER['HTTPS'])) { $mysite = "https://"; } else { $mysite = "http://"; } // host $mysite .= $_SERVER['HTTP_HOST']; // path $path = dirname($_SERVER['SCRIPT_NAME']); if("/" != $path) { $mysite .= $path; } return($mysite); } |
En in maakemail.php heb ik deze. Dat wordt aangeroepen via de emailformulier.
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
| $email=$_POST['email']; $body=$_POST['ebody']; $subject=stripslashes($_POST['subject']); $attachment=$_POST['attachment']; $filetype="application/pdf"; list($mtime,$time)=explode(" ",microtime()); $fulltime=$time+$mtime; $semi_rand = md5($fulltime); $mime_boundary = "x{$semi_rand}x"; $body.="\n\n"; // attachment data collect $rows=count($attachment); if ($rows>0) { $_SESSION['string']=true; for ($i=0;$i<$rows;$i++) { $_SESSION['briefid']=$attachment[$i]; $adata=include "maakpdf.php"; $data=chunk_split(base64_encode($adata[pdf])); $filename=$adata[file]; $body .= "\n--------{$mime_boundary}\n" . "Content-Type: {$filetype};\n" . " name=\"{$filename}\"\n" . "Content-Transfer-Encoding: base64\n" . "Content-Disposition: attachment;\n" . " filename=\"{$filename}\"\n\n" . $data; } } unset($_SESSION['toonbrief']); unset($_SESSION['string']); // finished $result=sendmail($email,$subject,$body,$mailFrom,'multi',$mime_boundary); |
Maakpdf.php is al goed getest. Het werkt met FPDF code en ik heb al zonder problemen PDF mee gemaakt. Er zitten geen fouten in. De string gaat via return in de php en dat heb ik geen fouten mee gehad. Het werkt goed.
Bij tests is deel van te zien, die in alle testemails verschijnt onderaan.
code:
1
2
3
4
5
| MIME-Version 1.0 Content-type: multipart/mixed; boundary="--------xxxxx" (hier verschijnt stukje emailtekst en daaronder gemaakte attachments in base64) |
Maar een stukje tekst ontbreekt steeds in alle mailtests. Dat zit NIET ertussen in alle testemails.
code:
1
2
3
| This is a multi-part message in MIME format --------xxxxx Content-Type: text/html; charset=UTF-8 |
Waarom dat eruit is geknipt weet ik niet. Het is gewoon weg bij aankomst. Hierdoor leest de mailprogramma, maar ook online webmail, de geheel verkeerd en laat zien als één groot brok tekst zien met attachment codesoep eronder. Het kan zo niet!
Wie kan me goede tips geven over correct opbouwen van email? Zodat er niks weggelaten wordt tijdens versturen en goed gelezen wordt. Veel sites hebben soortgelijke code die ik gebruik, dus ik kan geen antwoord vinden. Ik weet niet precies wat de regels zijn in $header string en wat in $body moet komen staan.
Het sturen gaat met mail() functie.
Misschien zit het probleem in boundary regels. Ik heb dat overal gelijk gezet. Dat zou niet veel moeten uitmaken, want ik heb werkende emails gezien die overal gelijk is.
Aan je het woord.