PHP: Enviar email com Mailtrap

No último artigo, falei sobre a Mailtrap, e como se torna fácil testarmos o envio de email nos nossos projectos em desenvolvimento. Com este artigo, vou apresentar uma forma se configurar o nosso Mailtrap com um pequeno código de PHP.

PHP Mailer

Para este exercício, vamos usar o PHP Mailer. Para isso, vamos instalar o mesmo, usando o composer.
Basta criar uma pasta, e usar a linha de comandos dentro da mesma, e executar os seguintes comandos:

1 – Vamos criar um ficheiro composer.json

Composer init

Irá surgir algumas operações após correr o comando.

Na imagem abaixo, está a configuração que eu fiz para este exemplo em concreto:

Desta forma, temos então o PHPMailer pronto no nosso projecto para ser usado.

2 – Configurar o PHP Mailer com Mailtrap

Agora, podemos começar a configurar o nosso projecto, para enviar/receber emails, usando o Mailtrap e o PHP Mailer. No caso, basta usarmos a Class do PHP Mailer no nosso projecto, tal como já mostrei nos artigos da serie PHP: Programação Orientada a Objectos.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

Temos também, que usar o required do autoload:

require 'vendor/autoload.php';

Agora, vamos instanciar o nosso PHP Mailer, para mais tarde adicionar a configuração, para então testarmos o envio/recepção dos emails:

$mail = new PHPMailer(true);

O PHP Mailer e instanciado com o valor “True”, para que assim permita usar excepções. Após isto, podemos então adicionar toda a configuração. Para isso, vamos usar um Try/Catch da seguinte forma:

try {
    //Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;
    $mail->isSMTP();
    $mail->Host       = 'smtp.mailtrap.io';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'YOUR_USERNAME';
    $mail->Password   = 'YOUR_PASSWORD';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = YOUR_PORT;

    //Recipients
    $mail->setFrom('testuser@email.com', 'Joe Who');
    $mail->addAddress('otheruser@email.com', 'Joe User');

    // Attachments
    $mail->addAttachment('/path/to/file.jpg', 'file_name.jpg');

    // Content
    $mail->isHTML(true);
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Com esta simples configuração, ao aceder ao ficheiro index.php do projecto, que irá executar o código, iremos ver uma lista de operações que estão a ser realizadas, tal como as validações.

Após o código ser executado, podemos ver na última linha se o email foi enviado com sucesso ou não.

De seguinda, vamos a nossa conta do Mailtrap, na inbox que criamos, e vamos poder então ver que os emails estão a cair nessa caixa de correio.

Como podemos ver na imagem, recebemos o nosso email na inbox da Mailtrap, sendo que o nosso teste foi realizado com sucesso.

Para saberem como têm de configurar a vossa conta no código, podem ver o artigo que escrevi sobre o Mailtrap.

Este código vai ficar disponível na minha conta de Github, para conseguirem testar na vossa máquina e com a vossa conta da Mailtrap.