Enviar e-mail usando Mailjet (alternativa ao servidor SMTP do Gmail) em PHP
Os proprietários do site precisam enviar e-mails regularmente aos nossos usuários. Se você estiver usando a função mail() do PHP para enviar e-mails, logo perceberá que seus e-mails estão terminando com spam e não na caixa de entrada do usuário. Como resultado, a maioria dos usuários não está percebendo seus e-mails importantes. Para resolver esse problema, você deve usar servidores SMTP para enviar seus e-mails.
O servidor SMTP do Gmail é uma escolha bastante popular entre os desenvolvedores. Mas existem 2 problemas ao usar este serviço do Google. Primeiro, você não pode definir o endereço ‘de’ ao enviar o e-mail. O Gmail define seu endereço de e-mail (id de e-mail do Google) como o endereço do remetente. Em segundo lugar, você precisa ativar a configuração ‘permitir aplicativos menos seguros’, que não é recomendada pelo Google.
Para evitar essas limitações, encontrei uma solução alternativa para o servidor SMTP do Gmail, que é o Mailjet. Mailjet é um serviço de entrega de e-mail para equipes de marketing e desenvolvedores. Podemos enviar e-mails facilmente usando Mailjet em PHP. Eles fornecem sua própria API de e-mail para enviar e-mails. Você também pode usar o serviço SMTP.
Começando
O Mailjet oferece uma cota de 6.000 emails gratuitos por mês (200 emails por dia). Para pequenas empresas, essa cota gratuita é suficiente. Se sua empresa precisa de mais e-mails, verifique a página de preços.
Durante o processo de inscrição, você deverá escolher o método de envio. Neste tutorial, discutimos a API de email e a retransmissão SMTP, portanto, por enquanto, escolha a opção de API.
Siga as próximas etapas. Na tela abaixo, clique no botão ‘Começar’ na seção de desenvolvedor.
Para obter suas chaves de API, vá para ‘Configurações da conta’. Na próxima página, na seção API REST, clique em ‘Chave de API mestre e gerenciamento de chave de API de sub’. Copie a chave API e a chave secreta que são necessárias nas próximas etapas.
O Mailjet nos permite definir o endereço do remetente. Em ‘Remetentes e Domínios’, clique em ‘Adicionar um domínio ou endereços de remetente’ e, na página seguinte, adicione um endereço de remetente.
Se você estiver definindo um endereço diferente do e-mail da sua conta, receberá um e-mail para verificação.
Enviar e-mail usando Mailjet via cURL em PHP
Estamos prontos com nossas chaves API e prontos para enviar nosso email usando Mailjet e cURL em PHP. Certifique-se de que o cURL esteja habilitado em seu servidor, caso contrário, o código a seguir não funcionará conforme o esperado. Substitua os marcadores pelos valores reais antes de executar o código a seguir.
<?php
$body = [
'Messages' => [
[
'From' => [
'Email' => "SENDER_EMAIL_ADDRESS",
'Name' => "SENDER_NAME"
],
'To' => [
[
'Email' => "RECIPIENT_EMAIL_ADDRESS",
'Name' => "RECIPIENT_NAME"
]
],
'Subject' => "Greetings from Mailjet.",
'HTMLPart' => "<h3>Dear User, welcome to Mailjet!</h3><br />May the delivery force be with you!"
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.mailjet.com/v3.1/send");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json')
);
curl_setopt($ch, CURLOPT_USERPWD, "API_KEY:SECRET_KEY");
$server_output = curl_exec($ch);
curl_close ($ch);
$response = json_decode($server_output);
if ($response->Messages[0]->Status == 'success') {
echo "Email sent successfully.";
}
Enviar e-mail usando Mailjet via Guzzle em PHP
Você pode usar o Guzzle para enviar seus e-mails. Provavelmente, seu aplicativo está sendo executado em uma estrutura ou CMS onde você está usando um Composer para gerenciar bibliotecas. Nesse caso, Guzzle seria uma opção melhor do que cURL.
Nestes cenários, instale a biblioteca Guzzle executando o comando:
composer require guzzlehttp/guzzle
Depois de instalar a biblioteca, usando o código abaixo você pode enviar e-mails usando Guzzle em PHP.
<?php
require_once "vendor/autoload.php";
use GuzzleHttpClient;
$body = [
'Messages' => [
[
'From' => [
'Email' => "SENDER_EMAIL_ADDRESS",
'Name' => "SENDER_NAME"
],
'To' => [
[
'Email' => "RECIPIENT_EMAIL_ADDRESS",
'Name' => "RECIPIENT_NAME"
]
],
'Subject' => "Greetings from Mailjet.",
'HTMLPart' => "<h3>Dear User, welcome to Mailjet!</h3><br />May the delivery force be with you!"
]
]
];
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'https://api.mailjet.com/v3.1/',
]);
$response = $client->request('POST', 'send', [
'json' => $body,
'auth' => ['API_KEY', 'SECRET_KEY']
]);
if($response->getStatusCode() == 200) {
$body = $response->getBody();
$response = json_decode($body);
if ($response->Messages[0]->Status == 'success') {
echo "Email sent successfully.";
}
}
Enviar e-mail usando o servidor SMTP do Mailjet e o PHPMailer
Nas etapas acima, discutimos o uso da API de email Mailjet para enviar emails. Nesta seção, mostrarei como usar o servidor SMTP do Mailjet para enviar um e-mail aos usuários.
No painel, clique em ‘Configurar meu SMTP’. Na próxima página, você obterá todas as credenciais SMTP.
Vamos ver como usar credenciais SMTP em PHP e enviar um e-mail. Primeiramente, instale a biblioteca PHPMailer em seu projeto executando o comando abaixo:
composer require phpmailer/phpmailer
Em seguida, escreva o código abaixo em seu arquivo PHP, que enviará um e-mail por meio de suas credenciais SMTP.
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require_once "vendor/autoload.php";
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'MAILJET_SMTP_SERVER'; // host
$mail->SMTPAuth = true;
$mail->Username = 'API_KEY'; //username
$mail->Password = 'SECRET_KEY'; //password
$mail->SMTPSecure = 'tls';
$mail->Port = 587; //smtp port
$mail->setFrom('SENDER_EMAIL_ADDRESS', 'SENDER_NAME');
$mail->addAddress('RECIPIENT_EMAIL_ADDRESS', 'RECIPIENT_NAME');
$mail->isHTML(true);
$mail->Subject = 'Email Subject';
$mail->Body = '<b>Email Body</b>';
$mail->send();
echo 'Email has been sent.';
} catch (Exception $e) {
echo 'Email could not be sent. Mailer Error: '. $mail->ErrorInfo;
}
Enviar e-mail usando o servidor SMTP do Mailjet e o Swift Mailer
Como o PHPMailer, o Swift Mailer também é uma biblioteca popular útil para enviar um e-mail usando o servidor SMTP. Você deve ter o PHP versão 7.0 ou superior para enviar e-mails usando a biblioteca Swift Mailer. Instale a biblioteca Swift Mailer usando o comando:
composer require swiftmailer/swiftmailer
Após a instalação da biblioteca, usando as credenciais do servidor SMTP do Mailjet, você pode enviar o e-mail por meio do código abaixo.
<?php
require_once 'vendor/autoload.php';
try {
// Create the Transport
$transport = (new Swift_SmtpTransport('MAILJET_SMTP_SERVER', 587, 'tls'))
->setUsername('API_KET')
->setPassword('SECRET_KEY')
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$body = '<b>Email Body</b>';
$message = (new Swift_Message('Email Subject'))
->setFrom(['SENDER_EMAIL_ADDRESS' => 'SENDER_NAME'])
->setTo(['RECIPIENT_EMAIL_ADDRESS'])
->setBody($body)
->setContentType('text/html')
;
// Send the message
$mailer->send($message);
echo 'Email has been sent.';
} catch(Exception $e) {
echo $e->getMessage();
}
Substitua os marcadores pelos valores reais e teste o código. O destinatário deve ter recebido o e-mail.
Conclusão
Neste tutorial, estudamos a API de email do Mailjet e o relay SMTP. Discutimos o envio de um e-mail via API de e-mail Mailjet usando cURL e Guzzle. O Mailjet fornece um servidor SMTP, portanto, escrevemos um código que usa o servidor SMTP do Mailjet e envia um e-mail aos usuários. Portanto, com base nessas 3 opções, os usuários podem escolher qualquer uma das opções, dependendo dos requisitos do projeto.
Artigos relacionados
- Enviar e-mail usando o servidor SMTP do Gmail a partir de script PHP
- Como enviar e-mail usando o servidor SMTP do Gmail e a biblioteca Swift Mailer
- Enviando e-mail via servidor SMTP do Gmail no Laravel