Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, este é um codigo para envio de newsletter, para isso vcs irão precisar de um componente de email, eu usei o CDOSYS, mas eh soh mudar....
<% '****************************************************************************************************************************************************************************************** ' Por: Thiago Ananias N. Silva ' Data: 23/06/06 ' Código: Envio de newsletter ' ' Bom pessoal, este é um código para envio de newsletter, deu um bom trabalho, espero que gostem da minha contribuição com o fórum ' é claro que podem ser feitas outras coisas a +, como documentar o newsletter enviado, gravar usuario, etc... mas isso fica a ' critério de vcs ! ' ' Este codigo depende de um formulario que esta dentro de um IFRAME, e este codigo tem de estar em um IFRAME tambem ' funciona assim: O formulario submete para o codigo com o assunto, o texto do editor, o numero da pagina(hidden com valor inicial de 1) e um contador(hidden com valor inicial de 1) ' e depois o codigo escreve um INNERHTML na coluna "td_status" com 2 campos texto para ver o status do mailing... depois que ele manda um pacote ' ele espera 5 segundos(para naum dar o maldito TimeOut) e manda o formulario submeter dnovo, sendo q via javascript eu incremento os Hiddens contador e pagina. ' Bom eh isso, bom proveito '***************************************************************************************************************************************************************************************** Response.Buffer = FALSE Server.ScriptTimeout = 99999 vc_assunto = (trim(Request("vc_assunto"))) tx_editor = (trim(Request("tx_editor"))) pagina = int(request("pagina")) contador = int(request("contador")) if pagina = 1 then contador = 0%> <script> parent.formulario.document.getElementById("td_status").innerHTML = '<input type="text" name="it_enviados" value="0" size="5"> emails enviados de <input type="text" name="it_total" value="0" size="5">' </script><% end if sql = " SELECT " sql = sql & " email " sql = sql & " FROM " sql = sql & " tb_cliente " sql = sql & " WHERE id_visitante > 0 " SET RS = server.CreateObject("ADODB.Recordset") RS.Open sql, conn, 3 it_total = RS.RecordCount RS.PageSize = 100 ' Aki é definido o tamanho do pacote que será enviado RS.absolutepage = pagina if pagina = 1 then%> <script> parent.formulario.document.getElementById("it_total").value = <%=it_total%>; </script><% end if i = 0 do while NOT RS.EOF AND i < RS.PageSize set objCDOSYSMail = Server.CreateObject ("CDO.Message") set objCDOSYSCon = Server.CreateObject ("CDO.Configuration") Set objCDOSYSMail.Configuration = objCDOSYSCon With objCDOSYSCon .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "servidor" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 50000 .Fields.update End With With objCDOSYSMail .From = "seuemail" .To = rs("email") .Subject = vc_assunto .HtmlBody = tx_editor .Send End With set objCDOSYSMail = nothing set objCDOSYSCon = nothing %> <script> parent.formulario.document.getElementById("it_enviados").value = '<%=i + contador%>'; </script><% i = i + 1 RS.MoveNext loop %> <script> parent.formulario.document.getElementById("pagina").value = Number(parent.formulario.document.getElementById("pagina").value) + Number(1); parent.formulario.document.getElementById("contador").value = Number(parent.formulario.document.getElementById("contador").value) + Number(<%=i%>); </script><% if RS.PageCount >= pagina then%> <script> setTimeout('parent.formulario.document.frm.submit()',5000); // De 5 em 5 segundos ele vai mandar o formulario </script><% else%> <script> alert('Mailing enviado com sucesso!'); </script><% end if%> :thumbsup: Bom proveitoOpa... valeu pela resposta.Agora, e se por algum contratempo, durante o envio a conexão ou o servidor cair, não saberemos até quantos ou quais e-mails foram enviados, para fazer um novo envio sem duplicidade...Acho q o problema se resolve com uma flagzinha né?
opa, você irá saber qts emails foram enviados sim !!!!!
repare que a cada email enviado há um javascript para atualizar o campo de emails enviados... e se por acaso o servidor cair, eh soh dar um reload no IFRAME do codigo que ele continuará normalmente do pacote que parou !
/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/smile.gif&key=15294d64c22e9e9c4ae0bf82a62ec27d13f27d6ba7078a5f7982077798029364" alt="Imagem Postada" />
Olá pessoal, estou aqui novamente para esclarecer uma duvida de um membro do forum, foi o "Bruno Bim" que me questionou o seguinte sobre o envio de newsletter:
eu nao entendo muito de javascript, fiquei um poko perdido na parte que você usa os "parent.formulario.document.getElementById("td_status"), esses campos que vem depois do parenteses teriam que estar no banco ?
Então Bruno, se você perceber na parte do codigo, se a pagina for a 1º o interpretador faz o seguinte if pagina = 1 then contador = 0%> <script> parent.formulario.document.getElementById("td_status").innerHTML = '<input type="text" name="it_enviados" value="0" size="5"> emails enviados de <input type="text" name="it_total" value="0" size="5">' </script><% end ifeste parent quer dizer "pai", o codigo esta em um IFrame, entaum ele foca a pagina pai do IFrame, e depois foca no IFrame do formulario, e dentro do IFrame formulario, ele pega uma <td> com id "td_status", e joga um INNERHTML, ele joga um campo text que servirá de contador para as mensagens enviadas.e depois a cada final de envio de um pacote ele atualiza os dados com esta parte: <script> parent.formulario.document.getElementById("pagina").value = Number(parent.formulario.document.getElementById("pagina").value) + Number(1); parent.formulario.document.getElementById("contador").value = Number(parent.formulario.document.getElementById("contador").value) + Number(<%=i%>); </script>Eh isso cara, espero que tenha entendido... :thumbsup:
Pessoal, venho pedir aqui para as pesoas que tiverem duvidas naum me mandarem MPs e sim perguntar aki, ateh pq as suas duvidas podem ser as dos outros !!!Obrigado pela compreensão !
Cara,Criei um form com os dois campos vc_assunto e tx_editor, criei o banco de dados e fiz a conexao normal e funcionou, mas o código parou de ler na linha onde tem:RS.absolutepage = paginaErro:Tipo de erro:ADODB.Recordset (0x800A0BB9)Os argumentos são incorretos, estão fora do intervalo aceitável ou estão em conflito.
Bom, este erro eh de paginacao, você colocou um campo Hidden de paginacao no seu form ?
Quais são os campos que devo ter no BD?Tabela tb_clientecod - autonumeraçãoemail - textotd_status- texto (deixar os campos vazios)id_visitante - texto (deixei todos com o número 1)Está certo? Ou tem algo errado? Porque testei aqui e está dando erro...Microsoft JET Database Engine error '80040e07' Data type mismatch in criteria expression. Esta parte está correta?Está dando erro nela...conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\home\fmc1\dados\teste_newsletter.mdb" sql = "SELECT " sql = sql & " email " sql = sql & " FROM " sql = sql & " tb_cliente " sql = sql & " WHERE id_visitante > 0 " SET RS = server.CreateObject("ADODB.Recordset") RS.Open sql, conn, 3Valeu..Gabriel
em ql linha eatamente esta dando erro ???mostre ela
Primeiro gostaria de saber se os compos do BD estão corretos... são só esses mesmo? Tabela tb_clientecod - autonumeraçãoemail - textotd_status- texto (deixar os campos vazios)id_visitante - texto (deixei todos com o número 1)Ou tenho de mudar algo?Esse erro:Microsoft JET Database Engine error '80040e07' Data type mismatch in criteria expression. /gabriel/teste.asp, line 31 Está dando nesta linha:RS.Open sql, conn, 3Os dados do formulario estão assim:<form action="teste.asp" method="post"><p> <br> <br> <textarea rows="5" name="tx_editor" cols="20">dsadasddadas</textarea><br> <br> <input type="hidden" name="pagina" size="20" value="1"> <input type="hidden" name="contador" size="20" value="1"> <input type="submit" value="Submeter" name="B1"><input type="reset" value="Redefinir" name="B2"></p></form>Além de estar dentro de um iframe na index.htmO que fazer para corrigir este erro? Existe algum erro no formulário também?
cara, pra fazer este script funcionar soh precisa do campo email !!!e o form dentro de um IFrame e o codigo tb !!!
Ok.. então no bd eu tenho de ter somente o campo email dentro da tabela tb_cliente ?E o resto dentro de um iframe... está certo?
você pode ter qts campos quiser, mas para este codigo soh eh necessario o campo email.e os IFrames sao separados, um iframe para o codigo e outro iframe para o Form !!!
beleza... arrumei... agora estou tendo problemas com a conexão do banco...ConexaoEx = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=e:\home\fmc1\dados\teste_newsletter.mdb"Set Conexao = Server.CreateObject("ADODB.Connection")Conexao.Open ConexaoEx sql = " SELECT " sql = sql & " email " sql = sql & " FROM " sql = sql & " tb_cliente " sql = sql & " WHERE id_visitante > 0 " Set RS = Server.CreateObject("ADODB.RecordSet") RS.Open sql, Conexao, 3, 3Esta dando erro na linha 35 que é esta: RS.Open sql, Conexao, 3, 3Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. /gabriel/teste.asp, line 35 Como solucionar isto?
você tem o campo "id_visitante" ? naum eh cod - autonumeracao... você disse isso lah em cima!
Ta meio confuso essa newsletter..você diz:
Este codigo depende de um formulario que esta dentro de um IFRAME, e este codigo tem de estar em um IFRAME tambem ' funciona assim: O formulario submete para o codigo com o assunto, o texto do editor, o numero da pagina(hidden com valor inicial de 1) e um contador(hidden com valor inicial de 1) ' e depois o codigo escreve um INNERHTML na coluna "td_status" com 2 campos texto para ver o status do mailing... depois que ele manda um pacote ' ele espera 5 segundos(para naum dar o maldito TimeOut) e manda o formulario submeter dnovo, sendo q via javascript eu incremento os Hiddens contador e pagina. ' Bom eh isso, bom proveito
A pagina dos formularios (assunto e texto) tem que estar dentro de um iframe?A pagina dos forms é isso?...<body><iframe><form id="formulario" name="formulario" action="teste2.asp"><input name="vc_assunto" type="text" /><textarea name="tx_editor" cols="" rows=""></textarea><input name="pagina" type="hidden" value="1" /><input name="contador" type="hidden" value="1" /></form></iframe></body>...O seu codigo tb precisa estar dentro de um iframe?Seria assim?<iframe>Seu codigo aqui..</iframe>Pq se for, nao ta funcionando.. qual a finalidade de colocar td dentro de iframe?
Ôh códigozinho complicado,Bom, já que isso é um fórum de discursão, vamos lá:Estou querendo fazer isso funcionar mais com CDONTS. Alguém pode ajudar.Apenas conheço o envio simples de email (um por vez).Tenho dúvidas:Como é disparado esse script?Onde fica o código HTML a ser enviado?Para melhorar mais o código como se pode usar o tal Flag?Valeu :joia:
estou com a mesma duvida do Noodlesobre o formulariooo ajuda ae Ratu....
EAEEE, desculpe, eh pq estou atarefado este dias... mas entaumeh o seguinte tem esta estruturaPAGINAMAE.asp--------------------------------------____________IFRAME codigocodigo.asp_____________________________IFRAME formularioformulario.asp_______________--------------------------------------Resumindo, tem uma pagina mae, e dentro dela tem 2 iframes, um com "name" codigo e outra formularioentenderam agora, por isso eu uso o javascript, para "mexer"o conteudo de um iframe para outro !!
To aqui só para dar os parabéns para o Ratu, muito bom o sistema, testei aqui e funcionou beleza e estou mandando 44000 emails /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/tongue.gif&key=8d11c3c7c03c7a5a294e250694d100848a0423dc34ef2af8d774f49d1b969fde" alt="Imagem Postada" />
Vamos ver /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/tongue.gif&key=8d11c3c7c03c7a5a294e250694d100848a0423dc34ef2af8d774f49d1b969fde" alt="Imagem Postada" />
Só uma dúvida que lembrei agora, se eu quiser parar e continuar no outro dia, posso setar no contador (formulario) o número que parei e dar continuidade aos envios ?
Por exemplo, estou enviando mas vou tr que reiniciar o PC, estou no 4000, reinicio, quando for mandar, seto como 4000 o contador do Hidden e vai beleza ?
Abraços e valeu /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/biggrin.gif&key=cb0fdb2382312b39ddcb15831fcae62157015f17d2417528782628663387e929" alt="Imagem Postada" />
OBS: Quando estiver com tempo vou ver se melhoro esse script mais ainda e posto aqui com outras funções /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/biggrin.gif&key=cb0fdb2382312b39ddcb15831fcae62157015f17d2417528782628663387e929" alt="Imagem Postada" />
que bom que você gostou cara ! vlw ! e qt a sua duvida, dah sim cara... normal ! você seta a pagina que você quiser e jah era !
>
PAGINAMAE.asp
--------------------------------------
____________
IFRAME codigo
codigo.asp
______________
_______________
IFRAME formulario
formulario.asp
_______________
entao este codigo que você passou tera que estar na pagina de formulario e tb na pagina de codigo???igualzinho??
/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/wink.gif&key=0566fd943552bcff9cb1b879403ca34b5ff8f67befaac7fe4648006e9f764689" alt="Imagem Postada" />
Entaum cara, eu passei o código ! naum passei o forumlario... mas isso eh sub-entendido, pelos requests que faço...bele !
No meu deu o seguinte erro:
ADODB.Recordset error '800a0cb3' Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype. /admin/malafestas1.asp, line 38
Linha 38 é:
RS.absolutepage = pagina
O que pode ser?
Tem como enviar um arquivo swf no email ?Quando a pessoa abrir o email o swf começar a rolar ?Obrigado
Bom estou aki para esclarecer uma dúvida do nosso amigo "akagi", respondo aki pois isso pode ser uma dúvida de todosele perguntou o seguinte:--Não entendi uma coisa no seu script de Envio de Newsletter: e se a página recarregar (os 5 segundos no caso), antes de ele enviar todo o pacote (no caso, os 100 e-mails)???--ele soh vai chegar na parte de recarregar a pagina(ou seja no timeout) depois do LOOP que envia os email, entaum este problema naum ocorre, OK?!flw