Invio email da Access

di il
7 risposte

Invio email da Access

Ciao a tutti,
Ho un problema che non riesco a risolvere con le mie scarse conoscenze.
Ho costruito un Data Base Access per la gestione di una biblioteca e desidero inviare una mail a ciascun utente che non ha restituito il libro prima della scadenza del prestito.

Purtroppo - pur avendo più email da inviare - riesco a spedire solamente la prima.

Questo è il codice che ho usato adattando quello trovato su Internet.

Private Sub Comando22_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim ConteggioRecord As Long
Dim CODICEID As String
Dim TITOLO As String
Dim COGNOME As String
Dim NOME As String
Dim DATAFINE As Date
Dim EMAIL As String


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

' Apre la query "QUERY PER ESTRAZIONE PRESTITI SCADUTI
Set db = CurrentDb
Set rst = db.OpenRecordset("QUERY PER ESTRAZIONE PRESTITI SCADUTI")

' Va avanti in caso di errore
On Error Resume Next


' Conteggio record presenti nella query
ConteggioRecord = rst.RecordCount

' Se nessun record crea messaggio apposito
If ConteggioRecord = 0 Then
MsgBox "NESSUN PRESTITO IN SCADENZA", vbInformation

' Altrimenti inizia loop
Else
rst.MoveLast
rst.MoveFirst
Do Until rst.EOF
ConteggioRecord = ConteggioRecord + 1


' Imposta il TITOLO
TITOLO = rst![TITOLO]

' Imposta DATA SCADENZA
' DATAFINE = rst![DATAFINE]

' Imposta EMAIL
' EMAIL = rst![EMAIL]



' send one copy with Google SMTP server (with autentication)
schema = "http://schemas.microsoft.com/cdo/configuration"
Flds.Item(schema & "sendusing") = 2
Flds.Item(schema & "smtpserver") = "smtp.gmail.com"
Flds.Item(schema & "smtpserverport") = 465
Flds.Item(schema & "smtpauthenticate") = 1
Flds.Item(schema & "sendusername") = ""
Flds.Item(schema & "sendpassword") = "********"
Flds.Item(schema & "smtpusessl") = 1
Flds.Update


' Compila il messaggio email


With iMsg
.To = "EMAIL" PER LE PROVE HO MESSO IL MIO INDIRIZZO EMAIL MA INTENDO PARAMETRIZZARLO
.From = ""
.Subject = "SOLLECITO RIENTRO LIBRO IN PRESTITO"
.HTMLBody = "Gentile cliente,<BR> dai dati in nostro possesso risulta che il prestito del libro:<BR> " & TITOLO & "<BR> da lei effettuato in data <BR>" & DATAFINE & "<BR> è scaduto. <BR>La invitiamo a prendere contatto con la Biblioteca per la restituzione del libro. <BR> IX Municipio <BR> Banca del Tempo <BR> Gestione Biblioteca"
.Sender = "smtp.gmail.com"
.Organization = "gmail"
.ReplyTo = "EMAIL"
Set .Configuration = iConf
SendEmailGmail = .Send
End With

Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing

' End With


' Passa al record successivo
rst.Update
rst.MoveNext
Loop

' Messaggio di conferma
ConteggioRecord = ConteggioRecord - 1
MsgBox "Inviati correttamente " & ConteggioRecord & " richiami."
End If

'Chiude query e database
rst.Close
db.Close
Set rst = Nothing
Set db = Nothing
Close

End Sub

