Jump to content
2tpower

Send Mail

Recommended Posts

2tpower

Ora boas tardes,

Tenho um formulário de contacto que quando é submetido envia um e-mail. Parece que tudo funciona bem, animações, php, só que receber o e-mail está quieto.

Fica aqui o código responsável:

<div id="contactosForm">
                                    <?php @require_once('Scripts/PHP/contactos.php');?>
                                    <label id="request">*Campos Obrigatórios</label>
                                    <form method="POST" id="cForm">
                                        <label><span class="requested">*</span>Nome:</label>
                                        <input name="name" id="name" type="text" size="16" maxlength="70"/><br>
                            
                                        <label><span class="requested">*</span>Email:</label>
                                        <input name="email" id="email" type="text" size="16" maxlength="70"/><br><br>
                                
                                        <label><span class="requested">*</span>Messagem:</label><br>
                                        <textarea name="msg" id="msg" cols="18" rows="5"></textarea><br>
                                        
                                        <div align="center" style="margin-left:13px">
                                            <button type="submit">Enviar</button>
                                            <button type="reset">Limpar</button>
                                        </div>
                                    </form>		
                                </div>

$(document).ready(function(){ 
$('#cForm').validate({
	...
	},
	submitHandler: function(){
//	   		form.submit();
		$.post("Scripts/PHP/contactos.php",{
			name:$('#name').val(),
			email:$('#email').val(),
			msg:$('#msg').val()				
			},function(){
		});
		...efeitos...
});

<?php
if($_POST['name'] && $_POST['email'] && $_POST['msg'])
{
	$name	= $_POST['name'];
	$email	= $_POST['email'];
	$msg	= $_POST['msg'];

	$to = 'eventos@site.com';
	$from = 'site.com';
	$subject = 'Nova Mensagem';
	$mailmsg = 'Nome: '.$name.'\nEmail: '.$email.'\n\nMensagem: '.$msg.'';

	mail($to, $subject, $mailmsg, 'From: '.$from.'');
}
?>

O que será? 🤔

Obrigado pelo vosso tempo!

ps: echo mail.... dá 1.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Boa tarde....

O problema é da função mail(). Para essa função funcionar, é preciso configurar algumas coisas no servidor. No entanto não recomendo o uso dessa função....

... recomendo o uso de uma classe de mailing: PHPMailer - (exemplos)

Share this post


Link to post
Share on other sites
2tpower

Ok vou usar essa classe. Já agora para que serve o AltBody?

Obrigado.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

o AltBody é um diminutivo para "Alternative Body"... É a versão text/plain (ou seja, sem HTML) para clientes de e-mail que não tenham capacidade de mostrar HTML.

Depois diz-me o que achaste ;):) e as dúvidas se as tiveres, coloca aqui :)

Share this post


Link to post
Share on other sites
2tpower

Tem opções mais interessantes e facilita mais a vida  :)

Mas ainda assim devo estar a fazer qualquer coisa mal:

<?php
@require_once 'class.phpmailer.php';
if($_POST['name'] && $_POST['email'] && $_POST['msg'])
{
	$name	= $_POST['name'];
	$email	= $_POST['email'];
	$msg	= $_POST['msg'];
	$mail = new PHPMailer(true);
	$mail->IsMail();

	try
	{
		$mail->AddAddress('eventos@site.com');
		$mail->SetFrom('site.com');
		$mail->Subject = 'Nova Mensagem';
		$mail->Body = 'Nome: '.$name.'\nEmail: '.$email.'\n\nMensagem: '.$msg.'';
		$mail->CharSet="windows-1251";
		$mail->CharSet="utf-8";
		$mail->Send();
	}
	catch (phpmailerException $e)
	{
		echo $e->errorMessage();
	}
	catch (Exception $e)
	{
		echo $e->getMessage();
	}
}    
?>

Continuo com o mesmo sintoma, o que será (será por utilizar o IsMail)? Porque é que a função mail() é má?

Obrigado ;)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn
Continuo com o mesmo sintoma, o que será (será por utilizar o IsMail)? Porque é que a função mail() é má?

Por várias razões:

1 - Porque actualmente poucos são os ISP's que fornecem suporte à função mail() ou pelo menos que a configuram... Preferem dar um acesso SMTP por conta de alojamento.

2 - Porque a mail() "obriga" a que configures headers "que não lembram ao paizinho".

3 - Acima de tudo, porque, se tens possibilidade de usar melhor... deves fazê-lo!

Por fim, se tiveres uma conta GMail, experimenta testar com o SMTP deles:

http://phpmailer.worxware.com/index.php?pg=exampleagmail

Se mesmo assim quiseres usar a mail(), não te posso ajudar... Simplesmente porque não a uso e porque a mail() implica ainda que certos headers obedeçam a standards (RFC's) que não os sei de cor. Basta ver aqui - http://php.net/mail - para perceber o quão mau é ;)

Share this post


Link to post
Share on other sites
2tpower

Bolas esqueci-me de activar as notificações de resposta lol

Bem vou então testar por SMTP até porque a conta é do gmail  ;)

Já dou noticias, btw, quanto ao gmail.php já está a 100%

Share this post


Link to post
Share on other sites
2tpower

Sintomas continuam, o que será? 🤔

<?php
@require_once 'class.phpmailer.php';
if($_POST['name'] && $_POST['email'] && $_POST['msg'])
{
	$name	= $_POST['name'];
	$email	= $_POST['email'];
	$msg	= $_POST['msg'];

	@require_once('class.phpmailer.php');
	$mail = new PHPMailer(true);
	$mail->IsSMTP();

	try 
	{
		$mail->SMTPDebug  = 2;					// enables SMTP debug information (for testing)
		$mail->SMTPAuth   = true;				// enable SMTP authentication
		$mail->SMTPSecure = "tls";				// sets the prefix to the servier
		$mail->Host       = "smtp.gmail.com";	// sets GMAIL as the SMTP server
		$mail->Port       = 587;				// set the SMTP port for the GMAIL server
		$mail->Username   = "user@site.com";
		$mail->Password   = "pass";

		$mail->AddAddress('eventos@site.com');
		$mail->SetFrom('site.com');
		$mail->Subject = 'Nova Mensagem';
		$mail->Body = 'Nome: '.$name.'\nEmail: '.$email.'\n\nMensagem: '.$msg.'';
		$mail->CharSet="windows-1251";
		$mail->CharSet="utf-8";		
		$mail->Send();
	}
	catch (phpmailerException $e)
	{
		echo $e->errorMessage(); 
	}
	catch (Exception $e)
	{
		echo $e->getMessage(); 
	}
}    
?>

Nota o email não é lala@gmail.com porque é usado Google Apps.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Primeiro, onde tens:

		$mail->SetFrom('site.com');

Deve ser um e-mail, como estás a enviar pelo GMail, deve ser o e-mail da GMail da conta que estás a usar....

Além disso, localmente deve funcionar, pois já tens os sockets a suportar conexões SSL/TLS... mas como tu disseste, o teu pedido encontra-se em análise pela empresa de hosting do servidor para activar os sockets SSL, portanto só quando os tiveres activos é que funcionarão no servidor.

Aconselho-te também, para desenvolvimento a acrescentares isto:

                        $mail->IsSMTP(TRUE);
                        $mail->SMTPDebug=TRUE;

Share this post


Link to post
Share on other sites
2tpower

Eles activaram na hora sem problemas  ;)

Ok vou testar isso então, quanto ao mail acho que não precisa de ser @gmail.com porque no site do google dizem que se tivermos a usar Google Apps deve ser @domain.com o que é o caso.

Já dou noticias!

Share this post


Link to post
Share on other sites
2tpower

Bolas continua igual!  ;)

Até já meti username e password errada e nem exception dá  :idiot2:... outra coisa estranha é que tenho um "mail()" dos tais que não aconselhas, ainda não mudei todos só quando este estiver bom, para confirmar a inscrição da newsletter e funciona que nem gingas... 🤔

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ah pera lá... no mesmo servidor, o mail funciona? É que se funcionar é preferível que uses esse. Eu falei porque, por norma, não é usado/activado/suportado no servidor de hosting essa função...

... mas se suporta, usa-a claro. Mesmo com o phpmailer consegues:

