James John – Software Engineer

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.

James John

Software Engineer