Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sheridan

problemas com paginação de e-mail

Recommended Posts

olá galera, eu peguei aqui no fórum um código pra pag de e-mails e tentei aplicar em uma ferramenta que estou desenvolvendo, mas está dando erro. alguém poderia me dar um help???valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diga qual seu erro e poste a parte que está com problemas!

Nós te ajudamos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

a pg que faz o envio é esta<!--#include file="inc_nocache.asp" --><!--#include file="scripts/connect.asp" --><html><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript" type="text/JavaScript"><!--function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);//--></script><link href="style.css" rel="stylesheet" type="text/css"></head><%if session("logged") <> "sim" thenresponse.Redirect("erro.asp")end ifif session("nivel_acesso") <> "1" thenresponse.Redirect("erro.asp")end ifid_email = Request("id_email")Set RS = Server.CreateObject("ADODB.Recordset")strSql="SELECT co.id_contato, co.nome_contato, co.empresa,co.email, ve.nome_vendedor, ve.telefone, "&_"co.lista_email, co.status_email, em.assunto, em.mensagem, em.email_pers FROM vendedores ve RIGHT JOIN (email em RIGHT JOIN "&_"contatos co ON em.id_email = co.lista_email) ON ve.id_vendedor = co.vendedor WHERE co.lista_email = "&id_email&" and co.status_email = 'PENDENTE'"RS.Open strSql, CN,1nome = RS("nome_contato")email = RS("email")email_pers = RS("email_pers")assunto = RS("assunto")vendedor = RS("nome_vendedor")telefone = RS("telefone")NomeEnv = "Depto Comercial - Climafrio"EmailEnv = "comercial@techdesigners.com.br"%><%'O Código a Seguir Utiliza Conceitos Idealizados por Allan José Barros - (Programador WEB) retirados do Fórum Imasters'variavel de pag do e-mailpag = 1 'per = request.form("per") reg = 100 ' reg é o nuemro de e-mails que ele irá enviar por bloco. 'endereço do e-mail htmlSet Objeto = CreateObject ("Scripting.FileSystemObject") set GV = Objeto.OpenTextFile("e:\techdesigners\webpages\admin_contatos\html\mailing.asp",1,true,false) GV.close Set Objeto = nothing lista = Replace(lista," ","") ' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 'Isto é para podermos personalizar os e-mails HTML = HTML HTML = HTML2HTML = replace(HTML,"#nome#",nome_contato) HTML = replace(HTML,"#Empresa#",empresa)HTML = replace(HTML,"#nome_vendedor#",nome_vendedor) HTML = replace(HTML,"#telefone#",telefone) response.write HTML ' Aqui eu pego quantos e-mails seram enviados Set rsCount = Server.CreateObject("ADODB.Recordset")sqlCont = "Select Count(id_contato) as Cont From contatos where lista_email = "&id_email&"" Set rsCont = CN.execute(sqlCont) NumReg = rsCont("Cont") ' Aqui iremos determinas qual é o numero maximo de blocos Maxpag = int(Cint(NumReg)/ Cint(reg))+1 Set rsCont = nothing 'Testamos se irá ter somente um bloco, se sim iremos enviar todos os e-mails de uma vez if Cint(NumReg) <= Cint(reg) then contador = 0 contador2 = 1 per = 1 per2 = 1 %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% while not RS.eof per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per %> <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script> <% end if %> <%Dim myMail Set myMail = CreateObject("CDONTS.NewMail") myMail.From = EmailEnvmyMail.To = email myMail.Subject = assunto myMail.BodyFormat = 0 myMail.MailFormat = 0 myMail.Body = HTML myMail.Send contador = contador +1 contador2 = Cint(contador2) +1 Set myMail = Nothing strSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql) 'end if rs.MoveNext wend fim = true strSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) 'RS2.Close'RS3.Closeelse %><%' se tivermos mais de um bloco iremos ter que fazer a paginação contador = ((Cint(pag) -1) * Cint(reg)) + 0 contador2 = ((Cint(pag) -1) * Cint(reg)) + 1 //per = 1 //per2 = 1 'aqui testamos se é primeira vez que executamos a página, se sim iremos abrir a pag de porcentagem if Cint(pag) = 1 then %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% end if %> <% ' Aqui testamos se é a primeira vez que executamos a página, se não for nos iremos ter que passar para os próximos 400 registros da tabela NumReg2 = Cint(reg) * (Cint(pag)-1) If NumReg2 > 0 then For LinkTemp = 1 to NumReg2 if RS.Eof = False then RS.MoveNext end if Next end if regatual = 1 ' aqui fazemos o loop da tabela de e-mails while not RS.eof and regatual <= Cint(reg) ' per é uma variavel que ´rá ser envia para a página de porcentagem para mmostrar o andamento do envio per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per ' este script atualiza a pagina de porcentagem sempre que novos e-mails são enviados %> <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script> <% end if %> <% ' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 'Isto é para podermos personalizar os e-mails HTML = HTML2HTML = replace(HTML,"#nome#",nome_contato) HTML = replace(HTML,"#Empresa#",empresa)HTML = replace(HTML,"#nome_vendedor#",nome_vendedor) HTML = replace(HTML,"#telefone#",telefone) response.write HTML Dim myMail2 Set myMail2 = CreateObject("CDONTS.NewMail") myMail2.From = EmailEnvmyMail2.To = emailmyMail2.Subject = assuntomyMail2.BodyFormat = 0 myMail2.MailFormat = 0 myMail2.Body = HTML myMail2.Send regatual = regatual + 1 contador = Cint(contador) +1 contador2 = Cint(contador2) +1 Set myMail2 = Nothing ' Aqui atualizamos as tabelasstrSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql) 'end if rs.MoveNext wend fim = true strSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) end if 'Testamos se é o ultimo loop, se sim iremos mostrar direto quantos e-mails foi enviado if (Cint(pag) >= Cint(Maxpag)) then fim = true else ' Se naõ iremos fazer fim = falso para passarmos para o próximo bloco de e-mails após um tempo fim = false pag = Cint(pag) + 1 end if 'end if ' Aqui testamos se chegou ao fim ou n~~ao, se não chegou ainda 'iremos fazer um formulário com todos os dados que teremos que ter ' iremos fazer um script para enviar este formulário novamente após um tempo if fim = false then %> <HTML> <HEAD> <Title></Title> <script> function Envia() { document.form.submit(); } setTimeout("Envia();",120000); </script> </HEAD> <BODY> <form name="form" method="post" action="adm_mail_envio.html.asp"> <input type="hidden" name="assunto" value="<%=assunto%>"> <input type="hidden" name="empresa" value="<%=empresa%>"> <input type="hidden" name="pag" value="<%=pag%>"> <input type="hidden" name="per" value="<%=per%>"> </form> </BODY> </HTML> <% end if%>os erros são os seguintes :- quando eu simulo o envio de uma lista com mais de 100emails (ai então ele paginaria) aparece a seguinte mensagemThe maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools. ele não chega a atualizar a tb email, mudando o seu status para ENVIADOstrSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) - quando eu simulo o envio de uma lista com menos de 100 emails(sem paginação) ele atualiza as inf no bd corretamente, mas um erro ocorre qdo ele abre a tela do contador.(A RUNTIME ERRO HAS OCCURED). ele abre um poup up para cada registro que existe na listaeu adaptei este código de um post do Allan José Barros, a diferença é que ele monta a lista na hora do envio e no meu caso a lista já está montada, é só montar o recordset, paginar e enviar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No 1º caso aumente o scriptTimeout

