Zend Framework - Gestión de correo electrónico

Zend Framework proporciona un componente separado llamado zend-mailpara enviar mensajes de correo electrónico. El componente zend-mail también proporciona una opción para leer y escribir mensajes de correo electrónico con archivos adjuntos tanto en formato de texto como html. Enviar un correo electrónico en Zend es mucho más fácil y sencillo de configurar.

Repasemos los conceptos de correo electrónico, la configuración básica, la configuración avanzada como el transporte SMTP, etc., en este capítulo.

Instalar componente de correo

El componente de correo se puede instalar usando el siguiente comando de Composer.

composer require zendframework/zend-mail

Configuración básica de correo electrónico

Un correo electrónico básico consta de uno o más destinatarios, un asunto, un cuerpo y un remitente. Zend proporcionaZend\Mail\Messageclass para crear un nuevo mensaje de correo electrónico. Para enviar un correo electrónico usando elzend-mail, debe especificar al menos un destinatario y el cuerpo del mensaje.

El código parcial para crear un nuevo mensaje de correo es el siguiente:

use Zend\Mail;
$mail = new Mail\Message(); 
$mail->setSubject('Zend email sample'); 
$mail->setBody('This is content of the mail message'); 
$mail->setFrom('[email protected]', "sender-name"); 
$mail->addTo('[email protected]', "recipient-name");

Zend proporciona la clase Zend \ Mail \ Sendmail para enviar el mensaje de correo. Sendmail usa la función de correo nativo de php, mail para enviar el mensaje de correo y podemos configurar la capa de transporte usando el archivo de configuración php.

La codificación parcial usando Sendmail es la siguiente:

$transport = new Mail\Transport\Sendmail(); 
$transport->send($mail);

los zend-mail proporciona muchas capas de transporte y cada una puede requerir muchos parámetros adicionales, como nombre de usuario, contraseña, etc.

Métodos de gestión de correo electrónico

Algunos de los métodos de gestión de correo electrónico notables son los siguientes:

  • isValid - Los mensajes sin una dirección "De" no son válidos.

isValid() : bool
  • setEncoding - Establecer la codificación del mensaje.

setEncoding(string $encoding) : void
  • getEncoding - Obtener la codificación del mensaje.

getEncoding() : string
  • setHeaders - Redactar encabezados.

setHeaders(Zend\Mail\Headers $headers) : void
  • getHeaders - Acceder a la colección de encabezados.

getHeaders() : Zend\Mail\Headers
  • setFrom- Establecer (sobrescribir) Desde direcciones. Contiene pares clave / valor donde la clave es el nombre legible por humanos y el valor es la dirección de correo electrónico.

setFrom( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressList, 
      string|null $name 
) : void
  • addFrom - Agregue una dirección 'De'.

addFrom( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressOrList, 
      string|null $name 
) : void
  • getFrom - Recuperar lista de remitentes 'De'.

getFrom() : AddressList 
setTo - Overwrite the address list in the To recipients. 
setTo( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressList, 
      null|string $name 
) : void
  • setSubject - Establecer el valor del encabezado del asunto del mensaje.

setSubject(string $subject) :void
  • setBody - Establecer el cuerpo del mensaje.

setBody(null|string|Zend\Mime\Message|object $body) : void

Capa de transporte SMTP

los zend-mail proporciona opciones para enviar un correo electrónico utilizando el servidor SMTP a través del Zend\Mail\Transport\Smtpclass. Es comoSendmail excepto que tiene algunas opciones adicionales para configurar el host SMTP, puerto, nombre de usuario, contraseña, etc.

El código parcial es el siguiente:

use Zend\Mail\Transport\Smtp as SmtpTransport; 
use Zend\Mail\Transport\SmtpOptions;  
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' =>'smtp.gmail.com', 
   'port' => 465, 
]); 
$transport->setOptions($options);

Aquí,

  • name - Nombre del host SMTP.

  • host - Nombre de host remoto o dirección IP.

  • port - Puerto en el que escucha el host remoto.

Concepto de correo - Ejemplo

Sigamos los siguientes puntos para escribir una aplicación de consola PHP simple para entender el concepto de correo.

  • Cree una carpeta "mailapp".

  • Instalar en pc zend-mail utilizando la herramienta de redacción.

  • Crea un archivo php Mail.php dentro de la carpeta "mailapp".

  • Crea el mensaje usando el Zend\Mail\Message.

$message = new Message(); 
$message->addTo('[email protected]'); 
$message->addFrom('[email protected]'); 
$message->setSubject('Hello!'); 
$message->setBody("My first Zend-mail application!");
  • Cree la capa de transporte SMTP y agregue la configuración necesaria.

// Setup SMTP transport using LOGIN authentication 
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' => 'smtp.gmail.com', // or any SMTP server 
   'port' => 465, // port on which the SMTP server is listening 
   'connection_class' => 'login', 
   'connection_config' => [ 
      username' => '<your username>', 'password' => '<your password>', 
      'ssl' => 'ssl'], 
]); 
$transport->setOptions($options);
  • Envíe el correo electrónico utilizando el send método.

$transport->send($message);

La lista completa, Mail.php es la siguiente:

<?php  
require __DIR__ . '/vendor/autoload.php';  

use Zend\Mail\Message; 
use Zend\Mail\Transport\Smtp as SmtpTransport; 
use Zend\Mail\Transport\SmtpOptions;  
  
$message = new Message(); 
$message->addTo('[email protected]'); 
$message->addFrom('[email protected]'); 
$message->setSubject('Hello!'); 
$message->setBody("My first Zend-mail application!");  
  
// Setup SMTP transport using LOGIN authentication 
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' => 'smtp.gmail.com', // or any SMTP server 
   'port' => 465, // port on which the SMTP server is listening 
   'connection_class' => 'login', 
   'connection_config' => [ 
      'username' => '<your username>', 'password' => '<your password>', 
      'ssl' => 'ssl'], 
]); 
$transport->setOptions($options); 
$transport->send($message);

Ahora, ejecute la aplicación en el símbolo del sistema. php Mail.php. Esto enviará el correo según lo configurado en la aplicación.