Como enviar e-mail usando a função PHP mail()

⚡ Resumo Inteligente

A função `mail` do PHP é uma função integrada que envia e-mails diretamente de um script PHP usando as configurações SMTP do servidor. Este guia aborda a sintaxe e os parâmetros da função `mail()`, a configuração do SMTP no arquivo `php.ini`, a sanitização da entrada do usuário com a variável `filter_var`, o envio de e-mails seguros e o uso do PHP.Mailer para entrega confiável.

  • 📧 O que mail() faz: A função mail() envia um e-mail a partir de um script, recebendo o destinatário, o assunto, a mensagem e cabeçalhos opcionais.
  • 📨 Transporte SMTP: O PHP mail depende do SMTP, cujo host, porta e autenticação são definidos no arquivo de configuração php.ini.
  • 📋 CC e BCC: Os cabeçalhos opcionais adicionam destinatários em cópia carbono e em cópia carbono oculta, com o campo CCO oculto para os demais destinatários.
  • 🛡️ Higienizar entrada: O filtro `filter_var` com `FITER_SANITIZE_EMAIL` e `FITER_VALIDATE_EMAIL` bloqueia a injeção de cabeçalho a partir de campos de formulário de contato.
  • 🔒 Garanta o Mail: Criptografar a conexão com SSL ou TLS protege o conteúdo das mensagens contra leitura durante a transmissão.
  • 🧰 Use PHPMailer: PHPMailO er adiciona autenticação SMTP, anexos e e-mail HTML, tornando-o mais confiável do que o mail() puro.
  • 🤖 Assistência de IA: Ferramentas de IA podem configurar o PHP.Mailer com SMTP e sugerir correções para evitar que seus e-mails sejam classificados como spam.

PHP Mail

O que é correio PHP?

O comando `php mail` é uma função nativa do PHP usada para enviar e-mails a partir de scripts PHP.

A função mail aceita os seguintes parâmetros:

  • E-mail
  • Assunto
  • Mensagem
  • Endereços de e-mail CC ou BCC

Por que e quando usar o PHP mail

A função de e-mail é útil em muitas situações:

  • É uma forma econômica de notificar os usuários sobre eventos importantes.
  • Permita que os usuários entrem em contato com você por e-mail, fornecendo um formulário de contato no site que envia por e-mail o conteúdo fornecido.
  • Os desenvolvedores podem usá-lo para receber erros do sistema por e-mail.
  • Você pode usá-lo para enviar e-mail aos assinantes do boletim informativo.
  • Você pode usá-lo para enviar links de redefinição de senha para usuários que esqueceram suas senhas.
  • Você pode usá-lo para enviar links de ativação e confirmação por e-mail. Isso é útil ao cadastrar usuários e verificar seus endereços de e-mail.

Enviando e-mail usando PHP

A função mail do PHP possui a seguinte sintaxe básica.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

AQUI,

  • “$to_email_address” é o endereço de e-mail do destinatário do e-mail
  • “$subject” é o assunto do e-mail
  • “$message” é a mensagem a ser enviada.
  • “[$headers]” é opcional; pode ser usado para incluir informações como CC e BCC.
    • CC é a sigla para "cópia carbono". É usada quando você deseja enviar uma cópia para uma pessoa interessada, ou seja, um e-mail de reclamação enviado para uma empresa também pode ser enviado com cópia (CC) para o setor de reclamações.
    • BCC é a sigla para "cópia oculta". É semelhante ao CC, mas os endereços de e-mail incluídos no campo BCC não são exibidos aos outros destinatários.

simples Mail Transmission Protocolo (SMTP)

O PHP mail usa o Simple Mail Transmission Protocolo (SMTP) para enviar e-mail.

Em um servidor hospedado, as configurações SMTP já estariam definidas.

As configurações de e-mail SMTP podem ser configuradas a partir do arquivo “php.ini” na pasta de instalação do PHP.

Para configurar as definições de SMTP no seu localhost, assumindo que você está usando o XAMPP em WindowsLocalize o arquivo “php.ini” no diretório “C:\xampp\php”.

  • Abra o arquivo usando o Bloco de Notas ou qualquer outro editor de texto. Usaremos o Bloco de Notas neste exemplo. Clique no menu Editar.

simples Mail Transmission Protocolo

  • Clique no menu Localizar…

simples Mail Transmission Protocolo

  • A caixa de diálogo Localizar será exibida.

simples Mail Transmission Protocolo

  • Clique no botão Localizar Próximo

simples Mail Transmission Protocolo

Localize as entradas em [função de e-mail]. As linhas padrão geralmente têm esta aparência:

  • ; SMTP = localhost
  • ; porta_smtp = 25

Remova os pontos e vírgulas antes de SMTP e smtp_port e defina SMTP para o seu endereço. Servidor SMTP e a porta para sua porta SMTP. Suas configurações devem ser semelhantes a estas:

  • SMTP = smtp.exemplo.com
  • porta_smtp = 25

Nota: as configurações SMTP podem ser obtidas com seu provedor de hospedagem web. Se o servidor exigir autenticação, adicione as seguintes linhas:

  • auth_username = example_username@example.com
  • auth_password = exemplo_senha

Salve as novas alterações e reinicie o programa. apache servidor.

PHP Mail Exemplo

Vejamos agora um exemplo que envia um e-mail simples.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

Saída:

simples Mail Transmission Protocolo

Observação: o exemplo acima considera apenas os 4 parâmetros obrigatórios. Você deve substituir o endereço de e-mail fictício acima por um endereço de e-mail real.

Limpeza de entradas de usuário de e-mail

O exemplo acima usa valores codificados no código-fonte para o endereço de e-mail e outros detalhes para simplificar.

Vamos supor que você precise criar um formulário de contato onde os usuários preencham os dados e depois o enviem.

  • Os usuários podem, acidentalmente ou intencionalmente, inserir código nos cabeçalhos, o que pode resultar no envio de e-mails de spam.
  • Para proteger seu sistema contra tais ataques, você pode criar uma função personalizada que limpa e valida os valores antes do envio do email.

Vamos criar uma função personalizada que valide e higienize o endereço de e-mail usando a função integrada `filter_var`. A função `filter_var` é usada para higienizar e validar dados de entrada do usuário.

Possui a seguinte sintaxe básica.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

AQUI,

  • “filter_var(…)” é a função de validação e higienização
  • “$field” é o valor do campo a ser filtrado.
  • “SANITIZATION_TYPE” é o tipo de sanitização a ser realizada no campo, como por exemplo:
    • FILTRO_VALIDAR_EMAIL – retorna verdadeiro para endereços de e-mail válidos e falso para endereços de e-mail inválidos.
    • FILTRO_HIGIENIZAR_EMAIL – Remove caracteres inválidos de endereços de e-mail, de forma que um endereço com caracteres estranhos seja reduzido a info@dominio.com.
    • FILTRAR_SANITIZAR_URL – remove caracteres ilegais de URLs, deixando um endereço limpo como https://www.example.com.
    • FILTER_SANITIZE_STRING – remove tags de valores de string, então "am bold" se torna "am bold". Observe que este filtro está obsoleto no PHP 8.1; use htmlspecialchars() em vez disso.

O código abaixo utiliza uma função personalizada para enviar e-mails seguros.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

Saída:

Limpeza de entradas de usuário de e-mail

Garanta o Mail

Os e-mails podem ser interceptados durante a transmissão por destinatários não intencionais.

Isso pode expor o conteúdo do e-mail a destinatários não intencionais.

O e-mail seguro resolve esse problema. transmitEnvio de e-mails por meio de uma conexão criptografada usando SSL ou TLS, por exemplo, SMTP sobre SSL na porta 465 ou STARTTLS na porta 587.

A criptografia embaralha a mensagem antes de enviá-la, de forma que apenas o servidor de e-mail do destinatário pretendido possa lê-la.

PHPMailer: Uma alternativa melhor ao mail()

Para aplicações reais, a maioria dos desenvolvedores usa o PHP.MailUse a biblioteca er em vez da função mail() original. PHPMailO sistema autentica-se com um servidor SMTP externo, o que melhora bastante a capacidade de entrega, e simplifica o envio de anexos e e-mails em HTML.

Instale-o com o Composer e, em seguida, envie e-mails por meio de uma conexão SMTP autenticada e criptografada, conforme mostrado abaixo.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

Comparado com mail(), PHPMailO er oferece autenticação SMTP, criptografia integrada, suporte a anexos e um tratamento de erros mais claro, razão pela qual é a opção recomendada para e-mails de produção.

Perguntas Frequentes

A causa mais comum é a ausência de um servidor de e-mail configurado no localhost. Defina os valores SMTP corretos no arquivo php.ini ou utilize o PHP.MailVerifique também o log de erros do servidor e sua pasta de spam.

Adicione cabeçalhos que definam MIME-Version como 1.0 e Content-Type como text/html e, em seguida, insira a marcação HTML no corpo da mensagem. PHPMailO er lida com isso automaticamente quando você define sua opção isHTML(true).

A função FILTER_SANITIZE_STRING está obsoleta desde o PHP 8.1. Use htmlspecialchars() para escapar a saída para exibição ou um validador específico, como FILTER_VALIDATE_EMAIL, dependendo se você está limpando ou verificando o valor.

Sim. Forneça à IA o host SMTP, a porta e o tipo de segurança, e ela poderá gerar o código PHP completo.MailConfiguração com autenticação, remetente, destinatários e tratamento de erros. Armazene as credenciais em variáveis ​​de ambiente, não no código.

Sim. A IA pode aconselhar sobre registros SPF, DKIM e DMARC, usar um remetente SMTP autenticado, evitar palavras-chave que acionam spam e definir um endereço de remetente válido, além de ajudar você a testar a capacidade de entrega.

Resuma esta postagem com: