This is an example of how to send an email from a component. You
would typically put this into your components controller.
Contents
·
1 Fetch the mail object
·
2 Set a sender
·
3 Recipient
·
4 Create the mail
·
5 Sending the mail
|
Fetch the mail object
A reference to the global mail object (JMail) is fetched through
the JFactory object. This is the object creating our mail.
$mailer = JFactory::getMailer();
Set a sender
The sender of an email is set with setSender. The
function takes an array with an email address and a name as an argument. We
fetch the sites email address and name from the global configuration. These are
set in the administration back-end (Global Configuration -> Server ->
Mail Settings).
$config = JFactory::getConfig();
$sender = array(
$config->getValue(
'config.mailfrom' ),
$config->getValue(
'config.fromname' ) );
$mailer->setSender($sender);
In 3.1, $config->getValue() should be changed to
$config->get()
Recipient
You set the recipient of an email with the function addRecipient. To set
the email address to the currently logged in user, we fetch it from the user
object.
$user = JFactory::getUser();
$recipient = $user->email;
$mailer->addRecipient($recipient);
If we had multiple recipients we would put each recipients email
address in an array.
$recipient = array( 'person1@domain.com', 'person2@domain.com', 'person3@domain.com' );
$mailer->addRecipient($recipient);
Create the mail
We need to set a subject line and create the text body. The
subject is set with setSubject.
The easy way to create an email body is as a string with plain
text. Use the function setBody to add a message to the mail body. You can also
attach a file with addAttachment. It
takes a single file name or an array of file names as argument.
$body = "Your
body string\nin double quotes if you
want to parse the \nnewlines etc";
$mailer->setSubject('Your subject string');
$mailer->setBody($body);
//
Optional file attached
$mailer->addAttachment(JPATH_COMPONENT.'/assets/document.pdf');
If you prefer to format your email in HTML, you need to tell the
mailer it is HTML. This is done with IsHTML. When sending
HTML emails you should normally set the Encoding to base64 in order to avoid unwanted characters
in the output. The subject line and any attachments are handled as above, with
the exception of images embedded in the HTML. These are taken care of with the
function AddEmbeddedImage.
$body = '<h2>Our
mail</h2>'
.
'<div>A
message to our dear readers'
.
'<img
src="cid:logo_id" alt="logo"/></div>';
$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);
//
Optionally add embedded image
$mailer->AddEmbeddedImage( JPATH_COMPONENT.'/assets/logo128.jpg', 'logo_id', 'logo.jpg', 'base64', 'image/jpeg' );
Normally you would leave any images on your server and refer to
them with an ordinary HTML image tag, to reduce size of the mail and the time
sending it.
Sending the mail
The mail is sent with the function Send. It returns true on success or a JError
object.
$send = $mailer->Send();
if ( $send !== true ) {
echo
'Error
sending email: ' . $send->message;
} else {
echo
'Mail sent';
}
You would probably want to write your own error handler, if there
is an error sending the mail.
No comments:
Post a Comment