No 2º caso note aqui:

<%

while not RS.eof

per = (100 * Cint(contador2))/Cint(NumReg) + 1

 

if Int(per) > Int(per2) then

per2 = per%>

 

<script>window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes');</script>

 

<%end if%>

<%

Dim myMail

Set myMail = CreateObject("CDONTS.NewMail")

myMail.From = EmailEnv

myMail.To = email

myMail.Subject = assunto

myMail.BodyFormat = 0

myMail.MailFormat = 0

myMail.Body = HTML

8myMail.Send

contador = contador +1

contador2 = Cint(contador2) +1

Set myMail = Nothing

 

strSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""

Set RS2 = CN.execute(strSql)

'end if

rs.MoveNext

wend

Que seu <script> para mostrar a tela está abraçada pelo While/Wend, então a cada email ele espera a confirmação, coloque esse <script> antes do While, por exemplo:
<script>window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes');</script>

 

<%while not RS.eof

per = (100 * Cint(contador2))/Cint(NumReg) + 1

 

if Int(per) > Int(per2) then

per2 = per

end if%>

 

<%Dim myMail

Set myMail = CreateObject("CDONTS.NewMail")

myMail.From = EmailEnv

myMail.To = email

myMail.Subject = assunto

myMail.BodyFormat = 0

myMail.MailFormat = 0

myMail.Body = HTML

myMail.Send

contador = contador +1

contador2 = Cint(contador2) +1

Set myMail = Nothing

 

strSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""

Set RS2 = CN.execute(strSql)

'end if

rs.MoveNext

wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu aumentei o scriptTimeout (pra 10.000)e funcionou(em relação a lista com paginação). mas eu acho que deve ter algum problema com a pesquisa no bd, pois não deveria demorar tanto assim.o erro no poup-up do contador ainda ocorre.o código ficou assum agora<!--#include file="inc_nocache.asp" --><!--#include file="scripts/connect.asp" --><html><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript" type="text/JavaScript"><!--function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);//--></script><link href="style.css" rel="stylesheet" type="text/css"></head><%if session("logged") <> "sim" thenresponse.Redirect("erro.asp")end ifif session("nivel_acesso") <> "1" thenresponse.Redirect("erro.asp")end ifid_email = Request("id_email")Set RS = Server.CreateObject("ADODB.Recordset")strSql="SELECT co.id_contato, co.nome_contato, co.empresa,co.email, ve.nome_vendedor, ve.telefone, "&_"co.lista_email, co.status_email, em.assunto, em.mensagem, em.email_pers FROM vendedores ve RIGHT JOIN (email em RIGHT JOIN "&_"contatos co ON em.id_email = co.lista_email) ON ve.id_vendedor = co.vendedor WHERE co.lista_email = "&id_email&" and co.status_email = 'PENDENTE'"RS.Open strSql, CN,1nome = RS("nome_contato")email = RS("email")email_pers = RS("email_pers")assunto = RS("assunto")vendedor = RS("nome_vendedor")telefone = RS("telefone")NomeEnv = "Depto Comercial - Climafrio"EmailEnv = "comercial@techdesigners.com.br"%><%'O Código a Seguir Utiliza Conceitos Idealizados por Allan José Barros - (Programador WEB) retirados do Fórum Imasters'variavel de pag do e-mailpag = 1 'per = request.form("per") reg = 100 ' reg é o nuemro de e-mails que ele irá enviar por bloco. 'endereço do e-mail htmlSet Objeto = CreateObject ("Scripting.FileSystemObject") set GV = Objeto.OpenTextFile("e:\techdesigners\webpages\admin_contatos\html\mailing.asp",1,true,false) GV.close Set Objeto = nothing lista = Replace(lista," ","") ' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 'Isto é para podermos personalizar os e-mails HTML = HTML HTML = HTML2HTML = replace(HTML,"#nome#",nome_contato) HTML = replace(HTML,"#Empresa#",empresa)HTML = replace(HTML,"#nome_vendedor#",nome_vendedor) HTML = replace(HTML,"#telefone#",telefone) response.write HTML ' Aqui eu pego quantos e-mails seram enviados Set rsCount = Server.CreateObject("ADODB.Recordset")sqlCont = "Select Count(id_contato) as Cont From contatos where lista_email = "&id_email&"" Set rsCont = CN.execute(sqlCont) NumReg = rsCont("Cont") ' Aqui iremos determinas qual é o numero maximo de blocos Maxpag = int(Cint(NumReg)/ Cint(reg))+1 Set rsCont = nothing 'Testamos se irá ter somente um bloco, se sim iremos enviar todos os e-mails de uma vez if Cint(NumReg) <= Cint(reg) then contador = 0 contador2 = 1 per = 1 per2 = 1 %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% while not RS.eof per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per %> <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script> <% end if %> <%Dim myMail Set myMail = CreateObject("CDONTS.NewMail") myMail.From = EmailEnvmyMail.To = email myMail.Subject = assunto myMail.BodyFormat = 0 myMail.MailFormat = 0 myMail.Body = HTML myMail.Send contador = contador +1 contador2 = Cint(contador2) +1 Set myMail = Nothing strSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql) 'end if rs.MoveNext wend fim = true strSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) 'RS2.Close'RS3.Closeelse %><%' se tivermos mais de um bloco iremos ter que fazer a paginação contador = ((Cint(pag) -1) * Cint(reg)) + 0 contador2 = ((Cint(pag) -1) * Cint(reg)) + 1 //per = 1 //per2 = 1 'aqui testamos se é primeira vez que executamos a página, se sim iremos abrir a pag de porcentagem if Cint(pag) = 1 then %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% end if %> <% ' Aqui testamos se é a primeira vez que executamos a página, se não for nos iremos ter que passar para os próximos 400 registros da tabela NumReg2 = Cint(reg) * (Cint(pag)-1) If NumReg2 > 0 then For LinkTemp = 1 to NumReg2 if RS.Eof = False then RS.MoveNext end if Next end if regatual = 1 ' aqui fazemos o loop da tabela de e-mails while not RS.eof and regatual <= Cint(reg) ' per é uma variavel que ´rá ser envia para a página de porcentagem para mmostrar o andamento do envio per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per ' este script atualiza a pagina de porcentagem sempre que novos e-mails são enviados %> <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script><% end if %> <% ' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 'Isto é para podermos personalizar os e-mails HTML = HTML2HTML = replace(HTML,"#nome#",nome_contato) HTML = replace(HTML,"#Empresa#",empresa)HTML = replace(HTML,"#nome_vendedor#",nome_vendedor) HTML = replace(HTML,"#telefone#",telefone) response.write HTML Dim myMail2 Set myMail2 = CreateObject("CDONTS.NewMail") myMail2.From = EmailEnvmyMail2.To = emailmyMail2.Subject = assuntomyMail2.BodyFormat = 0 myMail2.MailFormat = 0 myMail2.Body = HTML myMail2.Send regatual = regatual + 1 contador = Cint(contador) +1 contador2 = Cint(contador2) +1 Set myMail2 = Nothing ' Aqui atualizamos as tabelasstrSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql) 'end if rs.MoveNext wend fim = true strSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) end if 'Testamos se é o ultimo loop, se sim iremos mostrar direto quantos e-mails foi enviado if (Cint(pag) >= Cint(Maxpag)) then fim = true else ' Se naõ iremos fazer fim = falso para passarmos para o próximo bloco de e-mails após um tempo fim = false pag = Cint(pag) + 1 end if 'end if ' Aqui testamos se chegou ao fim ou n~~ao, se não chegou ainda 'iremos fazer um formulário com todos os dados que teremos que ter ' iremos fazer um script para enviar este formulário novamente após um tempo if fim = false then %> <HTML> <HEAD> <Title></Title> <script> function Envia() { document.form.submit(); } setTimeout("Envia();",120000); </script> </HEAD> <BODY> <form name="form" method="post" action="adm_mail_envio.html.asp"> <input type="hidden" name="assunto" value="<%=assunto%>"> <input type="hidden" name="empresa" value="<%=empresa%>"> <input type="hidden" name="pag" value="<%=pag%>"> <input type="hidden" name="per" value="<%=per%>"> </form> </BODY> </HTML> <% end if%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou postar o código original do allan, para comparação<!--#include file="conexao.asp"--> <% ******************************************* Feito por Allan José Barros * Programador Web * Todos os direitos reservados * ******************************************varNome = Session("Login") if varNome = "" then response.redirect("checerro.asp") end if dim conexao Call abre_conexao ' recupera as variáveis para enviar os e-mails 'Lembrando que antes de fazer o envio, eu fiz um formulário para a 'pessoa poder escolher por qual filtro ele quer filtrar os e-mails 'E também fiz com que ele pudesse escolher o arquivo a ser enviado 'Isso utilizando o Componente de Upload ASpUpload. assunto = request.form("assunto") validade = request.form("validade") empresa = request.form("empresa") arquivo = request.form("arquivo") str = request.form("str") sql = request.form("sql") ' Como a pausa é feita por paginação, pag é a variavel que vai dizer em qual loop está agora pag = request.form("pag") if pag = "" then pag = 1 end if per = request.form("per") CodigoCampanha = request.form("CodigoCampanha") ' reg é o nuemro de e-mails que ele irá enviar por bloco. reg = 400 'Isto le o arquivo no qual foi feito o Upload ' strpatha é um path fixo que eu tenho na pagina de include.(para facilitar o código) Set Objeto = CreateObject ("Scripting.FileSystemObject") set GV = Objeto.OpenTextFile(strpath &arquivo,1,true,false) HTML = GV.ReadAll GV.close Set Objeto = nothing lista = Replace(lista," ","") HTML = HTML HTML2 = HTML ' A var sql, contem a SQL para de acordo com o filçtro que a pessoa escolheu if sql <> "" then ' Aqui eu pego quantos e-mails seram enviados sqlCont = "Select Count(Email) as Cont From Emails where ("&str&") and (Ativo = true)" Set rsCont = conexao.execute(sqlCont) NumReg = rsCont("Cont") ' Aqui iremos determinas qual é o numero maximo de blocos Maxpag = int(Cint(NumReg)/ Cint(reg))+1 Set rsCont = nothing ' Testamos se irá ter somente um bloco, se sim iremos enviar todos os e-mails de uma vez if Cint(NumReg) <= Cint(reg) then Set rs = conexao.execute(sql) Set rsMax = Server.CreateObject("ADODB.Recordset") rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao If IsNull(rsMax("max_cod")) Then CodigoCampanha = 100 Else CodigoCampanha = rsMax("max_cod") + 1 End If rsMax.Close Set rsMax = Nothing validade = date + CInt(validade) sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" Set rsCampanha = conexao.execute(sqlCampanha) contador = 0 contador2 = 1 per = 1 per2 = 1 %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% while not rs.eof per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per %> <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script> <% end if %> <% HTML = HTML2 sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" Set rsTestEnv = conexao.execute(sqlTestEnv) if rsTestEnv.EOF then aux = rs("Fantasia") If InStr(aux, " ") > 0 Then aux = Left(aux, InStr(aux, " ")-1 ) End If Empresa = UCase(aux) HTML = replace(HTML,"#Nome#",rs("Nome")) HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) HTML = replace(HTML,"#Email#",rs("Email")) HTML = replace(HTML,"#Empresa#",Empresa) response.write HTML assunto2 = replace(assunto,"#Nome#",rs("Nome")) Dim myMail Set myMail = CreateObject("CDONTS.NewMail") myMail.From = "awd@awd.com.br" myMail.To = rs("Email") myMail.Subject = assunto2 myMail.BodyFormat = 0 myMail.MailFormat = 0 myMail.Body = HTML myMail.Send contador = contador +1 contador2 = Cint(contador2) +1 Set myMail = Nothing sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" Set rsEnviados = conexao.execute(sqlEnviados) end if rs.MoveNext wend fim = true else ' se tivermos mais de um bloco iremos ter que fazer a paginação Set rs = conexao.execute(sql) ' Aqui inserimos na tabela Campanha os dados da mesma, só inserimos uma vez. 'É por isso que tomos este if, pois a 1ª vez o Codigo será branco. if CodigoCampanha = "" then Set rsMax = Server.CreateObject("ADODB.Recordset") rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao If IsNull(rsMax("max_cod")) Then CodigoCampanha = 100 Else CodigoCampanha = rsMax("max_cod") + 1 End If rsMax.Close Set rsMax = Nothing validade = date + CInt(validade) sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" Set rsCampanha = conexao.execute(sqlCampanha) end if ' aqui contador é o que vale a quantidade de e-mails que esta sendo enviado e-mails ' contador 2 é um contador auxiliar para abrirmos uma pag de porcetagem do envio contador = ((Cint(pag) -1) * Cint(reg)) + 0 contador2 = ((Cint(pag) -1) * Cint(reg)) + 1 //per = 1 //per2 = 1 %> 'aqui testamos se é primeira vez que executamos a página, se sim iremos abrir a pag de porcentagem <% if Cint(pag) = 1 then %> <script language="JavaScript"> window.open('enviando.asp','enviando','width=350 height=200 status=yes'); </script> <% end if %> ' Aqui testamos se é a primeira vez que executamos a página, se não for nos iremos ter que passar para os próximos 400 registros da tabela <% NumReg2 = Cint(reg) * (Cint(pag)-1) If NumReg2 > 0 then For LinkTemp = 1 to NumReg2 if rs.Eof = False then rs.MoveNext end if Next end if regatual = 1 ' aqui fazemos o loop da tabela de e-mails while not rs.eof and regatual <= Cint(reg) ' per é uma variavel que ´rá ser envia para a página de porcentagem para mmostrar o andamento do envio per = (100 * Cint(contador2))/Cint(NumReg) + 1 if Int(per) > Int(per2) then per2 = per %> ' este script atualiza a pagina de porcentagem sempre que novos e-mails são enviados <script> window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); </script> <% end if %> <% ' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 'Isto é para podermos personalizar os e-mails HTML = HTML2 sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" Set rsTestEnv = conexao.execute(sqlTestEnv) if rsTestEnv.EOF then aux = rs("Fantasia") If InStr(aux, " ") > 0 Then aux = Left(aux, InStr(aux, " ")-1 ) End If Empresa = UCase(aux) HTML = replace(HTML,"#Nome#",rs("Nome")) HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) HTML = replace(HTML,"#Email#",rs("Email")) HTML = replace(HTML,"#Empresa#",Empresa) response.write HTML assunto2 = replace(assunto,"#Nome#",rs("Nome")) ' Aqui estamos enviando os e-mails em formato HTML Dim myMail2 Set myMail2 = CreateObject("CDONTS.NewMail") myMail2.From = "awd@awd.com.br" myMail2.To = rs("Email") myMail2.Subject = assunto2 myMail2.BodyFormat = 0 myMail2.MailFormat = 0 myMail2.Body = HTML myMail2.Send regatual = regatual + 1 contador = Cint(contador) +1 contador2 = Cint(contador2) +1 Set myMail2 = Nothing ' Aqui gravamos em outra tablela todos os e-mails que para onde foram enviados. Para relatórios sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" Set rsEnviados = conexao.execute(sqlEnviados) end if rs.MoveNext wend end if 'Testamos se é o ultimo loop, se sim iremos mostrar direto quantos e-mails foi enviado if (Cint(pag) >= Cint(Maxpag)) then fim = true else ' Se naõ iremos fazer fim = falso para passarmos para o próximo bloco de e-mails após um tempo fim = false pag = Cint(pag) + 1 end if end if %> <% ' Aqui testamos se chegou ao fim ou n~~ao, se não chegou ainda 'iremos fazer um formulário com todos os dados que teremos que ter ' iremos fazer um script para enviar este formulário novamente após um tempo if fim = false then %> <HTML> <HEAD> <Title></Title> <script> function Envia() { document.form.submit(); } setTimeout("Envia();",120000); </script> </HEAD> <BODY> <form name="form" method="post" action="camp3.asp"> <input type="hidden" name="sql" value="<%=sql%>"> <input type="hidden" name="assunto" value="<%=assunto%>"> <input type="hidden" name="arquivo" value="<%=arquivo%>"> <input type="hidden" name="empresa" value="<%=empresa%>"> <input type="hidden" name="str" value="<%=str%>"> <input type="hidden" name="pag" value="<%=pag%>"> <input type="hidden" name="codigocampanha" value="<%=CodigoCampanha%>"> <input type="hidden" name="per" value="<%=per%>"> </form> </BODY> </HTML> <% else ' Se chegou ao fim iremos mostrar a quantidade de e-mails que foi gerada %> <html> <head> <title>AWD-Projetos E-business Alavancando Negócios</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>CONFIRMAÇÃO DO CADASTRO DE CAMPANHA</b></font></div> </td> </tr> <tr> <td> </td> </tr> <tr> <td> </td> </tr> <tr> <td> <table width="70%" border="0" cellspacing="0" cellpadding="0" align="center"> <% if Cint(contador) > 0 then sqlEmp = "Select * From Empresas where CodigoEmpresa = "&empresa&"" Set rsEmp = conexao.execute(sqlEmp) msgBody = "<HTML>" & vbcrlf msgBody = msgBody & "<body>" & vbcrlf msgBody = msgBody & "Olá " & rsEmp("Nome") &",<br><br>" & vbcrlf msgBody = msgBody & "A campanha com assunto : " & assunto &"<br>" & vbcrlf msgBody = msgBody & "Foi disparada para "&contador&" email(s) de sua lista de e-mails.<br><br>" & vbcrlf msgBody = msgBody & "Verifique logo abaixo o corpo do e-mail que foi disparado: <br><br> " & vbcrlf msgBody = msgBody & HTML2 & vbcrlf msgBody = msgBody & "</body>" & vbcrlf msgBody = msgBody & "</HTML>" & vbcrlf 'response.write msgBody Dim myMail3 Set myMail3 = CreateObject("CDONTS.NewMail") myMail3.From = "awd@awd.com.br" myMail3.To = "allanjbo@awd.com.br" 'rsEmp("Email") myMail3.Subject = "Comprovande do envio da campanha de Web Marketing: """ & assunto &"""" myMail3.BodyFormat = 0 myMail3.MailFormat = 0 myMail3.Body = HTML2 myMail3.Send Set myMail3 = Nothing %> <tr> <td> <table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> <tr> <td bgcolor="#DDFFEE"> <div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> <br> Campanha enviada com sucesso para<br> <%=Contador & " "%> emil(s).<br> <br> </font></div> </td> </tr> </table> </td> </tr> <% else %> <tr> <td> <table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> <tr> <td bgcolor="#DDFFEE"> <div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> </font><font size="4"><font face="Verdana, Arial, Helvetica, sans-serif"><br> <font size="3">HÁ ALGUM CAMPO OBRIGATÓRI EM BRANCO<br> POR FAVOR REALIZE A OPERAÇÃO<br> NOVAMENTE!! </font></font></font><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> <br> </font></div> </td> </tr> </table> </td> </tr> <% end if %> </table> </td> </tr> </table> <br> <br> <table width="94%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="50%" height="13"> <div align="center"><a href="camp.asp"><font color="#003300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><font color="#000000"><< Voltar </font></b></font></a> </div> </td> <td width="50%" height="13"> <div align="center"><a href="checlogin2.asp"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><font size="2"><< Voltar ao Menu Inicial</font></b></font></a></div> </td> </tr> </table> </body> </html> <% end if %> <% Call fecha_conexao Set rs = Nothing %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

salgado, beleza???? (e pra galera que porventura passar por aqui)eu resolvi montar um novo código para o envio de e-mails, por que a solução aplicada pelo allan é para um caso muito diferente do meu, e fiquei um pouco com medo de aplica-la. eu consegui montar um código que está paginando e que não está expirando o tempo de execução, mas tem algumas coisas que eu preciso acrescentar que eu não sei. estas coisas são: - um contador pro usuário identificar o progresso do envio - uma forma caso ele queira cancelar o envio - colocar um intervalo de tempo entre os blocos de e-mailamanhã (terça) vou dar uma pesquisada aqui no fórum, hoje não dá mais(já são 11:15) mas se alguém puder dar alguns toques, eu agradeceria.valeu!!!!sheridan ;) ai vai o code da pg<!--#include file="inc_nocache.asp" --><!--#include file="scripts/connect.asp" --><html><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript" type="text/JavaScript"><!--function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);//--></script><link href="style.css" rel="stylesheet" type="text/css"></head><%if session("logged") <> "sim" thenresponse.Redirect("erro.asp")end ifif session("nivel_acesso") <> "1" thenresponse.Redirect("erro.asp")end ifbloco = 100 'variavel que determina o qte de e-mails enviados de uma só vezwait = 12000 'pause entre a troca de blocospath = "e:\techdesigners\webpages\admin_contatos\html\mailing.asp" 'path e-mail htmlid_email = Request("id_email")'upload htmlSet Objeto = CreateObject ("Scripting.FileSystemObject") set GV = Objeto.OpenTextFile(path ,1,true,false) HTML = GV.ReadAll GV.close Set Objeto = nothing HTML = HTML %><%Set RS = Server.CreateObject("ADODB.Recordset")strSql="SELECT co.id_contato, co.nome_contato,co.lista_email, co.status_email, co.empresa,co.email, "&_"ve.nome_vendedor, ve.telefone, em.assunto, em.mensagem, em.email_pers FROM vendedores ve RIGHT JOIN (email em RIGHT JOIN "&_"contatos co ON em.id_email = co.lista_email) ON ve.id_vendedor = co.vendedor WHERE co.lista_email = "&id_email&_" and co.status_email = 'PENDENTE' LIMIT 0,"&bloco&""RS.CursorLocation = 3RS.Open strSql, CN,1,2RS.MoveFirst'declarando variáveisnome = RS("nome_contato")email = RS("email")email_pers = RS("email_pers")assunto = RS("assunto")vendedor = RS("nome_vendedor")telefone = RS("telefone")NomeEnv = "Depto Comercial - Climafrio"EmailEnv = "comercial@techdesigners.com.br"while not RS.EOF'personalização htmlHTML = replace(HTML,"#nome#",nome_contato) HTML = replace(HTML,"#Empresa#",empresa)HTML = replace(HTML,"#nome_vendedor#",nome_vendedor) HTML = replace(HTML,"#telefone#",telefone) response.write HTML 'envio e-mail htmlDim myMail Set myMail = CreateObject("CDONTS.NewMail") myMail.From = EmailEnvmyMail.To = email myMail.Subject = assunto myMail.BodyFormat = 0 myMail.MailFormat = 0 myMail.Body = HTML myMail.Send Set myMail = Nothing RS.MoveNext wend 'atualização status_lista tb contatosstrSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql)'atualização status_lista tb emailstrSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""Set RS3 = CN.execute(strSql) %><body></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu code tem um erro de conceito, pois qdo preciso atualizar apenas os 100 registros selecionados

wend 'atualização status_lista tb contatosstrSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""Set RS2 = CN.execute(strSql)

ele está atualizando na verdade todos os registros no bd que atendam a condição. como resolver isto. eu não sou muito bom em condicionais e loopsvaleu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sou muito bom de paginação, então desculpe qualquer erro, Tente entender esse código e melhorá-lo

<!--#include file="inc_nocache.asp" -->
<!--#include file="scripts/connect.asp" -->
<%on error resume next%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>

<link href="style.css" rel="stylesheet" type="text/css">
</head>

<%if session("logged") <> "sim" then response.Redirect("erro.asp") end if
if session("nivel_acesso") <> "1" then response.Redirect("erro.asp") end if
pagina = Request.QueryString("pagina")
If pagina = "" Then pagina = 1 End If
If Request("Executar")="Sim" Then
 bloco = 100 'variavel que determina o qte de e-mails enviados de uma só vez
 wait = 12000 'pause entre a troca de blocos
 path = "e:\techdesigners\webpages\admin_contatos\html\mailing.asp" 'path e-mail html (AQUI USE SERVER.MAPPATH, NÃO USE ESSE CAMINHO FÍSICO)
 id_email = Request("id_email")

'upload html
 Set Objeto = CreateObject ("Scripting.FileSystemObject") 
 set GV = Objeto.OpenTextFile(path ,1,true,false) 
 HTML_Original = GV.ReadAll 
 GV.close 
 Set Objeto = nothing 

 Set RS = Server.CreateObject("ADODB.Recordset")
 strSql="SELECT co.id_contato, co.nome_contato,co.lista_email, co.status_email, co.empresa,co.email, "
 strSql= strSql&"ve.nome_vendedor, ve.telefone, em.assunto, em.mensagem, em.email_pers FROM vendedores ve RIGHT JOIN (email em RIGHT JOIN "
 strSql= strSql&"contatos co ON em.id_email = co.lista_email) ON ve.id_vendedor = co.vendedor WHERE co.lista_email = "&id_email
 strSql= strSql&" and co.status_email = 'PENDENTE' LIMIT 0,"&bloco&""
 RS.PageSize = bloco ' Paginando
 RS.CursorLocation = 3
 RS.Open strSql, CN,1,2
 RS.AbsolutePage = pagina ' Página da paginação
'RS.MoveFirst
 Contagem = 0
 while not RS.EOF and x < RS.PageSize
   Contagem = Contagem + 1
   HTML = HTML_Original ' Recuperando o HTML Original para pode fazer a personalização do e-mail

'declarando variáveis
   nome = RS("nome_contato")
   email = RS("email")
   email_pers = RS("email_pers")
   assunto = RS("assunto")
   vendedor = RS("nome_vendedor")
   telefone = RS("telefone")
   NomeEnv = "Depto Comercial - Climafrio"
   EmailEnv = "comercial@techdesigners.com.br"

'personalização html
   HTML = replace(HTML,"#nome#",nome_contato)
   HTML = replace(HTML,"#Empresa#",empresa)
   HTML = replace(HTML,"#nome_vendedor#",nome_vendedor)
   HTML = replace(HTML,"#telefone#",telefone)
   response.write HTML

'envio e-mail html
   Dim myMail
   Set myMail = CreateObject("CDONTS.NewMail")
   myMail.From = EmailEnv
   myMail.To = email
   myMail.Subject = assunto
   myMail.BodyFormat = 0
   myMail.MailFormat = 0
   myMail.Body = HTML
   myMail.Send
   If err.number <> 0 Then
     erros = erros + 1
   End If
   Set myMail = Nothing