7 Risposte

  • Re: Invio email da Access

    Ciao...quindi se ho capito bene la prima email te la invia??
  • Re: Invio email da Access

    Togli la on error e leggi l'errore che si verifica... Capirai...
  • Re: Invio email da Access

    Anteprima: Re: Invio email da Access

    Re: Invio email da Access

    Messaggioda ByProgrammer » 20 nov 2014, 18:37

    ciao...quindi se ho capito bene la prima email te la invia??
    Confermo.
    La prima email viene inviata correttamente e la seconda non parte, sebbene il contatore dei messaggi indichi 2 messaggi inviati.
  • Re: Invio email da Access

    oregon ha scritto:


    Togli la on error e leggi l'errore che si verifica... Capirai...
    Ho effettuato la prova che mi hai suggerito ed ottengo questo messaggio di errore:

    Errore di run-time '3020'
    Metodo Update o CancelUpdate senza AddNew o Edit


    Grazie per i suggerimenti.

    Azafan
  • Re: Invio email da Access

    Quindi la domanda e' ... a cosa ti serve la riga

    rst.Update

    ?
  • Re: Invio email da Access

    Problema risolto ! Grazie per i vostri preziosi suggerimenti.
    Appena possibile pubblico il codice funzionante
  • Re: Invio email da Access

    Ecco il codice funzionante:

    Private Sub Comando13_Click()

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim ConteggioRecord As Long
    Dim CODICEID As String
    Dim TITOLO As String
    Dim COGNOME As String
    Dim NOME As String
    Dim DATAINIZIO As Date
    Dim DATAFINE As Date
    Dim EMAIL As String
    Dim olApp As Object
    Dim objMail As Object
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem

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

    ' Apre la query "QUERY PER ESTRAZIONE PRESTITI SCADUTI
    Set db = CurrentDb
    Set rst = db.OpenRecordset("QUERY PER ESTRAZIONE PRESTITI SCADUTI")

    ' Va avanti in caso di errore
    ' On Error Resume Next

    ' Controlla se Outlook è aperto
    ' Set olApp = GetObject(, "Outlook.Application")

    ' Se Outlook non è aperto, apre una nuova istanza
    ' If Err Then
    ' Set olApp = CreateObject("Outlook.Application")
    ' End If

    ' Conteggio record presenti nella query
    ConteggioRecord = rst.RecordCount

    ' Se nessun record crea messaggio apposito
    If ConteggioRecord = 0 Then
    MsgBox "NESSUN PRESTITO IN SCADENZA", vbInformation

    ' Altrimenti inizia loop
    Else
    rst.MoveLast
    rst.MoveFirst
    Do Until rst.EOF
    ConteggioRecord = ConteggioRecord + 1

    ' Crea una nuova mail
    ' Set objMail = olApp.CreateItem(olMailItem)
    ' Set iMsg = olApp.CreateItem(olMailItem)

    ' Imposta indirizzo destinatario
    EMAIL = rst![EMAIL]

    ' Imposta NOME
    NOME = UCase(rst![NOME])

    ' Imposta COGNOME
    COGNOME = UCase(rst![COGNOME])

    ' Imposta il TITOLO
    TITOLO = rst![TITOLO]

    ' Imposta DATA INIZIO PRESTITO
    DATAINIZIO = rst![DATAINIZIO]

    ' Imposta DATA SCADENZA
    DATAFINE = rst![DATAFINE]


    ' send one copy with Google SMTP server (with autentication)
    schema = "http://schemas.microsoft.com/cdo/configuration"
    Flds.Item(schema & "sendusing") = 2
    Flds.Item(schema & "smtpserver") = "smtp.gmail.com"
    Flds.Item(schema & "smtpserverport") = 465
    Flds.Item(schema & "smtpauthenticate") = 1
    Flds.Item(schema & "sendusername") = ""
    Flds.Item(schema & "sendpassword") = "yyyyyyyy"
    Flds.Item(schema & "smtpusessl") = 1
    Flds.Update


    ' Compila il messaggio email


    With iMsg
    .To = EMAIL
    .From = ""
    .Subject = "SOLLECITO RIENTRO LIBRO IN PRESTITO"
    .HTMLBody = "Gentile " & NOME & " " & COGNOME & ",<BR> dai dati in nostro possesso risulta che il prestito del libro:<BR> " & TITOLO & "<BR> da lei effettuato in data: <BR>" & DATAINIZIO & "<BR> è scaduto il giorno: <BR>" & DATAFINE & "<BR> <BR> La invitiamo a prendere contatto con la Biblioteca per la restituzione del libro. <BR> §§§§ <BR> Gestione Biblioteca"
    .Sender = "smtp.gmail.com"
    .Organization = "gmail"
    .ReplyTo = "xxxxxxx"
    Set .Configuration = iConf
    SendEmailGmail = .Send
    End With

    ' Modifica campo "richiamo inviato"
    ' rst.Edit
    ' rst![RICHIAMO INVIATO] = True
    ' rst.Update

    ' Passa al record successivo
    ' rst.Update
    rst.MoveNext
    Loop

    ' Messaggio di conferma
    ConteggioRecord = ConteggioRecord - 1
    MsgBox "Inviati correttamente " & ConteggioRecord & " richiami."
    End If

    'Chiude query e database
    rst.Close
    db.Close
    Set rst = Nothing
    Set db = Nothing
    Close

    End Sub

    Grazie a tutti per l'aiuto
Devi accedere o registrarti per scrivere nel forum
7 risposte