Enviando Emails Autenticados com o Protocolo SMTP
Em primeiro vamos definir as informações que serão utilizadas na conexão com o servidor SMTP, que são: o nome dele, a porta de comunicação. A porta 25 é padrão para todos os servidores SMTP. Além dessas informações, a função fsockopen() solicita como parâmetro opcional, uma constante como tempo de espera para uma segunda tentativa, caso haja impossibilidade de estabelecer a conexão de imediato.
Como planejamos enviar emails com validação, agora vem as informações para validação do usuário no servidor descrito acima.
É útil também projetar o email antecipadamente. Neste exemplo vamos definir variáveis diretamente, mas é possível receber cada conteúdo dos campos de um form.
Curiosamente a data não é gerada automaticamente, então é necessário utilizar a função date() para criar uma string no formato RFC2822 que tem o seguinte estilo: "Wed, 25 May 2005 13:24:07 -0300", onde o último número corresponde a zona, referente aos fusos horários, onde foi gerada a string.
Começando o script em si abre vem a conexão com o servidor SMTP. A função fsockopen como já discutido é a função escolhida. O símbolo @ no início indica que é para ocultar as mensagens de erro automáticas, porque vamos manipular os erros através das variáveis $errno e $errstr.
Se ocorrer algum erro, a variável booleana $errno informa 1 (verdadeiro), senão informa 0 (false). Portanto, se ocorrer erro, o script é interrompido pela função exit.
Se não há erro continua o script aqui.
É importante explicar um pouco mais sobre a função fsockopen(). Sempre que ela abre uma conexão, um socket é criado. Bem, abrir uma conexão é muito semelhante a criar um arquivo, assim podemos escrever nela e ler dela, o que significa enviar comandos (requisição) para o socket e receber os resultados através deste pseudo arquivo. Assim os comandos utilizados são os mesmos de ler e escrever em arquivos: fputs() e fgets().
Caso você esteja testando o que o servidor devolve como resposta, é possível imprimir esses resultados lendo o socket como no exemplo abaixo. Esta linha pode ser colocado no script após cada envio de comando ou dado.
Neste ponto, é preciso conhecer bem o servidor que está utilizando. Cada um pode responder de forma diferente a uma conexão. Alguns exigem uma mensagem de handshaking precedendo os outros comandos.
Se for necessário, utilize o verbo HELO ou o EHLO, descritos na última página deste artigo. Além disso, a resposta de cada servidor para essas indagações pode ser distinta.
A seguir um trecho elaborado a partir da sugestão feita pelo usuário Flávio Vargas. Este trecho generaliza a espera de um número distinto de respostas ao HELO ou EHLO enviadas pelo servidor.
Atenção existem servidores que não estabelecem handshaking, portanto a resposta a esta consulta será vazia.
Continuando, vamos agora solicitar ao servidor SMTP a autenticação, lógico, se quiser enviar emails sem autenticar é só tirar esta parte.
Em seguida vamos enviar o login e a senha no formato que o servidor espera receber: codificado. A função base64_encode() codifica uma string para o formato esperado.
Quase pronto, agora precisamos estabelecer um email de retorno, por exemplo para, receber msgs de erro, tal como, destinatário não encontrado e o endereço do destinatário.
Finalmente vamos compor o email a ser enviado, aqui vale a pena você estudar um pouquinho sobre o cabeçalho dos emails. Vou dar um exemplo típico que pode ser modificado segundo suas necessidades.
Lembre-se que o comando DATA avisa ao servidor que dali para frente tudo que vier são dados do email.
Agora sim o email foi enviado. Repare em dois detalhes importantes para que esta tarefa fosse realmente realizada com sucesso: 1) antes do corpo do email é necessário enviar uma linha em branco e 2) após ele, encerrar com uma linha contendo apenas um ponto. Claro o \r\n é necessário para finalizar todas as linhas.
Se desejar pode inserir a string Cc: que significa ‘Com Cópia’, em inglês, ‘Carbon Copy’ e ainda a string Bcc: que gera uma cópia oculta, do inglês, ‘Blind Carbon Copy’.
Agora basta apenas encerrar a conexão com o comando QUIT.
Vamos ver como fica o script completo
O resultado final do teste feito com este script é o seguinte:
conectou com: Resource id #2
conexão: 220 mail.xxx.yyy.br ESMTP
auth login: 334 VXNlcm5hbWU6
login: 334 UGFzc3dvcmQ6
senha: 235 ok, go ahead (#2.0.0)
mail from: 250 ok
recpt to: 250 ok
data: 354 go ahead
email: 250 ok 1128544837 qp 13633
quit: 221 mail.xxx.yyy.br
<?php
$servidor= "smtp.seu_servidor.com.br";
$porta = 25;
$timeout = 10;
?>
Como planejamos enviar emails com validação, agora vem as informações para validação do usuário no servidor descrito acima.
<?php
$login = "seu_login@seu_servidor.com.br"; // em alguns servidores basta o seu_login
$senha = "sua_senha"; // senha no formato texto
?>
É útil também projetar o email antecipadamente. Neste exemplo vamos definir variáveis diretamente, mas é possível receber cada conteúdo dos campos de um form.
<?php
$de = "origem@seu_servidor.com.br";
$deNome = "Origem";
$para = "destino@seu_servidor.com.br";
$paraNome= "Destino";
$corpo = "Mensagem com autenticação OK<br>bysica©";
$assunto = "assunto";
?>
Curiosamente a data não é gerada automaticamente, então é necessário utilizar a função date() para criar uma string no formato RFC2822 que tem o seguinte estilo: "Wed, 25 May 2005 13:24:07 -0300", onde o último número corresponde a zona, referente aos fusos horários, onde foi gerada a string.
<?php
$data = 'Date: '.date('r',time()); // este formato é exigência do servidor
?>
Começando o script em si abre vem a conexão com o servidor SMTP. A função fsockopen como já discutido é a função escolhida. O símbolo @ no início indica que é para ocultar as mensagens de erro automáticas, porque vamos manipular os erros através das variáveis $errno e $errstr.
<?php
$conexao = @fsockopen($servidor, $porta, $errno, $errstr, $timeout);
?>
Se ocorrer algum erro, a variável booleana $errno informa 1 (verdadeiro), senão informa 0 (false). Portanto, se ocorrer erro, o script é interrompido pela função exit.
<?php
if ($errno){
echo "Erro ao conectar ao $servidor na $porta: ".$errstr;
exit;
}
?>
Se não há erro continua o script aqui.
É importante explicar um pouco mais sobre a função fsockopen(). Sempre que ela abre uma conexão, um socket é criado. Bem, abrir uma conexão é muito semelhante a criar um arquivo, assim podemos escrever nela e ler dela, o que significa enviar comandos (requisição) para o socket e receber os resultados através deste pseudo arquivo. Assim os comandos utilizados são os mesmos de ler e escrever em arquivos: fputs() e fgets().
Caso você esteja testando o que o servidor devolve como resposta, é possível imprimir esses resultados lendo o socket como no exemplo abaixo. Esta linha pode ser colocado no script após cada envio de comando ou dado.
<?php
echo "conexão: ".fgets($conexao, 1024)."<br>";
?>
Neste ponto, é preciso conhecer bem o servidor que está utilizando. Cada um pode responder de forma diferente a uma conexão. Alguns exigem uma mensagem de handshaking precedendo os outros comandos.
Se for necessário, utilize o verbo HELO ou o EHLO, descritos na última página deste artigo. Além disso, a resposta de cada servidor para essas indagações pode ser distinta.
A seguir um trecho elaborado a partir da sugestão feita pelo usuário Flávio Vargas. Este trecho generaliza a espera de um número distinto de respostas ao HELO ou EHLO enviadas pelo servidor.
Atenção existem servidores que não estabelecem handshaking, portanto a resposta a esta consulta será vazia.
<?php
fputs($conexao,"EHLO $servidor\r\n", 512);
do{
$buffer = fgets($conexao, 512);
echo "loop: ".$buffer."<br>";
}while((substr($buffer, -8) != '8BITMIME') && ($buffer != ""));
?>
Continuando, vamos agora solicitar ao servidor SMTP a autenticação, lógico, se quiser enviar emails sem autenticar é só tirar esta parte.
<?php
fputs($conexao,"AUTH LOGIN\r\n", 512)."<br>";
?>
Em seguida vamos enviar o login e a senha no formato que o servidor espera receber: codificado. A função base64_encode() codifica uma string para o formato esperado.
<?php
fputs($conexao,base64_encode($login)."\r\n", 512)."<br>";
fputs($conexao,base64_encode($senha)."\r\n", 512)."<br>";
?>
Quase pronto, agora precisamos estabelecer um email de retorno, por exemplo para, receber msgs de erro, tal como, destinatário não encontrado e o endereço do destinatário.
<?php
fputs($conexao, "MAIL FROM:<$de>\r\n", 512);
fputs($conexao, "RCPT TO:<$para>\r\n", 512);
?>
Finalmente vamos compor o email a ser enviado, aqui vale a pena você estudar um pouquinho sobre o cabeçalho dos emails. Vou dar um exemplo típico que pode ser modificado segundo suas necessidades.
<?php
fputs($conexao, "DATA\r\n", 512);
?>
Lembre-se que o comando DATA avisa ao servidor que dali para frente tudo que vier são dados do email.
<?php
fputs($conexao, "MIME-Version: 1.0\r\n");
fputs($conexao, "Content-Type: text/html; charset=iso-8859-1\r\n");
fputs($conexao, "Date: $data\r\n");
fputs($conexao, "From: $deNome <$de>\r\n");
fputs($conexao, "To: $paraNome <$para>\r\n");
fputs($conexao, "Subject: $assunto\r\n");
fputs($conexao, "\r\n");
fputs($conexao, "$corpo\r\n");
fputs($conexao, ".\r\n");
?>
Agora sim o email foi enviado. Repare em dois detalhes importantes para que esta tarefa fosse realmente realizada com sucesso: 1) antes do corpo do email é necessário enviar uma linha em branco e 2) após ele, encerrar com uma linha contendo apenas um ponto. Claro o \r\n é necessário para finalizar todas as linhas.
Se desejar pode inserir a string Cc: que significa ‘Com Cópia’, em inglês, ‘Carbon Copy’ e ainda a string Bcc: que gera uma cópia oculta, do inglês, ‘Blind Carbon Copy’.
Agora basta apenas encerrar a conexão com o comando QUIT.
<?php
fputs($conexao, "QUIT\r\n", 512);
echo "quit: ".fgets($conexao, 512)."<br>";
fclose($conexao);
?>
Vamos ver como fica o script completo
<?php
//*************************************************************************************//
// Script para enviar email autenticado via SMTP (Simple Mail Transfer Protocol) //
// Autor: Prof. Carlos Sica <www.din.uem.br/sica> (Maringá - PR - Brasil) //
// Data: 21/05/2005 //
// Adoro programar! //
//*************************************************************************************//
// primeiro vamos definir as informações para o servidor SMTP
$servidor= "smtp.seu_servidor.com.br"; // nome do servidor
$porta = 25; // número da porta, o email sempre fica na 25
$timeout = 10; // tempo para expirar a tentativa de conexão
// agora vem as informações para validação do usuário no servidor descrito acima
$login = "seu_login@seu_servidor.com.br"; // em alguns servidores basta o seu_login
$senha = "sua_senha"; // senha no formato texto
// informações para o email
$de = "origem@seu_servidor.com.br";
$deNome = "Origem";
$para = "destino@seu_servidor.com.br";
$paraNome= "Destino";
$corpo = "Mensagem com autenticação OK<br>bysica";
$assunto = "assunto";
$data = 'Date: '.date('r',time()); // este formato é exigência do servidor
// abre conexão com o servidor SMTP utilizando a função fsockopen
// o @ no início é para ocultar as mensagens de erro automáticas
// porque vamos manipular os erros através das variáveis $errno e $errstr
$conexao = @fsockopen($servidor, $porta, $errno, $errstr, $timeout);
// se houve erro a variável $errno vem ligada
if ($errno){
echo "Erro ao conectar ao $servidor na $porta: ".$errstr;
exit;
}
// se não há erro continua o script
echo "conectou com: ".$conexao."<br>";
echo "conexão: ".fgets($conexao, 1024)."<br>";
// handshaking com o servidor
fputs($conexao,"EHLO $servidor\r\n", 512);
do{
$buffer = fgets($conexao, 512);
echo "loop: ".$buffer."<br>";
}while((substr($buffer, -8) != '8BITMIME') && ($buffer != ""));
// solicita autenticação (se quiser enviar email sem autenticar é só tirar esta parte)
fputs($conexao,"AUTH LOGIN\r\n", 512)."<br>"; // envia a requisição
echo "auth login: ".fgets($conexao, 512)."<br>"; // recebe a resposta e imprime
fputs($conexao,base64_encode($login)."\r\n", 512)."<br>"; // envia a requisição
echo "login: ".fgets($conexao, 512)."<br>"; // recebe a resposta e imprime
fputs($conexao,base64_encode($senha)."\r\n", 512)."<br>"; // envia a requisição
echo "senha: ".fgets($conexao, 512)."<br>"; // recebe a resposta e imprime
// estabelece um email de retorno para receber msgs de erro
fputs($conexao, "MAIL FROM:<$de>\r\n", 512);
echo "mail from: ".fgets($conexao, 512)."<br>";
// estabelece o endereço de envio
fputs($conexao, "RCPT TO:<$para>\r\n", 512);
echo "recpt to: ".fgets($conexao, 512)."<br>";
// comanda o inicio do email a ser enviado
fputs($conexao, "DATA\r\n", 512);
echo "data: ".fgets($conexao, 512)."<br>";
// infomações do email a ser enviado
fputs($conexao, "MIME-Version: 1.0\r\n");
fputs($conexao, "Content-Type: text/html; charset=iso-8859-1\r\n");
fputs($conexao, "Date: $data\r\n");
fputs($conexao, "From: $deNome <$de>\r\n");
fputs($conexao, "To: $paraNome <$para>\r\n");
fputs($conexao, "Subject: $assunto\r\n");
fputs($conexao, "\r\n");
fputs($conexao, "$corpo\r\n.\r\n");
echo "email: ".fgets($conexao, 512)."<br>";
// encerra a conexão com o servidor
fputs($conexao, "QUIT\r\n", 512);
echo "quit: ".fgets($conexao, 512)."<br>";
fclose($conexao);
exit;
?>
O resultado final do teste feito com este script é o seguinte:
conectou com: Resource id #2
conexão: 220 mail.xxx.yyy.br ESMTP
auth login: 334 VXNlcm5hbWU6
login: 334 UGFzc3dvcmQ6
senha: 235 ok, go ahead (#2.0.0)
mail from: 250 ok
recpt to: 250 ok
data: 354 go ahead
email: 250 ok 1128544837 qp 13633
quit: 221 mail.xxx.yyy.br
esse script aki dah Connection refused mas tenho certeza do servidor e da porta pois a mesma configuração no outlook conecta no smtp e envia ok
Já tentei com mais de um servidor diferente SMTP o local, alguns pagos outros grátis, sempre da Connection refused
alguém sabe pq?
Já tentei com mais de um servidor diferente SMTP o local, alguns pagos outros grátis, sempre da Connection refused
alguém sabe pq?
16/08/2008 7:32pm
(~17 anos atrás)
ERRATA: O TÍTULO SERIA:
"Máquina trava e a página >>NÃO<< é exibida"
Até mais!
"Máquina trava e a página >>NÃO<< é exibida"
Até mais!
10/05/2007 2:13pm
(~18 anos atrás)
Máquina trava e a página é exibida
SOLUÇÃO:
substituir da linha 41 à 44 por:
//modificado ----------------
$i=0;
do
{
$i++;
$buffer=fgets($conexao, 512);
print($i." - loop: ".$buffer."<br>");
if(substr($buffer , 4, 8)=='8BITMIME')
break;
}
while ($buffer);
// fim -------------- modificado
Até mais!
SOLUÇÃO:
substituir da linha 41 à 44 por:
//modificado ----------------
$i=0;
do
{
$i++;
$buffer=fgets($conexao, 512);
print($i." - loop: ".$buffer."<br>");
if(substr($buffer , 4, 8)=='8BITMIME')
break;
}
while ($buffer);
// fim -------------- modificado
Até mais!
10/05/2007 2:11pm
(~18 anos atrás)
Bem pessoal...
o meu fica assim:
conectou com: Resource id #1
conexão:
loop:
loop:
loop:
loop:
loop:
loop:
loop:
Loop infinitamente :S
alguem poderia me ajudar?
obrigado!
o meu fica assim:
conectou com: Resource id #1
conexão:
loop:
loop:
loop:
loop:
loop:
loop:
loop:
Loop infinitamente :S
alguem poderia me ajudar?
obrigado!
19/04/2007 1:44pm
(~18 anos atrás)
Carlos, ótimo artigo!
Meus parabéns mesmo, muito didático e funcional.
Junto à observação do Flavio Vargas eis um script muito bom.
Abraço,
Líbene Fernandes
Meus parabéns mesmo, muito didático e funcional.
Junto à observação do Flavio Vargas eis um script muito bom.
Abraço,
Líbene Fernandes
27/09/2006 6:54am
(~18 anos atrás)
Carlos estou escrevendo para elogiar seu script e tb a sua iniciativa de compartilhar com os amigos do forum esse script senssacional !!!
27/06/2006 9:21pm
(~19 anos atrás)
Aproveitando que você criou esse artigo super interessante você poderia também fazer alguns comentarios a respeito de segurança que envolve esse método, etc.
Até mais!
Até mais!
18/04/2006 8:30am
(~19 anos atrás)
Meu velho, estou tendo problemas com esse código, não funciona comigo, aparece isso pra mim!
conectou com: Resource id #1
conexão: 220 mail1.salvador.ba.gov.br ESMTP
loop: 250-mail1.salvador.ba.gov.br
loop: 250-PIPELINING
loop: 250-SIZE 10000000
loop: 250-DATAZ
loop: 250-STARTTLS
loop: 250-AUTH LOGIN PLAIN
loop: 250 8BITMIME
Fatal error: Maximum execution time of 30 seconds exceeded in c:\inetpub
Já mudei o tempo do timeout e nada.
O que tá errado?
Abraços!
Anderson
conectou com: Resource id #1
conexão: 220 mail1.salvador.ba.gov.br ESMTP
loop: 250-mail1.salvador.ba.gov.br
loop: 250-PIPELINING
loop: 250-SIZE 10000000
loop: 250-DATAZ
loop: 250-STARTTLS
loop: 250-AUTH LOGIN PLAIN
loop: 250 8BITMIME
Fatal error: Maximum execution time of 30 seconds exceeded in c:\inetpub
Já mudei o tempo do timeout e nada.
O que tá errado?
Abraços!
Anderson
24/03/2006 7:56am
(~19 anos atrás)
Olá, você esqueceu de publicar para a galera como que envia vários emails ao mesmo tempo em uma única conexão...
14/02/2006 1:55pm
(~19 anos atrás)
gostaria que me desse uma luz ai vai o código:
<?
// Instancia os objetos
//require_once $path_classes."PEAR/Mail.php";
//require_once $path_classes."PEAR/Mail/mime.php";
//$mailobj =& Mail::factory($config->mail_opt["driver"], $config->mail_opt);
//$o_sql = new SQL();
// Includes
include("./templates/header.php");
include($path_classes."admin/config/config_tabela.php");
include($path_classes."admin/config/config_form.php");
$o_form = new Form();
$o_form = config_frm( $o_form );
$o_form->descricao = "» Newsletter » Enviar";
$o_form->print_desc();
$o_sql = new SQL();
$o_geral = new Geral();
echo $o_form->frm_prefix;
// Envia emails
// ----------------------------------------
IF ($tipo=="testar")
{
// Pega o destinatário (email do user logado)
$tupla = $o_sql->select("SELECT distinct(usu_e_mail) FROM usuario WHERE usu_codigo='".$_SESSION["dados"]["usu_codigo"]."'");
}
ELSE
{
// Pega os destinatários
$in = "";
for ( $ind=0; $ind<sizeof($gru_cod); $ind++)
{
$in .= $gru_cod[$ind];
IF ($ind<sizeof($gru_cod)-1)
$in .= ",";
}
if ($reman==1)
$and = " AND usu_enviad='0'";
if ($filtro!="")
{
$o_sql->execSql("update usuario set usu_enviad = '0' WHERE gru_codigo IN ($in) ".$filtro);
$tupla = $o_sql->select("SELECT distinct(usu_e_mail)
FROM usuario
WHERE gru_codigo IN ($in) "
.$filto.$and );
}
else
{
$o_sql->execSql("update usuario set usu_enviad = '0' WHERE gru_codigo IN ($in) AND usu_newsle='1'");
$tupla = $o_sql->select("SELECT distinct(usu_e_mail)
FROM usuario
WHERE gru_codigo IN ($in)
AND usu_newsle='1' ".$and );
}
}
if ($assunto=="")
{
list($ntx_codigo) = $_GET['ntx_codigo'];
// Pega o assunto da mensagem
$tupla2 = $o_sql->select("SELECT new_descri FROM newsletter WHERE new_codigo=$new_codigo");
$assunto = $tupla2[0]["new_descri"];
//echo "SELECT ntx_conteu FROM news_texto WHERE ntx_codigo=$ntx_codigo";
$vet = $o_sql->select("SELECT ntx_conteu FROM news_texto WHERE ntx_codigo='$ntx_codigo'");
$conteudo = $vet[0]["ntx_conteu"];
}
/*$mime =& new Mail_mime();
$mime->setHTMLBody($message);
$body = $mime->get();
*/$body = $message;
$headers = array();
//$headers['From'] = $config->nome_resp." <".$config->email_resp.">";
// $headers['To'] = "dud@bizplace.com.br";
$headers['Subject'] = $assunto;
$c1=0;
$sto=$msg="";
for ( $ind=0; $ind<sizeof($tupla); $ind++)
{
$sto.=$tupla[$ind]["usu_e_mail"];
if((sizeof($tupla)-1)>$ind) $sto.=",";
#if ($c1==$config->mail_fila_qtd)
$c1 = true;
if ($c1)
{
$to = $sto;
$tto = $to;
$bcc = "Bcc:".$tto;
// Envia Mensagem
#$retorno = $mailobj->send($to, $headers, $body);
echo "<pre>";
//print_r($bcc);
echo "</pre>";
#$eMail = mail("adler@bizplace.com.br,adlerdesigner@hotmail.com,","mensagem teste","MENSAGEM TESTE");
#if($eMail) { echo "enviado"; } else { echo "nao enviado"; }
#echo "headers:::::: <pre>";
#print_r($headers);
#echo "</pre>";
#$headers[MIME-Version] . $headers[Content-Type] .
#$headers[Content-Transfer-Encoding] . $headers[From] . $headers[Subject];
#echo "<br>";
$subject = $headers[Subject];
#echo "<br>";
$from = "Goedert <goedert@bizplace.com.br>";
#echo "<br>";
// Cabeçalhos que definem o e-mail como sendo em formato HTML
$cabeca = "MIME-Version: 1.0\n";
$cabeca .= "Content-type: text/html; charset=iso-8859-1\n";
#$cabeca .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$cabeca .= "From: ".$from."\n";
$cabeca .= "Return-Path: Goedert <goedert@bizplace.com.br>\n";
#$cabeca .= "Bcc: ".$tto."\n";
#$cabeca .= "To: <$tto>\n";
#$headers = "From: ".$email."\r\n" .
#"MIME-Version: 1.0\r\n" .
#"Content-Type: text/html; charset=windows-1252\r\n" .
#"Content-Transfer-Encoding: 8bit\r\n\r\n";
$corpo = $conteudo;
$corpo .= "<center><a href='http://goedert.bizwork.com.br/news_cancelar.php?email={$tupla[$ind]['usu_e_mail']}'><img src='http://goedert.bizwork.com.br/imagens/b_cancelar.jpg' border=0></a></center>";
//echo $corpo;
//$retorno = mail("adler@bizplace.com.br,adlerdesigner@hotmail.com,adlerdesigner@gmail.com", "TESTE", $corpo, $cabeca); // retorna todos os emails
//echo $o_geral->alert();
$retorno = mail($tto, $subject, $corpo, $cabeca);
//$retorno = mail($emails, $subject, $corpo, $cabeca);
//$retorno = $mailobj->send($tto, $headers, $body);
//$retorno = TRUE;
IF ($retorno!==TRUE)
{
$msg = "<div align='left' valign='top' class='{$o_form->desc_class}'>Erro ao enviar e-mail!<br></div><br><br>";
break;
}
$c1 = 0;
$sto="";
}
$o_sql->execSql("update usuario set usu_enviad = '1' where usu_e_mail = '".$tupla[$ind]["usu_e_mail"]."'");
$c1++;
}
if ($sto<>"")
{
// Envia Mensagem
$sto.=$tupla[$ind]["usu_e_mail"].",";
if ($c1==$config->mail_fila_qtd)
{
$to = $sto;
$tto = $to;
$bcc = "Bcc:".$tto;
// Envia Mensagem
$subject = $headers[Subject];
$from = "Goedert <goedert@bizplace.com.br>";
// Cabeçalhos que definem o e-mail como sendo em formato HTML
$cabeca = "MIME-Version: 1.0\n";
$cabeca .= "Content-type: text/html; charset=iso-8859-1\n";
#$cabeca .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$cabeca .= "From: ".$from."\n";
$cabeca .= "Return-Path: Goedert <goedert@bizplace.com.br>\n";
//$cabeca .= "Bcc: ".$tto."\n";
#$cabeca .= "To: <$tto>\n";
#$headers = "From: ".$email."\r\n" .
#"MIME-Version: 1.0\r\n" .
#"Content-Type: text/html; charset=windows-1252\r\n" .
#"Content-Transfer-Encoding: 8bit\r\n\r\n";
$corpo = $conteudo;
$corpo .= "<center><a href='http://goedert.bizwork.com.br/news_cancelar.php?email={$tupla[$ind]['usu_e_mail']}'><img src='http://goedert.bizwork.com.br/imagens/b_cancelar.jpg' border=0></a> </center>";
//echo $to;
$retorno = mail($to, $subject, $corpo, $cabeca);
//echo $cabeca;
//$retorno = TRUE;
IF ($retorno!==TRUE)
{
$msg = "<div align='left' valign='top' class='{$o_form->desc_class}'>Erro ao enviar e-mail!<br></div><br><br>";
break;
}
$c1 = 0;
$sto="";
}
$o_sql->execSql("update usuario set usu_enviad = '1' where usu_e_mail = '".$tupla[$ind]["usu_e_mail"]."'");
$c1++;
}
// Mensagem de OK...
IF ( $msg!=="" )
$ind = $ind-$config->mail_fila_qtd;
// Mensagem de OK...
echo "<div align='left' valign='top' class='{$o_form->desc_class}'> {$ind} Mensagens Enviadas </div><br><br>";
IF ( $msg!=="" )
echo $msg;
echo "<a href='news_enviar.php' class='titulo4'«>« Voltar</a>";
echo $o_form->frm_sufix;
include("./templates/footer.php");
?>