Ir para conteúdo

POWERED BY:

Arquivado

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

Mimizinha

Erro em NEWS

Recommended Posts

Olá!

 

Sou nova, novinha no forum, e venho buscar ajuda neste meu script que adaptei de algo conseguido na internet.

Aparentemente ele está certo, mas ao final, ele dá erro.

 

ADODB.Field error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

emailenvia.asp, line 32

 

ERRO FICA NO CORPO = "....."

 

 

<!--#include file="../../conexao.asp" -->
<!--#include file="../../datas.asp" -->
<%
 RESPONSE.BUFFER = TRUE
 Server.ScriptTimeOut = 50000 
 CONST QtdePag = 2

 IF Request.QueryString("PagAtualEnvio") = "" OR Request.QueryString("PagAtualEnvio") = "0" THEN
    PagAtualEnvio = 1
            ELSE
    PagAtualEnvio = Request("PagAtualEnvio")
 END IF

 SQL = "SELECT * FROM EMAILS ORDER BY ID ASC"
 SET VMNS = Server.CreateObject("ADODB.Recordset")
     VMNS.CursorLocation = 3
     VMNS.CursorType     = 2
     VMNS.LockType       = 1
     VMNS.CacheSize      = QtdePag
     VMNS.Open             SQL, VMCX,,, &H0001
     VMNS.PageSize       = QtdePag
            status       = ""

 IF NOT VMNS.EOF THEN
        VMNS.AbsolutePage = PagAtualEnvio
                   TotPag = VMNS.PageCount
 StatusSend = StatusSend & Fix((PagAtualEnvio*100)/TotPag) & "%"

 
 FOR CONT = 1 TO VMNS.PageSize
  campo01 = VMNS("Email")
  campo02 = VMNS("Nome")
  CORPO   = "TESTE DE NEWSLETTER PARA VER SE FUNCIONA LEGAL"
	 
 SET eObjMail1 = Server.CreateObject("Persits.MailSender")
     eObjMail1.Host             = ""
	 eObjMail1.Port             = 25
	 eObjMail1.Username         = ""
     eObjMail1.Password         = ""
	 eObjMail1.From             = campo01
	 eObjMail1.FromName         = campo02
	 eObjMail1.AddAddress         "TESTE <daniela.mail@server.com.br>"
     eObjMail1.Priority         = 1
	 eObjMail1.IsHTML           = TRUE
     eObjMail1.Subject          = "NEWS - " & FormatandoDataPontos(Date())
	 eObjMail1.Body             = CORPO
     eObjMail1.Send
 SET eObjMail1                  = Nothing
	 
 VMNS.MoveNext	 
      NEXT
%>
<HTML>
<HEAD>
<TITLE>news</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../../css.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<%
IF Int(PagAtualEnvio) < Int(TotPag) THEN
%>
  <table width="100%" height="100%" border="0" cellpadding="2" cellspacing="2">
    <tr>
      <td><table width="207" border="0" align="center" cellpadding="2" cellspacing="2">
        <tr>
          <td><div align="center">Enviando</div></td>
        </tr>
        <tr>
          <td bgcolor="#000000"></td>
        </tr>
        <tr>
          <td> </td>
        </tr>
      </table>
     </td>
    </tr>
  </table>
  <script LANGUAGE="javascript">function atualiza(){document.location.href="<%=Request.ServerVariables("SCRIPT_NAME")%>?PagAtualEnvio=<%=PagAtualEnvio+1%>"}setTimeout("atualiza()",50000);</script> 
<%
ELSE
%>
  <table width="100%" height="100%" border="0" cellpadding="2" cellspacing="2">
    <tr>
      <td><table width="207" border="0" align="center" cellpadding="2" cellspacing="2">
        <tr>
          <td><div align="center" class="fonteBoldBlack">Processo Finalizado</div></td>
        </tr>
        <tr>
          <td bgcolor="#000000"></td>
        </tr>
        <tr>
          <td> </td>
        </tr>
      </table></td>
    </tr>
  </table>
  <script LANGUAGE="javascript">function redireciona(){document.location.href="news.asp"}setTimeout("redireciona()",15000);</script> 
<%
END IF
END IF
%>
</BODY>
</HTML>
<%
 VMNS.Close
 VMCX.Close
 SET PagAtualEnvio = Nothing
 SET TotPag        = Nothing
 SET SQL           = Nothing
 SET VMNS          = Nothing
 SET VMCX          = Nothing
 SET StatusSend    = Nothing
%>

 

Alguém consegue me ajudar????

Obrigado, pois ele dá erro, e também não chega nada no outlook.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se realmente existe registro k satisfaça os criterios,

se estiver tudod correto, verificar que a versão mais recente do MDAC

 

 

 

olha este exemplo pode te ajudar

atraves de um banco com todos destinatários.

, é criado uma página que contem exatamente o corpo da minha news.Utilizando o objeto Microsoft.XMLHTTP capturo o código fonte (HTML) desta página e guardo em uma variável,em seguida faço um loop no banco de destinatários e envio, utilizando CDOSYS, o conteúdo da variável acima como corpo da mensagem. É importante lembrar que o CDOSYS deve ser aberto, usado e fechado a cada envio...

 

Para capturar o código fonte utilizo a seguinte função:

 

Function GetHTML(sPage)
' *** exemplo de uso: GetHTML("http://www.teste.com/var_xanburzum_Paypal/default.asp")
' *** sPage = onde passamos o enderço completo da página a ser carregada
Dim objXMLHttp
On Error Resume Next
Set objXMLHttp = Server.CreateObject ("Microsoft.XMLHTTP")
objXMLHttp.Open "GET", sPage, False
objXMLHttp.Send
If Err.Number = 0 Then
If objXMLHttp.Status = 200 then
GetHTML = objXMLHttp.ResponseText
Else
GetHTML = "URL Incorrecta"
End if
Else
GetHTML = Err.Description
End If
Set objXMLHttp = Nothing
End Function

Para enviar e-mail sugiro esta função:

 

 

Function EnviaMail(strTo, strFrom, strSubject, strBody, blnBodyHTML, strServer)
' *** Envia mengagem de email utilizando CDOSYS que está disponível desde o Windows 2000 server
' *** strTo = email de destino
' *** strFrom = email de origem
' *** strSubject = Assunto da mensagem
' *** strBody = corpo da mensagem
' *** blnBodyHtm = true se for HTML - false se texto
' *** strServer = servidor SMTP para envio de email (o default é "")

Dim iMsg, Flds, iConf
Dim strSMTPServer

if strServer = "" then
strSMTPServer = "localhost"
else
strSMTPServer = StrServer
end if

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1=cdoSendUsingPickup 2=cdoSendUsingPort 
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 '0=anonimo e 1=usuário e senha
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")= 25
.Update
End With

With iMsg
Set .Configuration = iConf
.To = strTo
.From = strFrom
.Sender = strFrom
.Subject = strSubject
If blnBodyHTML Then
.HTMLBody = strBody
Else
.TextBody = strBody
End If
.Send
End With

Set Flds = Nothing
Set iConf = Nothing
Set iMsg = Nothing
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xamburzum e colegas!

 

meu banco para teste tem 5 registros, e antes tinham 6 registros, mas deletei 1 e ficaram agora só 5, e os id's ficariam nesta ordem, 1,2,4,5,6

Como posso resolver isso, agora.

Nao gostaria meu querido pegar outro script no momento, não que não tenha achado o seu interessante, mas consegue me ajudar a resolver esse.

Cheguei ate aqui neste e nao quero desistir agora.

 

Fico no seu aguardo!

 

 

 

 

 

 

 

 

verifique se realmente existe registro k satisfaça os criterios,

se estiver tudod correto, verificar que a versão mais recente do MDAC

 

 

 

olha este exemplo pode te ajudar

atraves de um banco com todos destinatários.

, é criado uma página que contem exatamente o corpo da minha news.Utilizando o objeto Microsoft.XMLHTTP capturo o código fonte (HTML) desta página e guardo em uma variável,em seguida faço um loop no banco de destinatários e envio, utilizando CDOSYS, o conteúdo da variável acima como corpo da mensagem. É importante lembrar que o CDOSYS deve ser aberto, usado e fechado a cada envio...

 

Para capturar o código fonte utilizo a seguinte função:

 

Function GetHTML(sPage)
' *** exemplo de uso: GetHTML("http://www.teste.com/var_xanburzum_Paypal/default.asp")
' *** sPage = onde passamos o enderço completo da página a ser carregada
Dim objXMLHttp
On Error Resume Next
Set objXMLHttp = Server.CreateObject ("Microsoft.XMLHTTP")
objXMLHttp.Open "GET", sPage, False
objXMLHttp.Send
If Err.Number = 0 Then
If objXMLHttp.Status = 200 then
GetHTML = objXMLHttp.ResponseText
Else
GetHTML = "URL Incorrecta"
End if
Else
GetHTML = Err.Description
End If
Set objXMLHttp = Nothing
End Function

Para enviar e-mail sugiro esta função:

 

 

Function EnviaMail(strTo, strFrom, strSubject, strBody, blnBodyHTML, strServer)
' *** Envia mengagem de email utilizando CDOSYS que está disponível desde o Windows 2000 server
' *** strTo = email de destino
' *** strFrom = email de origem
' *** strSubject = Assunto da mensagem
' *** strBody = corpo da mensagem
' *** blnBodyHtm = true se for HTML - false se texto
' *** strServer = servidor SMTP para envio de email (o default é "")

Dim iMsg, Flds, iConf
Dim strSMTPServer

if strServer = "" then
strSMTPServer = "localhost"
else
strSMTPServer = StrServer
end if

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1=cdoSendUsingPickup 2=cdoSendUsingPort 
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 '0=anonimo e 1=usuário e senha
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")= 25
.Update
End With

With iMsg
Set .Configuration = iConf
.To = strTo
.From = strFrom
.Sender = strFrom
.Subject = strSubject
If blnBodyHTML Then
.HTMLBody = strBody
Else
.TextBody = strBody
End If
.Send
End With

