63 messaggi dal 01 luglio 2003
La sezione ASP è stata eliminata (?) Vabbè...

Ho un problema con il seguente codice... Se lo utilizzo senza ciclo, funziona. Se metto il ciclo, dopo aver inviato la prima e-mail (prima riga del DB) da errore sul ".send"

Prima funzionava tutto perfettamente, poi mi hanno migrato su WS2012 (Aruba) ed ho dovuto modificare il codice ma non esco da questo (probabilmente semplice) errore... Mi date una mano?



'******INIZIO CODICE PAGINA***********************************************
<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->

<!--#include virtual="/forum/includes/inc_protezione_admin.asp"-->
<!--#include virtual="/forum/includes/inc_costanti.asp"-->
<!--#include virtual="/forum/includes/inc_con.asp"-->
<%
If Request.Form("action") = "valida" Then

ID_COMMENTO = Request.Form("ID_COMMENTO")

Sql = "SELECT Tbl_COMMENTI.*, Tbl_DISCUSSIONI.TITOLO, Tbl_FORUM.FORUM, Tbl_CATEGORIE.CATEGORIA, Tbl_COMMENTI.ID_COMMENTO " &_
"FROM ((Tbl_COMMENTI INNER JOIN Tbl_DISCUSSIONI ON Tbl_COMMENTI.ID_DISCUSSIONE = Tbl_DISCUSSIONI.ID_DISCUSSIONE) INNER JOIN Tbl_FORUM ON Tbl_COMMENTI.ID_FORUM = Tbl_FORUM.ID_FORUM) INNER JOIN Tbl_CATEGORIE ON Tbl_COMMENTI.ID_CATEGORIA = Tbl_CATEGORIE.ID_CATEGORIA " &_
"WHERE (((Tbl_COMMENTI.ID_COMMENTO)="& ID_COMMENTO &"));"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open Sql, Conn, 1, 3

ID_DISCUSSIONE = Rs("ID_DISCUSSIONE")
ID_COMMENTO = Rs("ID_COMMENTO")
ID_FORUM = Rs("ID_FORUM")
FORUM = Rs("FORUM")
CATEGORIA = Rs("CATEGORIA")
ID_UTENTE = Rs("ID_UTENTE")
USERNAME = Rs("USERNAME")
TITOLO = Rs("TITOLO")
COMMENTO = Rs("COMMENTO")
DATA_ORA = Rs("DATA_ORA")

Rs("VALIDAZIONE") = True
Rs("ADMIN") = Session("USERNAME")
Rs.Update

Rs.Close()
Set Rs = Nothing


'******************************************************************

Sql = "SELECT EMAIL FROM Tbl_UTENTI WHERE NOTIFICHE LIKE '%"& ID_FORUM &"%' AND STATO_UTENTE = 2;"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open Sql, Conn, 1, 3

Dim iMsg
Dim iConf
Dim Flds
Dim strHTML
set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.tempista.it"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = CdoSendUsingPort
.Update
End With

'Build HTML for message body.
strHTML = "<font face=""Verdana"" size=""2"">"
strHTML = strHTML & "Nuovo commento nella discussione <strong>"& TITOLO &"</strong> inserito da <strong>" & USERNAME & "</strong> (" & FormatDateTime(DATA_ORA,1) & " - "& FormatDateTime(DATA_ORA,4) &")."
strHTML = strHTML & "<br /><br />"
strHTML = strHTML & "" & FORUM & " > "& CATEGORIA &""
strHTML = strHTML & "<br /><br />"
strHTML = strHTML & "" & COMMENTO & ""
strHTML = strHTML & "<br /><br />"
strHTML = strHTML & "***************************************************************"
strHTML = strHTML & "<br />"
strHTML = strHTML & "<a href=""http://"& Request.ServerVariables("SERVER_NAME") & "/forum/post.asp?id_discussione="& ID_DISCUSSIONE &"#"& ID_COMMENTO &""""">Vai al Commento</a>"
strHTML = strHTML & "</font>"

'*** ciclo
Do While Not RS.Eof

With iMsg
Set .Configuration = iConf
.To = Rs("EMAIL")
.From = const_email_no_replay
.Subject = "Forum - Nuovo commento di "& USERNAME &" in: "& FORUM &" > "& CATEGORIA &" > "& TITOLO &""
.HTMLBody = strHTML
.Send
End With

'*** Fine ciclo
Rs.movenext
Loop

' Clean up variables.
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing

Rs.Close()
Set Rs = Nothing

Conn.Close()
Set Conn = Nothing

'******************************************************************

Response.redirect("commenti.asp")
End If
%>
'****** FINE CODICE PAGINA ************************************************



Ricevo il seguente errore:


error '8004020e'
/forum/admin/commenti/valida.asp, line 79

(dove l'errore è alla riga 79, corrisponde al: ".Send"


*Tempista*
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
dato che il Send si trova in un ciclo, la prima cosa da supporre è che Aruba ti richieda di fare una pausa tra un invio e l'altro (probabilmente per disincentivare l'invio massivo di email). In caso senti l'assistenza di Aruba per averne conferma.

Di solito si usa il metodo Sleep per attendere alcuni secondi prima di eseguire nuovamente il Send. In questo caso però non te lo consiglio perché prolungheresti l'esecuzione della pagina, specie se ci sono tante persone che hanno richiesto di ricevere la notifica.

Potresti invece inviare una sola mail e mettere in Bcc tutti i destinatari (per un massimo di 40-50 ad email).
Per cui, nel ciclo while ti limiterai ad aggiungere il destinatario alla collezione Bcc.

Dim destinatari
destinatari = ""

Do While Not RS.Eof
If destinatari <> "" Then destinatari = destinatari & ";"
destinatari = destinatari & rs("EMAIL")
Rs.movenext
Loop

'Qui, fuori dal loop, crei il messaggio (tralascio il codice)
'ed assegni il valore di destinatari alla proprietà Bcc del messaggio.
.Bcc = destinatari


Prova a vedere se così funziona.
La controindicazione è che non puoi personalizzare il messaggio e-mail in base al destinatario ma, guardando il corpo del tuo messaggio, mi sembra che non avessi questa necessità.

Sposto questa discussione in ASP Avanzato. Le sezioni dell'ASP Classico esistono ancora ma sono in sola lettura.

ciao,
Moreno
Modificato da BrightSoul il 08 ottobre 2015 20.58 -

Enjoy learning and just keep making
63 messaggi dal 01 luglio 2003
Buongiorno Moreno, sei una persona molto gentile e disponibile... Ti ringrazio.
La soluzione da te proposta mi pare ottima... In passato non ricordo se l'ho adottata... Adesso vedo come fare.. Però, se non ricordo male, qualora un indirizzo non fosse più esistente la e-mail non viene inviata (?)

Grazie ancora, buona giornata.

*Tempista*
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
dipende da come è configurato il server di posta. Anche se una delle e-mail non esistesse, credo che il server prenderà comunque in carico il messaggio e tenterà di consegnarlo agli altri indirizzi esistenti.

Fai un test con un indirizzo email volutamente inventato per verificarne il comportamento.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.