Ir para conteúdo

Arquivado

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

Ratu

Envio de newsletter

Recommended Posts

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 proveito

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... 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é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 if
este 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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, este erro eh de paginacao, você colocou um campo Hidden de paginacao no seu form ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

em ql linha eatamente esta dando erro ???mostre ela

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, pra fazer este script funcionar soh precisa do campo email !!!e o form dentro de um IFrame e o codigo tb !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem o campo "id_visitante" ? naum eh cod - autonumeracao... você disse isso lah em cima!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ô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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou com a mesma duvida do Noodlesobre o formulariooo ajuda ae Ratu....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !!

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.