Hey allen,
Graag zou ik (op een deftige manier) via PHP een email willen versturen, met plain tekst/html ondersteuning en een bijlage.
Ik maak gebruik van de standaard mailfunctie in PHP, en wens hier niet van af te wijken. Ik weet dat er plugins en dergelijke bestaan, maar deze wens ik dus niet te gebruiken.
Mijn code:
Het probleem hierbij is dat de mail de plain tekst en html onder elkaar plaatst in 1 mail. De bijlage daarentegen is wel in orde en kan goed geopend worden.PHP Code:
$mime_boundary = 'Multipart_Boundary_x'.md5(time()).'x';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$mime_boundary\"\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n";
$headers .= "From: Bla <bla@bla.nl>\r\n";
$headers .= "X-Sender-IP: $_SERVER[SERVER_ADDR]\r\n";
$headers .= 'Date: '.date('n/d/Y g:i A')."\r\n";
$body = "This is a multi-part message in mime format.\n\n";
# Plain text version
$body .= "--$mime_boundary\n";
$body .= "Content-Type: text/plain; charset=\"charset=us-ascii\"\n";
$body .= "Content-Transfer-Encoding: 7bit\n\n";
$body .= $text_content;
$body .= "\n\n";
# HTML version
$body .= "--$mime_boundary\n";
$body .= "Content-Type: text/html; charset=\"UTF-8\"\n";
$body .= "Content-Transfer-Encoding: 7bit\n\n";
$body .= $html_content;
$body .= "\n\n";
# Attachment
$body .= "--$mime_boundary\n";
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "Content-Disposition: attachment\n\n";
$body .= $attachment;
$body .= "\n\n";
$body .= "--$mime_boundary--\n"; # <-- Notice trailing --, required to close email body for mime's
Ik weet dat ik nog ergens volgende code moet toevoegen:
Dit zal ervoor zorgen dat de plain tekst als alternatief wordt weergegeven indien html niet gelezen kan worden.Code:Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\r\n
Weet iemand echter waar ik deze regel moet implementeren en wat ik moet wijzigen aan mijn script? Heb zelf al wat proberen ondernemen, maar momenteel geen succes.
Alvast bedankt.
- Kevin.
- Mail versturen met bijlage
-
26-11-2013, 17:00 #1
- Berichten
- 80
- Lid sinds
- 14 Jaar
Mail versturen met bijlage
-
-
26-11-2013, 17:10 #2
- Berichten
- 487
- Lid sinds
- 15 Jaar
Re: Mail versturen met bijlage
http://php.net/manual/en/function.header.php
Attachment header moet je hiervoor toevoegen, dan heb je de mogelijkheid om bestanden als bijlage te versturen.
-
26-11-2013, 19:11 #3
- Berichten
- 80
- Lid sinds
- 14 Jaar
Re: Mail versturen met bijlage
Hey Erik,
Bedankt voor je bericht.
Heb ik dit al echter niet goed geďmplementeerd?
Zie:Code:"Content-Disposition: attachment\n\n";
Alvast bedankt voor de verdere hulp.
- Kevin.
-
26-11-2013, 22:05 #4
- Berichten
- 487
- Lid sinds
- 15 Jaar
Re: Mail versturen met bijlage
Beste Kevin,
Ik gebruik zelf standaard dit voorbeeld http://phpwiki.santhe.nl/index.php/D...te_mailheaders hier staan PHP headers waar ik altijd correct mee kan mailen.
Wellicht is de code de fout maar zonder vooraf test werk kan ik dit ook niet precies zeggen.
-
27-11-2013, 00:08 #5
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Mail versturen met bijlage
Waarom lastig doen? Als je het op een 'deftige manier' manier wilt doen, dan is dit helaas niet de manier om het te doen.
Je kunt beter iets zoals de html mime mail class downloaden en gebruiken en je hele script vervangen door iets leesbaarders zoals:
$mail = new htmlMimeMail();
$mail->setHtml( $html, $tekst );
$mail->setReturnPath("");
$mail->setFrom('"Adzender" <afzender@domein.nl>');
$mail->setSubject("Je onderwerp");
$mail->addAttachment($file, $name);
$result = $mail->send(array("ontvanger@mail"));
Of je dan verder die class wilt uiteen rafelen (redelijk eenvoudig overigens) moet je zelf weten. Is best leerzaam, daar niet van, maar je kunt je dan ook verder concentreren op je script en wat het moet doen.
-
27-11-2013, 16:52 #6
- Berichten
- 11
- Lid sinds
- 11 Jaar
Re: Mail versturen met bijlage
Ik ben zelf erg weg van de PHPMailer class van worxware
-
28-11-2013, 13:23 #7
- Berichten
- 80
- Lid sinds
- 14 Jaar
Re: Mail versturen met bijlage
Hey allen,
Bedankt voor de feedback. Ik maak ondertussen gebruik van de PHPMailer (Worxware), zoals hierboven werd aangemoedigd door Frank (waarvoor dank).
Mijn mails komen goed aan, maar de bijlage zit gewoon niet in de mail...
Ik maak gebruik van volgende code:
PHP Code:$mail = new PHPMailer;
$mail->From = 'info@mijnsite.nl';
$mail->FromName = 'Mijn site';
$mail->addAddress($to);
$mail->WordWrap = 50;
$mail->addAttachment($attachment, $filename);
$mail->isHTML(true);
$mail->Subject = 'mail onderwerp';
$mail->Body = $html_content; // Html text
$mail->AltBody = $text_content; // Plain text
$mail->send();
De variabele $attachment is afkomstig van volgende code (Fpdf):
PHP Code:$pdfdoc = $pdf->Output("", "S");
$filename = 'mijnbijlage.pdf';
$attachment = chunk_split(base64_encode($pdfdoc));
Weet er iemand de reden waarom deze bijlage niet bij de mail verzonden wordt?
Alvast bedankt.
- Kevin.
-
28-11-2013, 13:55 #8
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: Mail versturen met bijlage
PHPMailer is zeker een aanrader! Wordpress maakt hier ook gebruik van.
Zet eens een test.pdf in dezelfde map als waar je de e-mail verstuurd en run de volgende code: (Wel even from en to aanpassen uiteraard)
PHP Code:$email = new PHPMailer();
$email->From = 'mail@jeserver.nl';
$email->FromName = 'Kevin A';
$email->Subject = 'E-mail met attachment?';
$email->Body = 'Bla bla bla. Attachment enclosed?';
$email->AddAddress( 'mail@jeadres.nl' );
$file_to_attach = 'test.pdf';
$email->AddAttachment( $file_to_attach , 'test.pdf' );
return $email->Send();
-
28-11-2013, 15:55 #9
- Berichten
- 80
- Lid sinds
- 14 Jaar
Re: Mail versturen met bijlage
Hey Robin,
Dit werkt inderdaad wel. Is het dan niet mogelijk om een bijlage te versturen die direct wordt aangemaakt door de server?
(met mijn origineel script helemaal bovenaan werkte dit namelijk wel)
Alvast bedankt.
- Kevin.
-
28-11-2013, 16:59 #10
- Berichten
- 11
- Lid sinds
- 11 Jaar
Re: Mail versturen met bijlage
http://phpmailer.worxware.com/index.php?pg=tutorial#3
Kevin dat kan ook. Alleen dan dien je AddStringAttachment() te gebruiken. In plaats van een filename geef je dan een string mee die de inhoud van het attachment in zich heeft. zie ook de bovenstaande link.
-
28-11-2013, 20:22 #11
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: Mail versturen met bijlage
Dit is wellicht handiger voor je. Zou je eventueel nog PHPMailer in kunnen zetten :-)
http://stackoverflow.com/a/4357828
-
29-11-2013, 14:46 #12
- Berichten
- 80
- Lid sinds
- 14 Jaar
Re: Mail versturen met bijlage
Bedankt allemaal, probleem verholpen dankzij de oplossing van Frank.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic