Ir para conteúdo
Fórum Script Brasil
  • 0

Enviando E-mails Com Php


Beraldo

Pergunta

Saudações, pessoal.

Este artigo se destina a iniciantes em PHP. Quem já conhece bem a linguagem não verá nada de inédito aqui. :)

Uma das dúvidas mais comuns pelos fóruns é o envio de E-Mails usando PHP. É um tema simples, mas que muitos têm dúvidas. Por isso resolvi escrever este tutorial bem básico abordando esse assunto.

Coloquei os principais tipos de campos de formulário, a fim de sanar (ou diminuir) dúvidas concernentes a isso.

Começando pelo formulário HTML, que dispensa explicações:

formulario.html (O formulário não precisa ter extensão .php)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css" media="screen">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
margin: 15px;
background: #666;
}
fieldset{
width: 430px;
padding: 10px;
background: #ccc;
}
input{
margin-top: 5px;
margin-bottom: 5px;
}
-->
</style>
<title>Formulário de Contato</title>
</head>
<body>
<form action="enviar.php" method="post">
<fieldset>
<label for="nome">Nome: </label>
<input type="text" name="nome" id="nome" /><br /><br />
Sexo: <input type="radio" name="sexo" id="sexo_f" value="Feminino" />
<label for="sexo_f">Feminino</label>  
<input type="radio" name="sexo" id="sexo_m" value="Masculino" />
<label for="sexo_m">Masculino</label>   
<input type="radio" name="sexo" id="sexo_na" value="Indeciso(a)" />
<label for="sexo_na">Ainda não me decidi</label><br /><br />

<p>Estilos de música de que gosta:</p>

<input type="checkbox" name="musica[]" id="musica_r" value="Rock" />
<label for="musica_r">Rock</label><br />
<input type="checkbox" name="musica[]" id="musica_e" value="Erudita" />
<label for="musica_e">Música Erudita</label><br />
<input type="checkbox" name="musica[]" id="musica_j" value="Jazz" />
<label for="musica_j">Jazz</label><br /><br />

<label for="assunto">Assunto: </label>
<select name="assunto" id="assunto">
<optgroup label="Assunto">
<option value="duvidas">Dúvidas</option>
<option value="sugestoes">Sugestões</option>
</optgroup>
</select>
<br /><br />

<p><label for="mensagem">Mensagem:</label></p>
<textarea rows="5" cols="30" name="mensagem" id="mensagem"></textarea><br /><br />
<input type="submit" value="Enviar" />
</fieldset>
</form>
</body>
</html>
*Inseri "[]" nos nomes dos checkboxes para que o script PHP interprete a variável como uma matriz (array) Agora vamos ao que interessa: o script PHP. :) Primeiro pegamos as variáveis vinda do formulário:
$nome = $_POST['nome'];
$sexo = $_POST['sexo'];
$musica = $_POST['musica'];
$assunto = $_POST['assunto'];
$mensagem = nl2br($_POST['mensagem']);
Notem que usei a função nl2br() para transformar as quebras de linha do textarea em quebras de linha HTML. Vale lembrar que o nome da vaariável não precisa ser necessariamente igual ao nome do atributo name do campo do formulário. Agora vamos transformar a array $musica em uma string comum usando a função foreach():
foreach ($musica as $x)
$estilos .= $x."<br />";
* Como só há um comando no loop, não há necessidade de se usar chaves ({ e }). Agora vamos definir o e-mail destinatário, a mensagem e o cabeçalho do E-Mail.
$para = "seu_email@dominio.com";// e-mail que receberá a mensagem
$mensagem = "
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<title>Contato</title>
</head>
<body>
Nome: <strong>$nome</strong><br />
Sexo: <strong>$sexo</strong><br />
Estilos Musicais:<br /><strong>$estilos</strong><br/><br />
Mensagem: <br /><strong>$mensagem</strong>
</body></html>
";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=iso-8859-15\r\n";
$header .= "From: $nome <$email>";
O header From: faz aparecer o nome/e-mail do visitante no campo "De" do e-mail. Não peguei o e-mail do usuário nesse exemplo; esse "trabalho" fica para vocês! ;) Os outros dois headers fazem o servidor de e-mail reconhecer que a mensagem está em HTML. Finalmente a parte que envia o e-mail:
if (mail ($para, $assunto, $mensagem, $header))
  echo "E-Mail enviado!";
    else
      echo "Erro ao enviar o E-Mail";
O código PHP integralmente:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css" media="screen">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
margin: 15px;
background: #666;
}
</style>
<title>Contato</title>
</head>
<body>
<?php
$nome = $_POST['nome'];
$sexo = $_POST['sexo'];
$musica = $_POST['musica'];
$assunto = $_POST['assunto'];
$mensagem = nl2br($_POST['mensagem']);

foreach ($musica as $x)
$estilos .= $x."<br />";