'atualização status_lista tb contatos
   strSql="UPDATE contatos SET status_email = 'CONCLUIDO' WHERE lista_email = "&id_email&""
   Set RS2 = CN.execute(strSql)

'atualização status_lista tb email
   strSql= "UPDATE email SET status = 'ENVIADO' WHERE id_email = "&id_email&""
   Set RS3 = CN.execute(strSql)

   RS.MoveNext
 wend
End If%>
<body>
Aqui coloque um link para essa mesma página com a QueryString "?Executar=Sim", se for o inicio do Script!<br>
No caso de existir mais de uma página acrescente na QueryString &pagina=mumero_da_próxima_página
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá, eu não entendi algumas coisas,1-) o final do código, em relação ao query string pagina. como eu vou inserir o valor da pagina atual, após o envio do 1o bloco? 2-)o que a variavel contagem faz?3-)o que If err.number <> 0 Then erros = erros + 1 End Iffaz??o que o código está fazendo é o seguinte, ele abre a pagina, eu clico no link que você pediu pra criar e ele fica executando por muito tempo, e não dá resposta nenhumaeu vou fazer mais alguns testes e qquer mudança eu avisovaleu!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse não sou muito bom de páginação! :P

Bem vamos lá:

1- Eu vou pesquisar como, mas sei que tem como saber o número total de páginas resultante da páginação, então a querystring pagina você irá incrementar +1 até chegar ao total de páginas.

 

2- Eu tinha pensado em uma coisa e acabei não utilizando ela (o pior é que não lembro para que eu coloquei ela :P )

 

3- Esse If err<>0 irá lhe dizer quantos erros houveram, dentro dele você pode retornar outros tipos de dados para "afinar" seu script!

 

Não sei o pq da demora de envio, não vi nenhum time out definido para isso!

 

Você deve personalizar a "saida" dela para lhe informar exatamente o que você quer, por isso que dentro das tags <body></body> eu não coloquei código, só informações para você montar!

 

QQ coisa continue postando, e desculpe algum erro no código :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se é o correto, mas sempre trava se os updates nas tb ficam dentro do whileestou testando ainda e qquer mudança eu posto aquivaleu :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.