Alla som har försökt använda funktionen mail() för att skicka html mail vet att det inte är helt självklart att få till det så att det fungerar bra. Istället har det funnits paket som Swiftmailer, för inte så länge sedan så släppts version 4 av systemet. Här tänkte jag visa hur vi använt det för att skapa ett html mail från ett formulär.
formulärkoden ser i detta fall ut såhär:
<form action="/email/intresseanmalan" method="post" name="intresseanmalan"> <input type="hidden" name="subject" value="rubrik på Mailet"/> <input type="hidden" name="fromEmail" value="test@dindoman.se"/> <input type="hidden" name="fromName" value="FrånNamn"/> <input type="hidden" name="toEmail" value=""/>
<table cellpadding="0" cellspacing="4" border="0"> <tr><td>Namn</td> <td><input type="text" size="20" name="Namn" /></td></tr> <tr><td>E-post</td> <td><input type="text" size="20" name="Email" /></td></tr> <tr><td valign="top"></td> <td><input type="submit" value="Skicka meddeland"/></td></tr> </table></form> och php koden såhär require_once $wwwRoot.'/Simple/php/Swift-4.0.3/lib/swift_required.php'; $transport = Swift_SmtpTransport::newInstance('smtpServer', smtpPort) ->setUsername('username') ->setPassword('password') ; //build message from post variable! foreach ($_POST as $kat => $varde) { if($kat == 'subject' || $kat == 'fromEmail' || $kat == 'fromName' || $kat == 'toEmail'){} else{ //Html versionen av mailet byggs här. $messageHtml = $messageHtml.''.$kat.' = '.$varde.'<br /><br />'; //Textversionen av mailet byggs här. $messagePlain = $messagePlain.''.$kat.' = '.$varde.' '; } } $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance() ->setSubject($_POST['subject']) ->setFrom(array($_POST['fromEmail'] => $_POST['fromName'])) // Vi skickar meddelandet till adressen som är ifylld i fältet email ->setTo(array($_POST['Email'])) ->setBody($messagePlain) ->addPart($messageHtml, 'text/html') ; $result = $mailer->send($message);
Om vi sedan skall spara det i en databas och har multipla emailfromulär på en site så är det ganska smidigt att bara peta in hela $post variabeln i en databas med 2 kolumner. Genom att alltid hålla de fält som är satta som ”hidden” likadana så får vi ganksa snart en väldigt sökbar databas som är helt dynamisk. Ungefär såhär:
//En tabell med email som ger ett id och en timestamp när emailet är skickat. Koden är inte testad men borde fungera.
mysql_query("INSERT INTO email (id, date) VALUES ('','')");
$thisId = mysql_insert_id();
foreach ($_POST as $kat => $varde) {
mysql_query("INSERT INTO emailComponents (cat, value, emailId)
VALUES ('".$kat."', '".$varde."', '".$thisId."')");
';
header("Location: {$_SERVER['HTTP_REFERER']}/ok");