$para = "seu_email@dominio.com";// e-mail que receberá a mensagem
$mensagem = "
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<title>Contato</title>
</head>
<body>
Nome: <strong>$nome</strong><br />
Sexo: <strong>$sexo</strong><br />
Estilos Musicais:<br /><strong>$estilos</strong><br/><br />
Mensagem: <br /><strong>$mensagem</strong>
</body></html>
";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=iso-8859-15\r\n";
$header .= "From: $nome <$email>";

if (mail ($para, $assunto, $mensagem, $header))
  echo "E-Mail enviado!";
    else
      echo "Erro ao enviar o E-Mail";
?>
</body>
</html>

Espero que este artigo tenha ajudado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • Respostas 63
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0

aí Beraldo

Copiei e colei na integra pra testar, mas deu esse erro...

Warning: Invalid argument supplied for foreach() in C:\Projetos\enviar_formulario.php on line 17

Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Projetos\enviar_formulario.php on line 42

Erro ao enviar o E-Mail

Estou tentando entender mas não sei o que é... já li algumas coisas sobre PHP.INI mas não sei o que é... Tentei alterar como li em alguns lugares, mas também não funcionou...

Uso o Apache no Localhost...

O que pode ser??

Abraco

Link para o comentário
Compartilhar em outros sites

  • 0

aí Beraldo

Copiei e colei na integra pra testar, mas deu esse erro...

Warning: Invalid argument supplied for foreach() in C:\Projetos\enviar_formulario.php on line 17

você colocou o atributo name dos checkboxes com os colchetes ([])? Sem eles, o PHP não interpretará a variável $_POST['musica'] como uma matriz (array).

Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Projetos\enviar_formulario.php on line 42

Erro ao enviar o E-Mail

você está tentando enviar o e-mail pela sua máquina, né? Pelo Windows, você deverá ter um servidor SMTP configurado; no GNU/Linux, basta configurar o sendmail.

você pode testar o envio por meio do seu servidor, caso não tenha o Linux ou um servidor SMTP.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Cara,

Agradeço tua atencao...

Mas como falei, não tenho muita pratica, nem com os termos que se usa, então as vezes dou uma viajada...

Mas enfim... Como falei, estou usando o Apache, na minha maquina, windows e não tenho e nem sei o que é um Servidor SMTP... Li algumas coisas sobre fazer uma configuracao qualquer no tal do PHP.INI, não seria isso?? O que é esse tal Servidor SMTP?? preciso instalar alguma coisa??...

No meu C: tem...

Uma pasta APACHE

" " PHP

" " MySql

Tenho usado arquivos em PHP normais... Acesso ao banco e tal... Mas quando fui fazer esse teste para email deu erro.... já vi muitas pessoas falando desse erro, e ainda não encontrei a solucao...

Gostaria muito de tentar soluciona-la hoje...

Vou te mandar uma mensagem privada com meu MSN se você puder me ADD ficaria eternamente grato...

Abraco

Livio

Link para o comentário
Compartilhar em outros sites

  • 0

Ultimamente tenho ficado pouco tempo no fórum; menos ainda no MSN, então vamos por aqui mesmo.

SMTP: http://pt.wikipedia.org/wiki/SMTP

É um servidor para enviar e-mails.

É melhor você testar o scrtip no seu servidor mesmo, pois configurar SMTP é meio chato... :P nunca consegui. Se preciso testar envio de e-mail, faço-o através do sendmail do Linux.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Caraca eu to comecando agora a desenvolver formmail e to com trilhões de dúvidas sobre esse assunto copiei o código que você postou mais está aparecendo alguns erros segue para os sr. se puderem me ajudar fico grato....

Notice: Undefined index: nome in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 17

Notice: Undefined index: sexo in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 18

Notice: Undefined index: musica in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 19

Notice: Undefined index: assunto in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 20

Notice: Undefined index: mensagem in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 21

Warning: Invalid argument supplied for foreach() in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 23

Notice: Undefined variable: estilos in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 36

Notice: Undefined variable: email in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 42

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 44

Erro ao enviar o E-Mail

Link para o comentário
Compartilhar em outros sites

  • 0

Os erros undefined index são causados quando não existe a chave do array. Provavelmente os nomes dos campos do seu formulário HTML estão errados.

O erro na função mail() é devido ao local onde voce está testando o script. você precisa ter um serrvidor SMTP instaldo, usar o sendmail do Linux ou testar num servidor de hospedagem que tenha a função mail ativada.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Hoje tentei usar a função mail() ... tentei enviar um e-mail pra mim mesmo (From: == To:), tenho servidor SMTP, Apache 2, PHP 5.2.0 e Windows XP. Estava na net discada (como agora) e... nada. Quando cliquei o botão pra enviar o mail, ficou demorando, demoraaaando, demoraaaaaaaaaaaando pra... e nada de querer parar! Que será?

Link para o comentário
Compartilhar em outros sites

  • 0
