SMTP (Simple Mail Transfer Protocol), ou em português “Protocolo de Transferência de Correio Simples”, é um protocolo de comunicação usado para o envio e recebimento de mensagens de e-mail através da internet. É através do SMTP que você envia e recebe seus e-mails diariamente.
Envio de mensagens SMTP através de formulários
O protocolo SMTP também possibilita o envio de mensagens de e-mail de forma automatizada e autenticada. Isso é comumente utilizado para notificar administradores a respeito de novas mensagens através de formulários, onde após as devidas validações, é possível (utilizando bibliotecas de terceiros, e até mesmo a própria função do PHP) fazer o envio de mensagens utilizando o protocolo SMTP.
Como fazer o envio de mensagens com SMTP?
Para cada linguagem de programação, você precisa verificar a documentação para saber como fazer o envio de mensagens via SMTP. Eu vou dar um exemplo simples de como fazer o envio com PHP. Veja o código abaixo:
<?php
// E-mails
$de = "[email protected]";
$para = "[email protected]";
// Assunto da mensagem
$assunto = "Teste de e-mail via SMTP";
// Mensagem
$mensagem = "Olá,\nEste é um teste de e-mail enviado via SMTP utilizando PHP.";
// Cabeçalho
$cabecalhos = "From: ".$de . "\r\n" . "Reply-To: ".$de;
// Envio do e-mail
if (mail($para, $assunto, $mensagem, $cabecalhos)) {
echo "E-mail enviado com sucesso!";
} else {
echo "Erro ao enviar o e-mail.";
}
?>
Nesse exemplo, estou usando a função mail() do PHP. Essa função faz o envio de e-mails diretamente da hospedagem, então para funcionar corretamente, é recomendado que você configure os serviços de SMTP corretamente.
PHPMailer
Existem algumas bibliotecas que facilitam o envio de mensagens via SMTP. Uma biblioteca muito conhecida para PHP é a biblioteca PHPMailer, com ela você consegue definir diversos parâmetros, especificando qual o host, qual e-mail, senha, autenticação, remetente, e quais e-mails vão receber a mensagem, e além de tudo, você consegue fazer o envio de forma autenticada. Realmente é uma ótima biblioteca para quem trabalha com PHP.
Curiosidade: o próprio WordPress utiliza essa biblioteca para fazer o envio das mensagens do site.
Exemplo de envio com PHPMailer
Veja um exemplo de como fazer o envio de uma mensagem utilizando a biblioteca PHPMailer:
<?php
try {
// Configurações do envio
$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Habilita o debug (para testes)
$mail->isSMTP(); // Envia usando SMTP
$mail->Host = 'smtp.example.com'; // Servidor que vai fazer o envio (se você tiver um serviço de e-mail, consulte ele para conseguir essa informação)
$mail->SMTPAuth = true; // Habilita a autenticação
$mail->Username = '[email protected]'; // Username (geralmente o e-mail)
$mail->Password = 'secret'; // Password (geralmente a senha do e-mail)
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // E-amil seguro (precisa verificar com seu serviço de e-mail)
$mail->Port = 465; // Porta para conectar, geralmente 587 se for TLS e 465 se for SSL (verifique as configurações com sua hospedagem, cada uma tem uma configuração)
// Quem vai enviar e receber
$mail->setFrom('[email protected]', 'Rafael'); // E-mail e nome de quem está enviando
$mail->addAddress('[email protected]', 'Joe User'); // E-mail de quem vai receber e nome (pode duplicar essa linha quantas vezes quiser e adicionar mais e-mails)
$mail->addAddress('[email protected]'); // O nome é opcional, obrigatório mesmo é só o e-mail
$mail->addReplyTo('[email protected]', 'Information'); // Quando o usuário clicar em responder, qual e-mail deve aparecer
$mail->addCC('[email protected]'); // E-mail de quem vai receber como "cópia" (pode ser duplicado várias vezes também)
$mail->addBCC('[email protected]'); // E-mail de quem vai receber como "cópia oculta" (pode ser duplicado várias vezes também)
// Anexos
$mail->addAttachment('/var/tmp/file.tar.gz'); // Adiciona um anexo (pegue o o caminho da variável $_FILES do PHP)
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Adiciona um anexo, e como segundo parametro, pode informar o nome dele (pode duplicar quantas vezes quiser para adicionar mais, fique atento ao tamanho dos arquivos, e-mails tem limite de tamanho)
// Conteúdo
$mail->isHTML(true); // Define que vai usar HTML no conteúdo (se não definir, as tags HTML não serão convertidas)
$mail->Subject = 'Here is the subject'; // Assunto da mensagem
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; // Conteúdo da mensagem
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; // Conteúdo alternativo, caso não suporte HTML (dificilmente utilizado)
// Envia o e-mail com tudo que foi definido nas linhas acima
$mail->send();
// Se chegou até aqui, quer dizer que foi enviado
echo 'Message has been sent';
} catch (Exception $e) {
// Caso não for enviado por qualquer motivo, cai nessa linha, e você consegue verificar o retorno para saber o que houve e porque não enviou
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Como você pode ver, com essa biblioteca é muito mais fácil fazer o envio. E você ainda pode definir vários parâmetros diretamente no código, sem a necessidade de fazer essas configurações no servidor.