Het gebruik van Swift Mailer
Thursday, March 22nd, 2007Hoewel ik pas de oplossing voor het mailen in PHP (in Mac OS X) leek te hebben, blijkt toch dat het niet werkt. Van alle testemails is de eerste op magische wijze verstuurd (ik snap nog steeds niet hoe), maar van de rest niets aangekomen.
Bovendien valt heel het draadloos netwerk uit zodra ik sendmail probeer te gebruiken.. Misschien ligt het aan ons (netwerk), maar praktisch is het niet.
Waar ik uiteindelijk de oplossing in heb gevonden is het geweldige pakket Swiftmailer. Hiermee is het mogelijk om een SMTP-server te gebruiken om email te versturen.
Dit heb ik eerst gedaan op de volgende manier:
- Controleer eerst of je versie van PHP gecompiled is met SSL-support. Dit kun je doen door een PHP-bestand te maken met de simpele code
<?php phpinfo() ?>en dit even in je browser te openen. Als er achter het configure-command ssl vernoemd staat is het meegecompileerd. Als dat niet zo is, zal een verbinding met GMail niet mogelijk zijn. - Maak een account aan bij GMail. Dit kan sinds een poosje zonder uitnodiging en is volledig gratis. Het voordeel van een GMail-account is dat deze niet gekoppeld is aan een IP-adres, iets wat met een laptop erg lastig kan zijn. Hoewel ik inmiddels de SMTP van onze (tijdelijke) webhost gebruik, kan het gebruik van de SMTP van je eigen ISP problemen opleveren. Vaak mag je alleen van hun servers gebruik maken als het IP aan hen toebehoort, dit is om spam te voorkomen.
- Download het pakket.
- Pak het pakket uit, ik heb de tar.gz voor php5 genomen en uitgepakt op de terminal met het volgende commando: tar -xvzf Swift*php5.tar.gz.
Eventueel kan ook bijvoorbeeld het programma The Unarchiver gebruikt worden, als je niet zo van de commandline houdt. - Zelf draai ik de ontwikkelserver op de laptop, maar eventueel zou je natuurlijk de bestanden moeten uploaden naar je webserver.
- Eventueel kun je de tests laten draaien, maar als je net zo eigenwijs bent als ik sla je dat stuk over.
- Nu gaan we verbinding maken met GMail, met het volgende stukje code (PHP5):
<?php require_once "swift/Swift.php"; require_once "swift/Swift/Connection/Multi.php"; require_once "swift/Swift/Connection/SMTP.php"; try { $oConnection = new Swift_Connection_SMTP( "smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS); $oConnection->setUsername( "gebruikersnaam@gmail.com" ); //gebruikersnaam even vervangen met *jouw* gebruikersnaam en @gmail.com niet vergeten! $oConnection->setPassword( "gmailwachtwoord" ); $oMail = new Swift( $oConnection ); echo "<p>Connectie gemaakt!</p>"; } catch( Exception $e ) { print "Fout: " . $e->getMessage(); } - Bekijk nu je pagina, als er “connectie gemaakt” op je scherm verschijnt is het goed gegaan. Zo niet, even de foutmelding lezen. Naar mijn ervaring zijn de foutmeldingen op zich al erg duidelijk, maar bij een vraag kun je altijd reageren onder deze post. Een error die ik momenteel nog krijg op mijn server (dus niet de laptop) is:
The SMTP connection failed to start [ssl://smtp.gmail.com:465]: fsockopen returned Error Number 276051505 and Error String 'Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?'Zoals de foutmelding al aangeeft heb ik SSL niet meegecompileerd in PHP, dat moet dus nog even gebeuren.
- Nu gaan we een simpele email opstellen en verzenden met behulp van Swift. Zet dit onder de laatste regel van het vorige codevoorbeeld:
$oMessage = new Swift_Message("Hallo wereld", "Dag wereld,\\r\\n\\r\\nIk ben blij u te mogen begroeten!\\r\\n\\r\\nGroeten\\r\\n\\r\\nSwift Mailer"); $oRecipient = new Swift_Address("martijn@digicted.nl", "Martijn Engler"); $oFrom = new Swift_Address("blizt.nl@gmail.com", "Mijn eigen naam"); if( !$oMail->send( $oMessage, $oRecipient, $oFrom ) ) { echo "<p>Het bericht kon niet verzonden worden.</p>"; } else { echo "<p>Het bericht is succesvol verzonden!</p>"; }Kruis je vingers, herlaad het bestand in je browser en dan maar hopen dat er bericht in beeld komt dat het bericht succesvol verzonden is.
Als dat niet zo is, even goed nakijken of je de velden wel juist hebt ingevuld. - Als het goed is komt er nu een email binnen in de inbox van het emailadres wat je hebt ingevuld bij $oRecipient.
Dit waren slechts enkele simpele mogelijkheden van Swift Mailer, meer is gedocumenteerd in de wiki.
Zo is er een deel over het verzenden van (bijvoorbeeld) nieuwsbrieven en het werken met bijlages.