Transports
In This Article
Transports
Transports take care of the actual delivery of mail. Typically, you only need to
worry about two possibilities: using PHP's native mail() functionality, which
uses system resources to deliver mail, or using the SMTP protocol for delivering
mail via a remote server. Zend Framework also includes a "File" transport, which
creates a mail file for each message sent; these can later be introspected as
logs or consumed for the purposes of sending via an alternate transport
mechanism later.
The Zend\Mail\Transport interface defines exactly one method, send(). This
method accepts a Zend\Mail\Message instance, which it then introspects and
serializes in order to send.
Quick Start
Using a mail transport involves instantiating it, optionally configuring it, and then passing a message to it.
Sendmail Transport Usage
use Zend\Mail\Message;
use Zend\Mail\Transport\Sendmail as SendmailTransport;
$message = new Message();
$message->addTo('matthew@example.org');
$message->addFrom('ralph@example.org');
$message->setSubject('Greetings and Salutations!');
$message->setBody("Sorry, I'm going to be late today!");
$transport = new SendmailTransport();
$transport->send($message);
SMTP Transport Usage
Installation requirements
The SMTP transport depends on the zend-servicemanager component, so be sure to have it installed before getting started:
$ composer require zendframework/zend-servicemanager
use Zend\Mail\Message;
use Zend\Mail\Transport\Smtp as SmtpTransport;
use Zend\Mail\Transport\SmtpOptions;
$message = new Message();
$message->addTo('matthew@example.org');
$message->addFrom('ralph@example.org');
$message->setSubject('Greetings and Salutations!');
$message->setBody("Sorry, I'm going to be late today!");
// Setup SMTP transport using LOGIN authentication
$transport = new SmtpTransport();
$options = new SmtpOptions([
'name' => 'localhost.localdomain',
'host' => '127.0.0.1',
'connection_class' => 'login',
'connection_config' => [
'username' => 'user',
'password' => 'pass',
],
]);
$transport->setOptions($options);
$transport->send($message);
File Transport Usage
use Zend\Mail\Message;
use Zend\Mail\Transport\File as FileTransport;
use Zend\Mail\Transport\FileOptions;
use Zend\Math\Rand;
$message = new Message();
$message->addTo('matthew@example.org');
$message->addFrom('ralph@example.org');
$message->setSubject('Greetings and Salutations!');
$message->setBody("Sorry, I'm going to be late today!");
// Setup File transport
$transport = new FileTransport();
$options = new FileOptions([
'path' => 'data/mail/',
'callback' => function (FileTransport $transport) {
return sprintf(
'Message_%f_%s.txt',
microtime(true),
Rand::getString(8)
);
},
]);
$transport->setOptions($options);
$transport->send($message);
InMemory Transport Usage
use Zend\Mail\Message;
use Zend\Mail\Transport\InMemory as InMemoryTransport;
$message = new Message();
$message->addTo('matthew@example.org');
$message->addFrom('ralph@example.org');
$message->setSubject('Greetings and Salutations!');
$message->setBody("Sorry, I'm going to be late today!");
// Setup InMemory transport
$transport = new InMemoryTransport();
$transport->send($message);
// Verify the message:
$received = $transport->getLastMessage();
The InMemory transport is primarily of interest when in development or when
testing.
Migration from 2.0-2.3 to 2.4+
Version 2.4 adds support for PHP 7. In PHP 7, null is a reserved keyword,
which required renaming the Null transport. If you were using the Null
transport directly previously, you will now receive an E_USER_DEPRECATED
notice on instantiation. Please update your code to refer to the InMemory
class instead.
Users pulling their Null transport instance from the transport factory
(Zend\Mail\Transport\Factory) receive an InMemory instance instead starting
in 2.4.0.
Configuration Options
Configuration options are per transport. Please follow the links below for transport-specific options.
Available Methods
send
send(Zend\Mail\Message $message) : void
Send a mail message.
Found a mistake or want to contribute to the documentation? Edit this page on GitHub!