Ir ao conteúdo
  • Cadastre-se

PHP Fazer funcionar o função php: mail();


Posts recomendados

Estou tentando fazer o ultimo exercicio do 1° capitulo do livro Use a Cabeça! Php MySql, mas quando eu executo a função mail() o meu script php me retorna o seguinte aviso: Warning : mail(): Falha ao conectar ao mailserver na porta 25 "localhost", verifique sua configuração "SMTP" e "smtp_port" em php.ini ou use ini_set() em C:\xampp\htdocs\htdocs outros\Exercicios \ ex Use a Cabeça! PHP MySQL\report.php na linha 26

Já tentei varias coisas, mas não consegui, eu usso o xampp e o meu mailserver no meu pc é o outlook. Como eu faço para configurar direito o php.ini?

$to = '[email protected]';
$subject = 'Aliens me abduziram - Reporte uma Abdução';
$msg = "$name foi abduzido $when_it_happened e ficou desaparecido por $how_long.\n".
    "Numero de aliens: $how_many\n". 
    "Descrição dos aliens: $alien_description\n" . 
    "O que eles fizeram: $what_they_did\n" . 
    "Fang foi visto: $fang_spotted\n" . 
    "Outros comentários: $other";
mail($to, $subject, $msg, 'From:' . $email);

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Erick Freire Por alguma razão, alguns servidores SMTP  não funcionam em localhost.  É necessário que você tenha um domínio, e um serviço de hosting que forneça os servidores smtp e a porta para funcionamento.

 

Mas, outros podem ser que funcione.. por exemplo o Gmail talvez possa funcionar...  nesse caso, você precisa abrir o arquivo php.ini e configurar o servidor smtp e a porta por exemplo:

 

No arquivo php.ini,  localize a linha de  [mail function]

 

e então configure:

  • SMTP = smtp.gmail.com
  • smtp_port = 587
  • sendmail_from = “Nome de usuário Gmail vai aqui”@gmail.com
  • sendmail_path = “”C:xamppsendmailsendmail.exe” -t” 

 

Salve e feche.

 

Agora localize o arquivo sendmail.ini  que deve estar na pasta  xampp/sendmail

 

e então configure:

 

  • smtp_server = smtp.gmail.com
  • smtp_port = 587
  • error_logfile = error.log 
  • debug_logfile = debug.log
  • auth_username = “Coloque seu usuário do Gmail aqui”@gmail.com
  • auth_password= “Sua senha do Gmail aqui”

Apesar do exercício do livro ser usando o mail().  Essa função é bastante limitada e ruim.

Para melhores práticas, utilize a classe  phpmailer, que é muito mais completa e permite mais coisas.. como envio de cópias cc, anexo de arquivo e etc..

 

Link para o comentário
Compartilhar em outros sites

ini_set("SMTP","smtp.office365.com");
ini_set("smtp_port","587");

Eu coloquei isso dai a mais no meu código e me retornou o seguinte: Aviso : mail (): Resposta do servidor SMTP: 451 5.7.3 STARTTLS é necessário para enviar e-mail [ROAP284CA0319.BRAP284.PROD.OUTLOOK.COM 2023-05-01T23:22:01.960Z 08DB49A6901B5796] em C :\xampp\htdocs\ htdocs outros\Exercicios\ex Use a Cabeça! PHP

 

Meu código todo agr está assim.

<html>
<head>
    <title>Aliens me abiduziram - Reporte uma Abdução</title>
</head>
<body>
<h2>Aliens me abduziram - Reporte uma Abdução</h2>
<?php
$when_it_happened = $_POST['whenithappened'];
$how_long = $_POST['howlong'];
$alien_description = $_POST['aliendescription'];
$fang_spotted = $_POST['fangspotted'];
$email = $_POST['email'];
$name = $_POST['firstname'].' '.$_POST['lastname']; // outra forma de concatenar as chaves do array $_POST
$how_many = $_POST['howmany'];
$what_they_did = $_POST['whattheydid'];
$other = $_POST['other'];

ini_set("SMTP","smtp.office365.com");
ini_set("smtp_port","587");

$to = '[email protected]';
$subject = 'Aliens me abduziram - Reporte uma Abdução';
$msg = "$name foi abduzido $when_it_happened e ficou desaparecido por $how_long.\n".
    "Numero de aliens: $how_many\n". 
    "Descrição dos aliens: $alien_description\n" . 
    "O que eles fizeram: $what_they_did\n" . 
    "Fang foi visto: $fang_spotted\n" . 
    "Outros comentários: $other";
mail($to, $subject, $msg, 'From:' . $email);

echo 'Thanks for submitting the form.<br />';    
echo 'You were abducted ' . $when_it_happened;
echo ' and were gone for ' . $how_long . '<br />';
echo 'Number of aliens: ' . $how_many . '<br />';
echo 'Describe them: ' . $alien_description . '<br />';
echo 'The aliens did this: '. $what_they_did . '<br />';
echo 'Was Fang there? ' . $fang_spotted . '<br />';
echo 'Other comments: ' . $other . '<br />'; 
echo 'Your email address is ' . $email. '<br />'; 

?>
</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Erick Freire

 

Como eu disse antes, é possível que o outook não funcione no localhost, e com a função nativa do php.  

Troque para a classe phpmailer.

 

 

Abre  o arquivo  ssl_options.php do phpmailer.. e define as opções para o outlook

 

 

Mas sendo bem sincero,  use o Gmail, que é mais compatível e funciona sempre, inclusive em localhost

Exemplo:

<?php
//require('phpmailer/class.phpmailer.php');
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer(true); 


/* Diz para a classe usar o SMTP  $mail->Host = "smtp.office365.com";  
Servidor SMTP server $mail->SMTPDebug = 2;  
Habilita SMTP debug de informação (Para testes)  1 = erros e Mensagens,   2 = só mensagens */
IsSMTP(); 


// Habilita autenticação SMTP
$mail->SMTPAuth = true;  

// seta o prefixo para o sevidor seguro 
$mail->SMTPSecure = 'tls';

//define algumas opções para false e true
$mail->SMTPOptions = array (
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);

// define o servidor do outlook SMTP server
$mail->Host = 'smtp.office365.com';

// set the SMTP port for the OUTLOOK 465 server 
$mail->Port = 587;

// OUTLOOK  username 
$mail->Username = "[email protected]"; 

//senha
$mail->Password = "sua senha"; 

//Define de vai mandar  e um email de resposta
$mail->SetFrom('[email protected]', 'First Last'); 
$mail->AddReplyTo("[email protected]","First Last"); 

//O título do email
$mail->Subject = "PHPMailer Test Subject via smtp (OUTLOOK 465), basic"; 

// opcional comentários e testes 
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; 

//Corpo da mensagem do email
$body = 'teste'; $mail->MsgHTML($body); 

//quem vai receber
$address = "[email protected]"; 
$mail->AddAddress($address, "NOME"); 

if(!$mail->Send()) { 
   echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
echo "Message sent!"; 
} ?>

 

  • Triste 1
Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!