Set Flds = Nothing
Set iConf = Nothing
Set iMsg = Nothing
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros Colegas!

 

Retirei agora o SETTIME OUT, e agora ainda dá o erro, mas só que agora os emails são disparados para estes 5 registros, e recebo eles normalmente no outlook, mas ainda dá aquele erro.

 

Será que aquele codigo está com erros???

Alguém se candidata a resolver comigo este script, obrigado!

 

Beijos a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma response.write na sua string SQL para ver o k esta sendo passado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xamburzum!

 

Dei o response.write SQL e me mostra isso: SELECT * FROM EMAILS ORDER BY ID ASC

Depois dei novamente o response.write agora aqui:

 

 

VMNS.MoveNext

NEXT

 

Ficando assim:

 

response.write campo01 & campo02 & "<br>"

VMNS.MoveNext

NEXT

response.end

 

 

E me aparece 2 emails, e acredito que esteja certo.

Oque acha?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de testar uma coisa aqui xamburzum?

Veja que interessante.

 

 

Já havia comentado que tenho no banco apenas 5 emails, certo.

Então aí estava enviando a cada pacote 2 emails por vez, ok.

Só que ao chegar no pacote final, ele dava erro. certo.

 

Só que daí comecei a pensar aqui se estou enviando de 2 em 2 emails, 2 em 2 + 2 = dão 6 certo.

Aí estava o problema, o script não consegue completar os 2 ultimos emails, pois se dividir 5 por 3 não dá.

Só se fosse 6 emails, e como era 5 só, dava.

 

Aí por esta lógica, mudei aqui CONST QtdePag = 2

Por QtdePag = 1 e tentei enviar, e funcionou sem erro nenhum, enviando 1 email por pacote.

 

 

Resolvido a coisa, mas agora te pergunto, se eu deixar alí por 1 emails por vez, e se o banco de dados tiver 60 emails que é um email par, será que não vai dar erro.

 

E se eu colocar para 5 emails por pacote, e tiver um número par.

Pois pelo que notei nisso que fiz, é que o script só não dá erro quando consegue dividir o pacote pelo que tem no banco.

mas como fazer o script saber sempre oque tem no banco e dividir corretamente para não dar erro.

 

 

Me ajuda aí amigo, não sei se expliquei bem, mas pode testar em casa se não entendeu, criar com 5 emails e teste oque eu disse.

Mas creio que tu entendeste.

 

 

Obrigado.

 

 

Beijos da Mimizinha.

Aguardo sua ajuda e dos colegas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele é o VMNS.PageSize´, onde depois de abrir o recordset,seta o tamanho de pagina , quantos registros você ker em uma pagina,a ultima pagina vai ter o balançodos recrodset k sobrarem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Querido Xanburzum!

 

Meu amigo, realmente sei que é isso, mas poderia testar aí com 5 registros no banco e tentar enviar no bloco de 2 em 2, no final dá erro.

Mas daí se coloco no banco 6 registros, ele não dá erro, pois daí ele vai fazer 3x 2 pacotes.

 

Não estou entendo isso, tem algo de errado neste script.

Pela lógica teria que ser assim, mas não tá acontecendo.

 

 

1) Seto para 2 pacotes em CONST QtdePag = 2

2) Cache.Size tambem

3) No banco tenho 5 registros

4) Ao enviar, ele pega 2 emails dos 5 e envia;

5) Depois de enviar os 2 emails, ele pega mais dois dos 5, que no caso seriam os 4 já

6) Agora no ultimo pacote, resta só um email dos 5, mas só que ele dá erro, e acho que é só porque tem 1 emails, e não 2.

 

Amigo me ajuda achar este erro, estou confusa mesmo.

Tem algo de errado neste script tem, só não sei oque.

 

 

Pois senão depois que for aumentar a quantidade de emails, e enviar por 2, e se não for o numero de emails sempre PAR, vai dar erro.

 

 

 

Fico no teu aguardo.

Beijos colegas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro que dá exatamente quando não é um total multiplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz uma condicaun k testa antes o numero k tem e tenta enviar separado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario em Xamburzum!

 

Testei novamente agora, tenho 800 registros no banco de dados, com o total de emails por página em QtdePag=17, e enviou sem problemas até o final, mas só que deu novamente este erro ao termino, na ultima paginação de dados:

 

ADODB.Field error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

testenews.asp, line 643

 

E mario ou xamburzum, pode me postar a condição de como posso fazer para verificar quanto numeros tem??

 

 

Fico no aguardo dos colegas, pois agora acho que falta pouco.

Só isso mesmo, enviou normal, mas no final da ultima paginaçao deu aquele erro.

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A causa mais provável, é que não há nenhum registro. verifique realmente se os criterios satisfazem a SQL

coloke um

if not rs.eof then

Se você estiver certo de que há resultados, você pode verificar que a versão mais recente do MDAC (que você pode fazer o download do MDAC ,Outra possível razão é que você está usando um procedimento armazenado que opera em uma tabela temporária, ou será outra linha, que afetam a operação antes de sua instrução select. poste a linha 643

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.