Caraca eu to comecando agora a desenvolver formmail e to com trilhões de dúvidas sobre esse assunto copiei o código que você postou mais está aparecendo alguns erros segue para os sr. se puderem me ajudar fico grato....

Notice: Undefined index: nome in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 17

Notice: Undefined index: sexo in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 18

Notice: Undefined index: musica in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 19

Notice: Undefined index: assunto in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 20

Notice: Undefined index: mensagem in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 21

Warning: Invalid argument supplied for foreach() in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 23

Notice: Undefined variable: estilos in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 36

Notice: Undefined variable: email in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 42

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\arquivos de programas\easyphp1-7\www\scripts\email.php on line 44

Erro ao enviar o E-Mail

A mim tmb me dá esse mesmo erro. O problema é k eu tenho os nomes do formularios correctos e n sei o k se passa para tar a dar erro. alguém me ajuda? :(

Link para o comentário
Compartilhar em outros sites

  • 0
Reveja os nomes dos campos. Verifique se os índices de $_POST (ou $_GET) são os mesmos dos atributos "name" das tags input.

Se o problema persistir, poste os códigos.

Abraços,

Beraldo

Beraldo tens aqui o codigo. Já verifiquei os inputs e o problemas n está aí. Ele diz undefined index mas a variavel é igual ao input name.

<?php

$nome = "";

$morada = "";

$codpostal = 0;

$localidade = "";

$telefone = 0;

$telemovel = 0;

$email = "";

$datanascimento = 0;

$situacaomilitar = "";

$estadocivil = "";

$cartaconducao = "";

$grau = "";

$curso = "";

$empresa = "";

$cargo = "";

$duracao = "";

$outrasinformacoes = "";

$outrasexperiencias = "";

$area = "";

$nome = $_POST["nome"];

$morada = $_POST['morada'];

$codpostal = $_POST['codpostal'];

$localidade = $_POST['localidade'];

$telefone = $_POST['telefone'];

$telemovel = $_POST['telemovel'];

$email = $_POST['email'];

$datanascimento = $_POST['datanascimento'];

$situacaomilitar = $_POST['situacaomilitar'];

$estadocivil = $_POST['estadocivil'];

$cartaconducao = $_POST['cartaconducao'];

$grau = $_POST['grau'];

$curso = $_POST['curso'];

$empresa = $_POST['empresa'];

$cargo = $_POST['cargo'];

$duracao = $_POST['duracao'];

$outrasinformcoes = $_POST['outrasinformacoes'];

$outrasexperiencias = $_POST['outrasexperiencias'];

$area = $_POST['area'];

if (@mail("npimentel@indra.pt", "Formulário de Candidatura", "From: $email"))

echo"Formulário enviado.";

else

echo"Erro ao enviar formulário.";

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Tive a fazer umas mudanças e agora só me dá este erro.

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\program files\easyphp1-8\www\sendmail.php on line 40

E não sei configurar o ficheiro ini do php nem servidores smtp...enfim sou um newbie!

Link para o comentário
Compartilhar em outros sites

  • 0

Como já citado anteriormente, para enviar os e-mails é necessário um destes itens:

- Ter um servidor SMTP configurado em sua máquina

- Usar o SMTP de um outro servidor. Pode ser de um provedor de e-mails, como o Yahoo!. Se for necessário autenticação, a função mail() não será útil, pois ela somente envia e-mails sem autenticação

- Configurar o sendmail do seu SIstema Operacional (para Linux somente)

Link para o comentário
Compartilhar em outros sites

  • 0
Como já citado anteriormente, para enviar os e-mails é necessário um destes itens:

- Ter um servidor SMTP configurado em sua máquina

- Usar o SMTP de um outro servidor. Pode ser de um provedor de e-mails, como o Yahoo!. Se for necessário autenticação, a função mail() não será útil, pois ela somente envia e-mails sem autenticação

- Configurar o sendmail do seu SIstema Operacional (para Linux somente)

Eu não sei fazer isso. Não me podes explicar como se faz, se faz favor?

Eu já tenho o servidor SMTP configurado, agora eu entendo é como se edita o ficheiro ini do php. :(

Link para o comentário
Compartilhar em outros sites

  • 0
Como já citado anteriormente, para enviar os e-mails é necessário um destes itens:

- Ter um servidor SMTP configurado em sua máquina

- Usar o SMTP de um outro servidor. Pode ser de um provedor de e-mails, como o Yahoo!. Se for necessário autenticação, a função mail() não será útil, pois ela somente envia e-mails sem autenticação

- Configurar o sendmail do seu SIstema Operacional (para Linux somente)

Eu não sei fazer isso. Não me podes explicar como se faz, se faz favor?

Eu já tenho o servidor SMTP configurado, agora eu entendo é como se edita o ficheiro ini do php. :(

Ooops! Eu kis dizer k não sei como se edita... Desculpa.... :(

tou a usar o QK SMTP Server 3 para enviar os emails e ele tmb me da um erro a dizer k "host not found".

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...