Send Emails in PHP Using Swift Mailer
In this article, we're going to explore the Swift Mailer library, which allows you to send emails from PHP applications. Starting with installation and configuration, we'll go through a real-world example that demonstrates various aspects of sending emails using the Swift Mailer library.
What Is Swift Mailer?
When it comes to sending emails in PHP applications, you have a plethora of options to choose from. You might even end up creating your own wrapper to set up email features quickly. However, you're always in luck if you're using a well-maintained and feature-rich library.
Swift Mailer is a popular library for sending emails from PHP applications, and it's widely accepted by the PHP community. It's a feature-rich library in the sense that it covers almost every aspect of sending emails, from setting up different transports to customizing the message that's being sent.
In fact, it's a pretty straightforward process to send emails using the Swift Mailer library.
- Initialize the Transport (SMTP/Sendmail) object.
- Initialize the Mailer object with that Transport.
- Initialize the Message object.
- Format and send the message.
In the next section, we'll go through a real-world example to demonstrate each of the aforementioned steps.
Installation and Configuration
In this section, we'll go through installation and configuration of the Swift Mailer library. The installation is pretty straightforward, as it's already available as a Composer package. Before we go ahead, make sure you've installed Composer because we'll need it to install the Swift Mailer library.
Once you've installed Composer, go ahead and grab the Swift Mailer library using the following command.
$composer require "swiftmailer/swiftmailer:^6.0"
With that, the Swift Mailer library should be installed, along with the necessary dependencies in the vendor directory. And the contents of the newly created composer.json should look like this:
{
"require": {
"swiftmailer/swiftmailer": "^6.0"
}
}
So that's the installation part, but how are you supposed to use it? In fact, it's just a matter of including the autoload.php file created by Composer in your application, as shown in the following snippet.
<?php
require_once './vendor/autoload.php';
// your application code...
?>
How to Send Emails
In the previous section, we explored how to install the Swift Mailer library using Composer. In this section, we'll start implementing a real-world example.
Go ahead and create the email.php file with the following contents.
<?php
require_once './vendor/autoload.php';
try {
// Create the SMTP Transport
$transport = (new Swift_SmtpTransport('smtp.hostname', 25))
->setUsername('xxxxxxxx')
->setPassword('xxxxxxxx');
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = new Swift_Message();
// Set a "subject"
$message->setSubject('Demo message using the SwiftMailer library.');
// Set the "From address"
$message->setFrom(['[email protected]' => 'sender name']);
// Set the "To address" [Use setTo method for multiple recipients, argument should be array]
$message->addTo('[email protected]','recipient name');
// Add "CC" address [Use setCc method for multiple recipients, argument should be array]
$message->addCc('[email protected]', 'recipient name');
// Add "BCC" address [Use setBcc method for multiple recipients, argument should be array]
$message->addBcc('[email protected]', 'recipient name');
// Add an "Attachment" (Also, the dynamic data can be attached)
$attachment = Swift_Attachment::fromPath('example.xls');
$attachment->setFilename('report.xls');
$message->attach($attachment);
// Add inline "Image"
$inline_attachment = Swift_Image::fromPath('nature.jpg');
$cid = $message->embed($inline_attachment);
// Set the plain-text "Body"
$message->setBody("This is the plain text body of the message.\nThanks,\nAdmin");
// Set a "Body"
$message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html');
// Send the message
$result = $mailer->send($message);
} catch (Exception $e) {
echo $e->getMessage();
}
Let's go through how this code works.
Initialize Swift Mailer
The Swift Mailer library supports different transports like SMTP and Sendmail while sending an email. So the first thing that you need to do is to initialize the transport
object.
In the above example, I've used the SMTP transport to send emails.
$transport = (new Swift_SmtpTransport('smtp.hostname', 25))
->setUsername('xxxxxxxx')
->setPassword('xxxxxxxx');
Of course, if you would like to use the Sendmail protocol, you'll need to initialize the corresponding Swift_SendmailTransport
object.
// Create the SendMail Transport
$transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs');
Once the transport is created, we need to initialize a mailer object and pass the transport that we've created already.
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
Create a Message
After creating the transport and mailer objects, the only remaining thing is to instantiate the Swift_Message
object and decorate it with the necessary attributes.
// Create a message
$message = new Swift_Message();
Now, we'll use the $message
object to prepare the contents of our message. To start with, the setSubject
method allows you to set the subject of the email.
// Set a "subject"
$message->setSubject('Demo message using the SwiftMailer library.');
The setFrom
method is used to set the "From" address of the email.
// Set the "From address"
$message->setFrom(['[email protected]' => 'Sender Name']);
Moving ahead, let's set the "To" address of the email. In fact, there are a couple of variations for setting the recipients of the email. If you want to set a single recipient, you can use the addTo
method, and the setTo
method, on the other hand, is used to set multiple recipients.
// Set the "To address" [Use setTo method for multiple recipients, argument should be array]
$message->addTo('[email protected]','receiver name');
The addCc
and addBcc
methods are used to set the CC and BCC addresses of the email respectively.
// Add "CC" address [Use setCc method for multiple recipients, argument should be array]
$message->addCc('[email protected]', 'recipient name');
// Add "BCC" address [Use setBcc method for multiple recipients, argument should be array]
$message->addBcc('[email protected]', 'recipient name');
Attaching Files
Next, let's have a look at how you can attach a file to an email.
You first need to instantiate the Swift_Attachment
object with a valid filename. After creating the attachment object, you can add it to the email with the attach
method. Also, you can use the setFilename
method if you want to change the filename that will appear in the message attachment.
// Add an "Attachment" (Also, the dynamic data can be attached)
$attachment = Swift_Attachment::fromPath('example.xls');
$attachment->setFilename('report.xls');
$message->attach($attachment);
Along with regular file attachments, sometimes you want to embed images in the message text. You can do that by using the embed
method, as shown in the following snippet. The embed
method returns the unique ID of the embedded object, which you can use later on in the message while referencing the image via the src
property.
// Add inline "Image"
$inline_attachment = Swift_Image::fromPath('nature.jpg');
$cid = $message->embed($inline_attachment);
The Message Body
Next, let's set the email body by using the setBody
method.
// Set the plain-text "Body"
$message->setBody("This is the plain text body of the message.\nThanks,\nAdmin");
If you want to set the HTML version of the message, you can use the addPart
method, as shown in the following snippet. As you can see, we're using $cid
to reference the image we embedded earlier.
// Set a "Body"
$message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html');
Send the Message!
Finally, we'll use the send
method of the Mailer object to send the email.
// Send the message
$result = $mailer->send($message);
Try running the script, and you should receive an email! Let me know in the comment section if you face any issues.
Conclusion
Today, we looked at one of the most popular PHP libraries for sending emails: Swift Mailer. With this library, you can effortlessly send emails from your PHP scripts.
Feel free to post your thoughts and queries using the form below.
Original Link:
TutsPlus - Code
Tuts+ is a site aimed at web developers and designers offering tutorials and articles on technologies, skills and techniques to improve how you design and build websites.More About this Source Visit TutsPlus - Code