Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
bioshock

Status Emails [Resolvido]

Recommended Posts

bioshock

Boas.

Utilizo o seguinte código para enviar emails:

<?php include "connection.inc";
$pegacategoria = $_GET['categoria'];
$query = mysql_query("SELECT * FROM newsletter WHERE categoriaNewsletter = '$pegacategoria' ORDER BY categoriaNewsletter LIMIT 1")or die("SELECT Error: " .mysql_error());

// Vai buscar todas as linhas até não haver mais
while($row = mysql_fetch_array( $query )) {

// Mostra os detalhas nas linhas
$id = $row['idn'];
$titulo = $row['titulon'];
$texto = $row['texton'];
$imagem = $row['imagemn'];


$query_emails = "SELECT * FROM email WHERE categoriaNewsletter = '$pegacategoria'"; 
$result = mysql_query($query_emails) or die(mysql_error()); 

if($result) {
while($row2 = mysql_fetch_assoc($result)){

ini_set('SMTP', 'mail.netcabo.pt');
ini_set('sendmail_from', 'epnhteste@sapo.pt');

$msg = $texto;
//Image in e-mail
$mailimg = "<a href='http://localhost/Xpto/backoffice/images/fullsized/newsletters/$imagem'><img title='$nome' width='75' height='75' src='http://localhost/Xpto/backoffice/images/thumbs/newsletters/$imagem'></a>";

//To send HTML mail, the Content-type header must be set:
$headers  ='MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html;charset=iso-8859-1' . "\r\n";
$headers .= 'From: EpnhTeste <epnhteste@sapo.pt>' . "\r\n";?>
<?php
$bodys = $row['texton'] . "<br>" . $mailimg . "<br>" . "<br>" . "Se desejar eliminar o seu email das Newsletters, por favor clique " . "<a href='http://localhost/Xpto/backoffice/eliminarEmailNewsletter.php?id=$id'>aqui</a>" . "<br>" . 

mail($row2['email'], $row['titulon'], $bodys, $headers);
// current time
echo date('h:i:s') . "\n";

// sleep for 10 seconds
usleep(500000);

// wake up !
echo date('h:i:s') . "\n";
                        echo "<script>alert('Sucesso!!'); window.location=\"mostrarnewsletter.php\"</script>";
}
}
}
?>

Na tabela Emails tenho: IDEmail, Email, Data, CategoriaNewsletter e Status.

Portanto, no código acima ele envia os emails de 0.5 em 0.5 segundos. O que eu pretendo é que, quando enviado, caso seja com sucesso então aparece no Status dos emails "Sucesso!" caso contrário "Erro!".

Ajudas? Obrigado!

Share this post


Link to post
Share on other sites
infopc

A função mail devolve TRUE ou FALSE no entanto isto só te diz que o email foi enviado.

A unica forma que tens de saber se o mail foi entregue agurdar por uma resposta de erro da parte do servidor do destinatário.

Fica Bem


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
infopc

então ligas-te por imap ou pop ao servidor de resposta e tratas os emails de erro


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
bioshock

Não, não foi isso que o patrão pediu.

A cada email enviado deve ser, automaticamente, atribuído a esse email o Status Enviado..

Share this post


Link to post
Share on other sites
infopc

a questão é, a função mail so te responde sim foi enviado ou não houve uma falha no envia. e no imediato é a unica coisa que podes tratar se é isso que queres nada mais simples

if (mail($row2['email'], $row['titulon'],  $bodys, $headers)) {
//código que grava secesso
} else {
//código que grava erro
}

se queres saber os que foram entregues tens que saber os que não foram entregues através dos email de "mail delivery failure"


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
bioshock

Eu até ai já cheguei..

O problema é que por exemplo: Era porreiro numa página à parte mostrar os Emails com erros.

Ou seja, o script corria normalmente, enviava os emails etc, no fim de todos os emails mostrava uma página com o log dos emails não enviados.

Share this post


Link to post
Share on other sites
Knitter

Então qual é o problema? Se estás a registar o estado de envio na BD, essa outra página só tem de ir à BD e listar todos os e-mails que lá estão registados bem como o seu estado. Não percebi a dúvida.

Share this post


Link to post
Share on other sites
bioshock

Então qual é o problema? Se estás a registar o estado de envio na BD, essa outra página só tem de ir à BD e listar todos os e-mails que lá estão registados bem como o seu estado. Não percebi a dúvida.

Sempre que é enviado um email com sucesso, é feita uma query UPDATE, nesse email que foi enviado, e é-lhe acrescentado no Status o valor "Sucesso!", caso contrário "Erro", é isso que te referes? Se for isso eu também já pensei nisso, mas como faço uma query ao email que está a ser enviado? Ou ele detecta, naquele código, automaticamente? :s

Share this post


Link to post
Share on other sites
infopc

continuo sem perceber o teu problema.

a função mail envia um email certo? quanda acaba devolve o resultado TRUE ou FALSE caso tenha ou não conseguido enviar o mail. até teres este resultado a execução do script não avança, ou seja se fizeres

if (mail()) {
    mysql_query('UPDATE `email` set `status` = "Enviado" where id='.$id);
} else {
    mysql_query('UPDATE `email` set `status` = "Erro" where id='.$id);
}

mas como te disse isto só te garante que o email vai ser enviado não garante que vai ser entregue.

como tratar os email que estão na caixa de correio não vou ensinar por uma questão de ética.

Fica Bem


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
bioshock

Mas eu já fiz isso...

	if($SendEmail){
	$idemail = $row2['idemail'];
                        echo "<script>alert('Sucesso!!'); window.location=\"mostrarnewsletter.php\"</script>";
mysql_query("UPDATE email SET status = 'Sucesso' WHERE idemail = '$idemail'") or die ("Error: " .mysql_error());
}else{
echo "<script>alert('Erro!!'); window.location=\"mostrarnewsletter.php\"</script>";
mysql_query("UPDATE email SET status = 'Não Enviado' WHERE idemail = '$idemail'") or die ("Error: " .mysql_error());

Mas em nada resultou.

Share this post


Link to post
Share on other sites
bioshock

Bem, já consegui ele a por a dizer "Enviado", mas não põem "não enviado", posso estar a falhar no obvio, alguem detecta algum erro?

if($SendEmail){

	echo "<script>alert('Sucesso!!'); window.location=\"mostrarnewsletter.php\"</script>";
mysql_query("UPDATE email SET status = 'Sucesso' WHERE idemail = '$idemail'") or die ("Error: " .mysql_error());
}
else{
	mysql_query("UPDATE email SET status = 'Não Enviado' WHERE idemail = '$idemail'") or die ("Error: " .mysql_error());
echo "<script>alert('Erro!!'); window.location=\"mostrarnewsletter.php\"</script>";
}

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
Sign in to follow this  

×

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.