Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Status Emails [Resolvido]

Mensagens Recomendadas

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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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>";
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.