Simple PHP Mail Function Using Swift Mailer
Using the built-in mail() function is PHP is pretty cool but not cool if you’re sending bulk or large mails and secondly it always head for the Spam box 😀 because not all needed headers are there. But using a mailer, I use Swift Mailer and it’s cool for me, get Swift Mailer and also read some docs about it. The part I want to do here is create a simple function like the mail() function, to send mail via the Swift Mailer, this function might not have all features Swift Mailer has but I guess it has the vital ones 😉
<?php
function send_mail ( $from, $to, $subject, $body, $html = false, $to_each = true ) {
//$from variable must be an array and there must be receivers
if ( !is_array ( $from ) ) {
die ( 'Email: $from must be array' );
}
if( !$to )
die( 'No receivers' );
//Receivers are in comma separated, converting it to arrays Swift uses
$to = explode ( ',', $to );
//Remove repeated emails
$to = array_unique( $to );
//Start new instance
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance ( $transport );
//Set the message data - subjects, from and body
$message = Swift_Message::newInstance ( $subject )
->setFrom ( $from )
->setBody ( $body )
;
//If message is HTML, set header
if ( $html ) {
$header = $message->getHeaders()->get ( 'Content-Type' );
$header->setValue ( 'text/html' );
}
//If to be sent to each mail at a time - Receivers won't see other emails that received it too
if ( $to_each ) {
foreach ( $to as $address) {
//Send only to valid emails to escape exceptions
if( Swift_Validate::email( $address ) ) {
$message->setTo ( $address );
$result = $mailer->send ( $message );
}
}
}
//Send to all mails at a time
else {
$message->setTo ( $to );
$result = $mailer->send( $message );
}
return $result;
}
Arguments:
$from = This is the sender’s name and email address and must be in this format
array( '[email protected]' => 'Sender Name' )
$to = This are the receivers in comma separated e.g.
[email protected], [email protected]
$subject = The message subject
$body = The message content
$html = The default value of this argument when not supplied is false, which means the mail will be sent as plain text. Set to true if it’s a HTML content mail
$to_each = This set to true will send mail to each user at a time, making it more secure that a receiver won’t see other receivers too, this takes time than when set to false. But false…other receivers can see emails that received it too.
Example
Simple mail sending:
send_mail( array( '[email protected]' => 'Don Jajo' ), '[email protected], [email protected]', 'Testing Mail', 'This is the body' );
Sending HTML Content:
send_mail( array( '[email protected]' => 'Don Jajo' ), '[email protected], [email protected]', 'Testing Mail', '<strong><u>This is the body</u></strong>', true );
NB: The Swift_required.php must be included on the PHP file before this function works.