$mail->IsMail();

Share this post


Link to post
Share on other sites
2tpower

$mail = new PHPMailer(true);
                $mail->IsMail();
               
                try
                {
                        $mail->AddAddress('eventos@site.com');
                        $mail->SetFrom('eventos@site.com'');
                        $mail->Subject = 'Nova Mensagem';
                        $mail->Body = 'Nome: '.$name.'\nEmail: '.$email.'\n\nMensagem: '.$msg.'';
                        $mail->CharSet="windows-1251";
                        $mail->CharSet="utf-8";
                        $mail->Send();
                }

Continua com o mesmo sintoma  :cheesygrin:

Share this post


Link to post
Share on other sites
Lfscoutinho

Aconselho-te também, para desenvolvimento a acrescentares isto:

                        $mail->IsSMTP(TRUE);
                        $mail->SMTPDebug=TRUE;

Mete isso e vê/mostra o erro.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Yup, podes fazê-lo através do:

echo $mail->ErrorInfo;

Share this post


Link to post
Share on other sites
2tpower

Já fiz isso mas nem echo é feito não percebo... fui comentando e "descomentando" e está a falhar em $mail->Send(); mas não consigo apanhar o erro para saber qual é. 😡

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

OK... vamos por partes...

Adiciona isto no teu index.php, no topo:

error_reporting(E_ALL);
ini_set('display_errors','1');
ini_set('display_startup_errors','1');

já agora, qual é a versão do PHP que tens?

Share this post


Link to post
Share on other sites
2tpower

A minha versão do PHP é a 5.3.5 e do PHPAdmin é a 3.3.9. A versão do PHP do servidor é a 5.2.6 (sem certezas) e a do PHPAdmin é a 2.11.6.

Já fiz o que disseste mas nada apareceu.

$(document).ready(function(){ 
$('#cForm').validate({
	...
	},
	submitHandler: function(){
		$.post("Scripts/PHP/contactos.php",{
			name:$('#name').val(),
			email:$('#email').val(),
			msg:$('#msg').val()				
			},function(){
		})
		.success(function(){
			...
		})
		.error(function(){alert("erro")});
   		}
});
});

<?php
if($_POST['name'] && $_POST['email'] && $_POST['msg'])
{
	error_reporting(E_ALL);
	ini_set('display_errors','1');
	ini_set('display_startup_errors','1');

	$name	= $_POST['name'];
	$email	= $_POST['email'];
	$msg	= $_POST['msg'];
	echo '<script type="application/javascript">alert("mail");</script>';
	$ok = mail($mail, "Teste", "lalal", "From: noreply@site.com");
}  
?>

Dantes era executado .error(function(){alert()}); agora que estive para aqui a mexer e a testar coisas, reduzir código para testar já nem entrar no .error, entra no .success mas continua sem enviar o e-mail.

Isto nem o echo '<script type="application/javascript">alert("mail");</script>'; executa.... não sei o que se passa parece que nem no .php entra  😡

mAiN_iNfEcTiOn, lembras-te do newsletter.php? Funciona perfeitamente, a pessoa recebe uma notificação por e-mail simplesmente com a função mail()... Depois do mail ser enviado para a pessoa avisando que se inscreveu na newsletter, é corrido o gmail.php que adiciona o e-mail na conta de gmail do site, o que funciona bem também, mas depois queria enviar um e-mail ao dono a avisar que a pessoal X se adicionou mas também não envia e-mail nenhum. Não dá erro mas não envia.

Todos os scripts de e-mail são iguais, mas só um deles funciona... o que é que se passará para aqui... 🤔

Aqui fica aqui o pedido e a resposta filtrados pela consola web do firefox quando o .error era executado:

sitea.th.png

Obrigado pelo vosso tempo.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Bem... se é assim como dizes, então é porque o script não está a entrar no if :|

antes da linha:

if($_POST['name'] && $_POST['email'] && $_POST['msg'])

faz:

var_dump($_POST['name'] && $_POST['email'] && $_POST['msg']); die(); // <--- ISTO
if($_POST['name'] && $_POST['email'] && $_POST['msg'])

E diz-me que erro te dá.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.