You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

The PHP mail() function can be problematic on IBM i.  Sometimes it works fine, other times it seems to not work at all.  When it does not work, it can be very difficult or even impossible to determine why.  Fortunately, the SMTP Transport found in Zend Framework has proven to be very reliable, and it is easy to implement.

This article presents an example written with Zend Framework 1, and another example written with Zend Framework 2.

Environment

Any version of Zend Server for IBM i, running on any supported version of IBM i.


Replace some values in the examples

In the following examples, we have used some dummy values that can be replaced with the real values for the mail to be sent.  We specified 'mail.example.com' as the mail server, '[email protected]' as the email of the person sending the email, '[email protected]' as the email of the person to receive the email, 'TestSubject' as the subject line of the email, and 'This is the text of the mail.' as the text for the email.  We suggest creating a simple test script with just these values replaced with some real values, to verify that you can send a simple email.  Then, you can visit the reference links provided to learn how to do more, like add recipients, include attachments, authentication, and so on.

Make sure you have Zend Framework installed

Before you start, please make sure you have Zend Framework installed.  In earlier versions of Zend Server, these libraries were usually installed automatically.  Starting with version 2018, you need to install them.  Please go to this article to learn how: Zend Server for IBM i - Zend Mail Transport(SMTP)


 

Framework 1 example script:

<?php
$tr = new Zend_Mail_Transport_Smtp('mail.example.com');
Zend_Mail::setDefaultTransport($tr);

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('[email protected]', 'Some Sender');
$mail->addTo('[email protected]', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();
?>

The above example assumes you have the Framework directory in your include path, which is a default for Zend Server.  If needed, please add a line to include Framework in the path:

ini_set('include_path',ini_get('include_path').':/usr/local/zendphp7/share/ZendFramework/library');

References:
Introduction - Zend_Mail (ZF 1.12)
Sending via SMTP - Zend_Mail (ZF 1.12)

Framework 2 example script:

<?php

ini_set('include_path', '/usr/local/zendphp7/share/ZendFramework2/library');

require_once 'Zend/Loader/StandardAutoloader.php';

$loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true));
$loader->register();

use Zend\Mail\Message;
use Zend\Mail\Transport\Smtp as SmtpTransport;
use Zend\Mail\Transport\SmtpOptions;

$message = new Message();
$message->addTo('[email protected]')
        ->addFrom('[email protected]')
        ->setSubject('TestSubject')
        ->setBody("This is the text of the mail.");

// Setup SMTP transport
$transport = new SmtpTransport();
$options   = new SmtpOptions(array(
    'name' => 'example.com',
    'host' => 'mail.example.com',
    'port' => 25,
));
$transport->setOptions($options);
$transport->send($message);
?> 

References:
Zend\Mail\Transport — Zend Framework 2 2.4
Zend\Mail\Transport\SmtpOptions — Zend Framework 2 2.4



  • No labels