Ir ao conteúdo
  • Cadastre-se
Pedro Guilherme

RESOLVIDO Função mail php, emails não chegam

Recommended Posts

Estou tentando enviar emails usando a função mail(), porém os emails simplesmente não chegam na caixa de entrada.

<?php$msg = $_POST["msg"];$assunto   = $_POST["assunto"];$email = $_POST["mail"];$headers = "MIME-Version: 1.1\r\n";$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";$headers .= "From: pedrog.araujo@hotmail.com"."\r\n";$envio = mail("$email", "$assunto", "$msg", $headers);?>

Alguem poderia me ajudar?Agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Pedro Guilherme, se você está tentando enviar o email em localhost, não funcionará com essa função. 

Particularmente prefiro utilizar a classe php mailer, é extremamente simples de entender mesmo sendo em orientada a objetos.

 

Veja este tópico

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por um host pago, mas mesmo assim não estava dando  :( mas vou dar uma olhada no php mailer!

Mais um dúvida, quanto a sua resposta no tópico http://forum.clubedohardware.com.br/topic/1063816-calcular-tempo-de-postagem/
teria como fazer o mesmo com php 5.1? o host usa php 5.1 <_<


Ah, e o PHP mailer precisa de smtp? se sim, tem algum grátis bom?


?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por um host pago, mas mesmo assim não estava dando  :( mas vou dar uma olhada no php mailer!

Mais um dúvida, quanto a sua resposta no tópico http://forum.clubedohardware.com.br/topic/1063816-calcular-tempo-de-postagem/

teria como fazer o mesmo com php 5.1? o host usa php 5.1 <_<

Ah, e o PHP mailer precisa de smtp? se sim, tem algum grátis bom?

 

O php mailer precisa de smtp, você pode usar o do google... ou hotmail sem problemas.. só precisa autenticar pelo seu usuário e senha

sobre a função do date_create_from_format .. para php 5.1 ou menos, deve usar a função date() apenas. exemplo:

$horaAtual = date("H:i:s");

assim terás a hora para comparar com a cadastrada no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro agora é no diff

function calcularHora($horaPostada){	$hora = date("H:i:s");		//Para PHP 5.3 ou superior	$horaAtual = date('H:i:s', $hora);	$horaPostada = date('H:i:s',$horaPostada);		$intervalo = $horaAtual->diff($horaPostada);		return $intervalo->format('%H:%I:%S');}

Fatal error: Call to a member function diff() on a non-object

 

pesquisei tentei mudar diff por date_diff e nada, o problema eu presumo que é por diff ser um objeto -> mas não tenho ideia de como resolver, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh claro...  realmente, não me dei conta disso. a função diff pertence a classe DateTime do php a partir do 5.2 se eu não me engano.

 

Nesse caso, uma solução alternativa é não fazer pelo php já que é obsoleto (5.1), mas sim pelo próprio banco de dados.  a função DATEDIFF ou TIMEDIFF.. e seu campo de horario deve ser do tipo "TIME"

exemplo:  

SELECT      TIMEDIFF(curtime(), horario) FROM postagem

Mas não garanto que vá funcionar. 

 

ps: tenta entrar em contato com seu serviço de hospedagem e peça um upgrade do php  para a versão mais recente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz

$intervalo = mysql_query("SELECT TIMEDIFF(curtime(), data_c) FROM mensagens");  

e creio que deu certo, pois não está mais dando erro no diff.

Mas, agora apareceu mais um erro, e eu espero que o último, no return

 $intervalo->format('%d:%m:%y'); 

está dando o mesmo erro que estava dando no diff:

Call to a member function format() on a non-object

 

PS:Só pra constar, eu testei executando pelo sql e ele retornou a diferença entre as datas, assim como deveria ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, como eu disse mais acima.. como você não pode utilizar a classe DateTime devido ao php ser antigo ainda, não use a função que foi passada.  use só a instrução SQL.

 

a função format()  é específica da classe DateTime.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, mas como deixo meu php? por enquanto ta assim

	$diff = mysql_query("SELECT TIMEDIFF(curtime(), data) FROM mensagens WHERE nome='$nome'"); 	$datadiff = mysql_fetch_array($diff);	$datadiff_d = $datadiff["TIMEDIFF(curtime(), data"];

Porém não está funcionando, já como esperava k 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro acontece, pois esta linha esta errada:

$datadiff_d = $datadiff["TIMEDIFF(curtime(), data"];
O certo é:
 
$diff =  mysql_query("SELECT TIMEDIFF(curtime(), horario) as diff FROM mensagens WHERE nome='$nome'");$datadiff = mysql_fetch_object($diff);$datadiff_d = $datadiff->diff;echo $datadiff_d;

perceba na linha 1, que eu usei a clausula " AS "  para nomear o campo da diferença criado pela função.

ps: usei o fetch_object..  se quiser fazer de modo procedural seria desta maneira:

$diff =  mysql_query("SELECT TIMEDIFF(curtime(), horario) as diff FROM mensagens WHERE nome='$nome'");$datadiff = mysql_fetch_array($diff);$datadiff_d = $datadiff["diff"];echo $datadiff_d;
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, deixei desse jeito:

$diff =  mysql_query("SELECT TIMEDIFF(curtime(), horario) as diff FROM mensagens WHERE nome='$nome'");	$datadiff = mysql_fetch_array($diff);	$datadiff_d = $datadiff["diff"];

E mais um erro apareceu  :confused:  :confused:  :mad:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource 


PS: tanto o array quanto o object estão com esse erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está com um erro em algum lugar... por acaso qual seria o tipo do campo que está recebendo o horário?

eu fiz os testes aqui ... e funcionou o jeito que postei.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arrumei aqui e consegui  :D

Só tenho mais uma dúvida, teria como fazer o mesmo com a data? já tenho um esquema de if que se as horas for mais que 23:59 vai começar a contar com dia, mas como eu pego pego a diferença de diff com uma data d:m:y?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, nesse caso... eu recomendo que você  altere o tipo de campo do seu banco para DATETIME 

 

pois o formato fica:  AAAA-MM-DD H:M:S( 2014-03-08 19:55:00)

se você usou a função TIMEDIFF()  no banco,  podes usar a DATEDIFF(), que podes fazer com data e hora juntos.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu um problema  :(

se uma pessoa postou ás 23:00 e agora são 01:47 do outro dia, as horas ficam toda sem sentido  (-21:11:05) por exemplo.Tem como corrigir isso?abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem.. aí nós voltamos para aquela primeira função com uma pequena mudança:

function calcularHora($horaPostada){	date_default_timezone_set('America/Sao_paulo');	$hora = date("Y-m-d H:i:s");		//Para PHP 5.3 ou superior	$horaAtual = DateTime::createFromFormat('Y-m-d H:i:s', $hora);		// PARA O PHP 5.2	// $horaAtual = date_create_from_format('H:i:s', $hora);	$horaPostada = DateTime::createFromFormat('Y-m-d H:i:s',$horaPostada);		$intervalo = $horaAtual->diff($horaPostada);		return $intervalo->format('%H:%I:%S');} echo calcularHora("2014-03-08 23:00:00");

Resultado:

03:43:05 (agora são 02:44 do dia 9/3/2014)

 

Com a instrução SQL  eu não tenho certeza de como fazer isso..  você precisa pedir para o pessoal do seu servidor pago, atualizar o php para a ultima versão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não tem como fazer isso com o PHP 5.1? já pedi pra atualizar o PHP, porém vai demorar um booom tempo.

 

Vasculhando o manual do php, lembrei da função strtotime(). Ela foi implementada desde o php4 e 5.

 

exemplo:

function diferenca($hora){	date_default_timezone_set('America/Sao_paulo');	$now = date("Y-m-d H:i:s");		$hours_diff = strtotime($hora) - strtotime($now);	return date('h:i:s', $hours_diff);}echo diferenca("2014-03-08 23:00:00");

Mas, não recomendo.. pois logo se tornará obsoleto... pois a classe DateTime do php 5.3 é mais refinada e melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por hora vou ter que dar um jeito de usar essa função até que a hospedagem atualize o php.Obrigado


Só mais uma dúvida, a data está retrógrada, está diminuindo ao invés de aumentar, como arrumo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei qual foi o problema.... aqui funcionou, se o objetivo era  quando o usuário postar... aparecesse: " postado X  horas atrás.  por isso a diferença retrógrada.

 

tente com esta outra função, mais elaborada:

function tempoPostado($data, $hora) {	date_default_timezone_set('America/Sao_paulo');	$current_date = date ( "Y-m-d" );	$current_time = date ( "H:i:s" );		$date_time_added = $data . $hora;	$current_date_time = $current_date . $current_time;		//Verifica quantos X atrás o comentário foi postado	$diff = abs ( strtotime ( $current_date_time ) - strtotime ( $date_time_added ) );	$years = floor ( $diff / (365 * 60 * 60 * 24) );	$months = floor ( $diff / (30 * 60 * 60 * 24) );	$days = floor ( $diff / (60 * 60 * 24) );	$hours = floor ( $diff / (60 * 60) );	$minutes = floor ( $diff / 60 );	$seconds = $diff;		if ($years == 0) :		if ($months == 0) {			if ($days == 0) {				if ($hours == 0) {					if ($minutes == 0) {						$when = 'Postado ' . $seconds . ' segundos atrás';					} else {						$when = 'Postado ' . $minutes . ' minutos atás';					}				} else {					$when = 'Postado ' . $hours . ' horas atrás';				}			} else {				$when = 'Postado ' . $days . ' dias atrás';			}		} else {			$when = 'Postado ' . $months . ' meses atrás';		}	 else :		$when = 'Postado ' . $years . ' anos atrás';	endif;		return $when;}echo tempoPostado("2014-03-09", "18:00:00");

Saida:  "Postado 7 minutos atás"

 

Provavelmente o facebook deve usar uma função parecida com essa para mostrar o tempo que alguém postou alguma coisa

Pelo que eu testei.. funciona tranquilo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Te amo cara kkkkkkk  :D  valeu mesmo!
Voltando ao assunto do tópico, quanto ao phpmailer, quando envia o email pelo reply.php, dá um erro..segue o código

<html><head><title>PHPMailer - SMTP (Gmail) basic test</title></head><body><?php//error_reporting(E_ALL);error_reporting(E_STRICT);$email  = $_POST["email"];$assunto  = $_POST["assunto"];$mensagem  = $_POST["msg"];date_default_timezone_set('America/Sao_paulo');require_once('class.phpmailer.php');include("class.smtp.php");$mail             = new PHPMailer();$body             = file_get_contents('contents.html');$body             = eregi_replace("[\]",'',$body);$mail->IsSMTP(); $mail->SMTPDebug  = 2;                                                             $mail->SMTPAuth   = true;                  $mail->SMTPSecure = "ssl";                 $mail->Host       = "smtp.gmail.com";      $mail->Port       = 465;                   $mail->Username   = "Aqui eu botei meu email do gmail";  $mail->Password   = "Aqui a senha do meu gmail";           $mail->SetFrom('$email', 'First Last'); //email pra quem vai ser enviado$mail->AddReplyTo("Aqui meu email","Meu nome");$mail->Subject    = "$assunto";$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; $mail->MsgHTML($body.$mensagem);if(!$mail->Send()) {  echo "Mailer Error: " . $mail->ErrorInfo;} else {  echo "Message sent!";}?></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o erro que a parece?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comente a linha do error_reporting(E_STRICT);

 

para ver que mensagem de erro ele dá

 

a linha:  $mail->Subject = "$assunto";

 

está errada, como é uma variável, retire as aspas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×