Ir ao conteúdo

Posts recomendados

Postado

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);

 

  • Moderador
Postado

@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..

 

Postado
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>

 

  • Moderador
Postado

@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
  • 3 meses depois...
Postado

Tentei usar essa classe e ficou muito mais complicado, tive que usar o composer e instalar uma lib, só nisso já complicou muito fora que ainda tenho configurar umas coisas nessa classe.

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!