82 messaggi dal 04 ottobre 2007
Grazie per la cortese risposta ma non ci riesco.
Posso postarti tutto il codice? ovviamente lo riduco...
Grazie ancora
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, posta il codice, aiuterà a capire il problema però devi anche spiegare meglio dove e perché ti sei bloccato. Ad esempio, stai ottenendo errori?

Enjoy learning and just keep making
82 messaggi dal 04 ottobre 2007
Con questo esempio funziona ma invia una email diversa per quanti prodotti ci sono ...





<%

  Dim SQLnews4, RSnews4, emailcliente4,cliente4,idsession4,fotopiccola,articolo
  Conn.execute ("SET NAMES utf8")
  set RSnews4 = Server.CreateObject("ADODB.Recordset")
  SQLnews4 = " SELECT DISTINCT IDSessione FROM carrello WHERE DataAggiunta = (CURDATE() - interval 2 day) AND carrello.carrello_email <> '0' AND carrello.carrello_lingua = 'it' "
  
  Set RSnews4 = Conn.Execute(SQLnews4)
  If Not RSnews4.EOF Then
  
  RSnews4.MoveFirst
  Do While Not RSnews4.EOF
  
    set RSnews5 = Server.CreateObject("ADODB.Recordset")
    SQLnews5 = " SELECT carrello.*, prodotti.PFoto, prodotti.Prodotto FROM carrello INNER JOIN prodotti ON carrello.IDProdotto = prodotti.ID WHERE carrello.IDSessione = '"& RSnews4("IDSessione")&"'"
    Set RSnews5 = Conn.Execute(SQLnews5)

      If Not RSnews5.EOF Then
      RSnews5.MoveFirst
      
      Do While Not RSnews5.EOF
      emailcliente4 = RSnews5("carrello_email")
      cliente4 =  RSnews5("carrello_cognome")
      idsession4 =  RSnews5("IDSessione")
      fotopiccola =  RSnews5("PFoto")
      articolo =  RSnews5("prodotto")

%>

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

<%

      DIM corpoMessaggio, numeroCampi, invioA, invioDa, mc3

      invioA =  emailcliente4
      mc3 = "mail@mail.it"


      invioDa =  "mail@mail.it"

        '*rilevo i campi del form
        
      FOR numeroCampi = 1 TO (Request.Form.Count() - 1)
         IF NOT Request.Form(numeroCampi) = "" THEN
          corpoMessaggio = corpoMessaggio & "<br>" & Request.Form.Key(numeroCampi) & " = " & Trim(Request.Form(numeroCampi))
         END IF
      NEXT

        '* creo gli oggetti cdosys sul server e li gestisco
        
      DIM iMsg, Flds, iConf,UserID2,Cognome2,Nome2,Mail2,PuntiSconto3

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

      Flds(cdoSendUsingMethod) = cdoSendUsingPort
      Flds(cdoSMTPServer) = "smtp.mail.it" 
      Flds(cdoSMTPServerPort) = 25
      Flds(cdoSMTPAuthenticate) = cdoBasic
      Flds(cdoSendUserName) = "mail@mail.it"
      Flds(cdoSendPassword) = "password"
      Flds.Update


      With iMsg

         Set .Configuration = iConf
         .To = invioA
         .bcc = mc3
         .From = invioDa
         .Sender = invioDa
         .bodypart.charset = "UTF-8"
         .Subject = "" & cliente4 & ", il tuo carrello ti sta aspettando!"
        .HTMLBody = .HTMLBody & "<style type=""text/css""></style>" & vbCRLF & ""

        .HTMLBody = .HTMLBody & "<font face=Arial size=3><a href=""https://......""><b>"&articolo&"</b></a>:" & vbCRLF & "" 
        
        .HTMLBody = .HTMLBody & "</table>" & vbCRLF & "<br><br>"

         .Send
      End With

%>

<%
  RSnews5.MoveNext
  Loop
  Else
  END IF
%>
<%
  RSnews4.MoveNext
  Loop
  Response.write "- Email inviata <br><br>"
  Else
  Response.write "- Email non inviata<br><br>"
  END IF
%>



Ora se provo a ciclare con RSnews5 solo questa parte non mi funziona e mi da errore a .send

.HTMLBody = .HTMLBody & "<font face=Arial size=3><a href=""https://......""><b>"&articolo&"</b></a>:" & vbCRLF & "" 


l'impressione è che non posso dividere le parti per la creazione ed invio email... altrimenti non funziona piu...
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Con questo esempio funziona ma invia una email diversa per quanti prodotti ci sono ...

Beh, è normale, stai creando e inviando l'oggetto CDO.Message dentro il Do While. Ad ogni iterazione parte una mail. Bisogna spostare l'invio della mail al di fuori del Do While.


l'impressione è che non posso dividere le parti

Allora, il vbScript non è una divinità con una volontà propria imperscrutabile.
Il vbScript è uno strumento di cui devi diventare padrone per forgiare esattamente l'applicazione che vuoi realizzare. Sei tu che comandi il vbScript, non il contrario.

Quindi, fai una checklist del da farsi:
  • Abbiamo detto che l'invio non può trovarsi dentro il Do While, quindi sposta la chiamata alla funzione Send dopo il Do While
  • Allo stesso modo, la creazione dell'oggetto CDO.Message, così come la configurazione dello username della password non possono trovarsi dentro il Do While. Sposta quel pezzo di codice prima del Do While.
  • Dai una ripulita al codice per avere una situazione più chiara.
    Questa roba si può spostare in cima al file:
    <!--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" -->
    

    Perché chiudere il tag %> se poi lo riapri subito dopo?
    %>
    
    <%
      RSnews5.MoveNext
      Loop
      Else
      END IF
    %>
    <%
    


Prova a farlo. Se hai un errore, sarà comunque un passo avanti. Posta di nuovo il codice dopo la modifica e posta l'errore che ottieni.

ciao,
Moreno
Modificato da BrightSoul il 21 agosto 2018 21.12 -

Enjoy learning and just keep making
135 messaggi dal 01 febbraio 2017
Salve, mi permetto di suggerire un approccio diverso, ovvero spezzare la logica su due piattaforme. Nella pagina precedente Andrea ti suggeriva di utilizzare SQL per raggurppare i prodotti per carrello, usa quella logica per avere la lista già pulita e raggruppata e ASP per la presentazione , preparazione ed invio della mail.
Hai già tutoo il codice che ti serve scritto in queste due pagine.
Gino.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
82 messaggi dal 04 ottobre 2007
Grande, ho fatto come dici tu, ho messo un po di ordine ed ho aggiunto un'altra select subito sotto alla SELECT DISTINCT e funziona.

Grazie ancora
11.886 messaggi dal 09 febbraio 2002
Contributi
Ok, ottimo lavoro!

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.