PHP

Mandando um e-mail pelo PHP utilizando a função mail()

Como enviar um e-mail utilização a função mail() do PHP.

Para que a função nativa mail() funcione o PHP tem que estar devidamente configurado com um servidor SMTP.

Na maioria das hospedagens essa configuração já foi feita.

Entendendo a função mail().

bool mail ( string $destinatario, string $assunto, string $mensagem[, string $cabecalho_adicional[, string $parametros_adicional]] )

Ela retorna “true” quando o envio do e-mail foi realizado com sucesso ou “false” no caso de ocorrer algum erro, recebendo 5 parâmetros, sendo os dois últimos opcionais.

1° – (string) $destinatario “to”.

E-mail de quem deverá receber a mensagem.

2° – (string) $assunto “subject”.

Assunto “titulo” do e-mail.

3° – (string) $mensagem “message”.

Mensagem “corpo” do e-mail, podendo ser texto simples ou HTML.

4° – (string) (opcional) $cabecalho_adicional “additional_headers”.

Cabeçalho adicional do e-mail

5° – (string) (opcional) $parametros_adicional “additional_parameters”.

Parâmetros adicionais

Enviando e-mail com mensagem em HTML

Estando configurado a utilização da função mail() se torna muito simples.

$html  = $_POST['html'];
$email = $_POST['email'];
$title = $_POST['title'];

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

mail($email ,$title, $html,$headers);

Repare que no exemplo acima eu utilizo o parâmetro adicional “headers” para definir o tipo do corpo da mensagem como “HTML”.

Configurando o “From, CC, Bcc”

Definindo o “from”:

$headers .= 'From: Nome <teste@teste.com.br>'. "\r\n";

Mandando o e-mail com múltiplas cópias:

$headers .= 'Cc: teste1@teste.com.br, teste2@teste.com.br' . "\r\n";

Mandando como cópia oculta:

$headers .= 'Bcc: teste1@teste.com.br, teste2@teste.com.br' . "\r\n";

Enviando o e-mail com um arquivo em anexo

Os comentários sobre os pontos mais importantes estão no próprio código.

Definindo os parâmetros iniciais:

/* Altere para seus dados */$destinatario = "teste@teste.com.br";

$email_remetente = "teste@teste.com.br";
$nome_remetente = "Teste";

$assunto = "Assunto Teste - Envio com Anexo";
$mensagem = "Email de teste com anexo";

/* Caminho e nome do arquivo que será enviado */$caminho_do_arquivo = "uploads/anexos/";
$nome_do_arquivo = "teste.doc";

Preparando o arquivo:

$arquivo = $caminho_do_arquivo . $nome_do_arquivo;
$conteudo = file_get_contents( $arquivo);

/* convertemos na base64 para poder anexar no e-mail */$conteudo_base64 = chunk_split(base64_encode($conteudo));

$uid = md5(uniqid(time()));

/* Pegamos o nome do arquivo para utilizar no header */$name = basename($arquivo);

Configurando cabeçalho:

/* Configuramos o cabeçalho do e-mail*/$header = "From: ".$nome_remetente." <".$email_remetente.">\r\n";
$header .= "Reply-To: ".$replyto."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

Adicionando o anexo ao corpo do e-mail:

/* Temos que fazer algumas configurações adicionais no corpo do e-mail para poder anexar o arquivo */$corpo_email = "--".$uid."\r\n";
$corpo_email .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$corpo_email .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$corpo_email .= $mensagem."\r\n\r\n";
$corpo_email .= "--".$uid."\r\n";
$corpo_email .= "Content-Type: application/octet-stream; name=\"".$nome_do_arquivo."\"\r\n";
$corpo_email .= "Content-Transfer-Encoding: base64\r\n";
$corpo_email .= "Content-Disposition: attachment; filename=\"".$nome_do_arquivo."\"\r\n\r\n";
$corpo_email .= $conteudo_base64."\r\n\r\n";
$corpo_email .= "--".$uid."--";

Enviando a mensagem:

if (mail($destinatario, $assunto, $corpo_email, $header)) {
    return true;
} else {
    return false;
}

 

 

Resumo
Nome do Artigo
Mandando e-mails pelo PHP utilizando a função mail()
Descrição
Mandando e-mails pelo PHP com a função mail(), com diversos parâmetros no header, como a copia, cópia oculta "bcc" e arquivos em anexo na base64.
Autor
Editor
Roger Mauricio Takemiya
Logo do Editor

Post Recentes

Cron do Magento 2 não roda: status missed e pending no cron_schedule

Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…

12 horas atrás

Gerar slug de URL em PHP: acento, espaço e símbolo fora do endereço

Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.

1 dia atrás

Log de consentimento LGPD: a tabela MySQL que guarda a prova do aceite

O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…

2 dias atrás

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

3 dias atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

3 dias atrás

Variação não está disponível no WooCommerce: limpar transients e lookup

Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…

4 dias atrás