Newsgroup: it.comp.appl.access
Titolo: invio di email

A03
Buongiorno,
ho un db con una tabella verbale_generale che contiene i seguenti campi relativi ai pazienti visitati:
 
cognome; 
nome;
data_visita;
esito;
email; (del medico curante)
 
la tabella viene svuotata e aggiornata di volta in volta, dopo ogni sessione di visite.
Su di una maschera vorrei inserire un pulsante per mezzo del quale inviare una mail ad ogni indirizzo email contenuto nella tabella, con oggetto e corpo tipo:
 
to: email n. 1
oggetto: "commissione del" & data_visita
corpo: "Gentile dottore, le comunichiamo che in data " & data_visita & "abbiamo visitato" & cognome & nome & "con il seguente esito" & esito
 
inviando una singola mail per ogni medico.
A volte il campo email può essere vuoto quindi può provocare errori.
Ho provato qualcosa con docmd.sendobject ma non sono riuscito.
Mi dareste una mano per favore?
Grazie e saluti
 
Remigio

Remigio formulated on Friday :

Per provarla avrei dovuto creare la tabella, cosa che non ho fatto.
Access 2013, con Reference:
Microsoft Outlook 15.0 Object Library
==============================================================
Public Sub SendMail()
Dim db As Database, RS As Recordset
Dim OutlookApp As Object, NewMail As MailItem
 
Set db = CurrentDb
Set RS = db.OpenRecordset("verbale_generale", dbOpenDynaset)
Set OutlookApp = CreateObject("Outlook.Application")
Set NewMail = OutlookApp.CreateItem(olMailItem)
 
Do Until RS.EOF
    With NewMail
        .To = RS![Email]
        '.CC = "xxx"
        '.BCC = "yyy"
        .Subject = "Commissione del " & RS![data_visita]
        .Body = "Gentile dottore, le comunichiamo che in data " & _
             RS![data_visita] & " abbiamo visitato " & _
             RS![Cognome] & " " & RS![Nome] & _
             " con il seguente esito " & RS![esito]
        .ReadReceiptRequested = True
        .Send
    End With
    DoEvents
    RS.MoveNext
Loop
OutlookApp.Quit
 
End Sub
=====================================
Se Outlook non invia tutte le email,
tienilo aperto finché non ha finito...
 
Bruno

 Bruno
 
 
se usa MS outlook come programma di posta puï¿œ anche andar bene come 
soluzione...
nel caso usi windows live mail, thunderbird o altri no.
 
cmq argomento trito e ritrito con svariate soluzioni
basta googlare
 
ciao
BFS
 

 
 
Da errore di compilazione a questa riga, "tipo definito dall'utente non definito" ed evidenzia NewMail As MailItem
Grazie molte per l'aiuto
 
Remigio

Mi rispondo da solo,
ho selezionato la libreria Microsoft Outlook 11.0
effettivamente la procedura si avvia ma poi da errore di runtime:
 
"l'elemento è stato spostato o eliminato"
alla riga
        .To = RS![EMail]
Ciao e grazie
 
Remigio

...
 
ho scoperto inoltre che viene inviata la mail solo al primo indirizzo della tabella, poi c'è l'errore di runtime
 
Saluti
 
Remigio
 

Remigio formulated on Friday :

Se avessi precisato quale versione di Access stai usando...
Cambia il Dim di MailItem: MailItem As Object.
 
Ti avevo precisato che Outlook non invia tutte le email
se non lo tieni aperto.
Il che significa porre un REM alla penultima riga del codice.
 
Bruno

 basta googlare
Dillo a Remigio... non son io quello che doveva "googlare".
 
Bruno
 
PS
Era bianco o rosso?

...
 
IO vi ringrazio per l'aiuto, posso immaginare che queste cose sono di una noia incredibile per chi come voi è un esperto di codice. Io di certo non lo sono e cerco di imparare, almeno per quello che nel mio ambito può servire.
Quello dei recordset per me è un argomento sconosciuto di cui voglio approfondire l'utilizzo, ho trovato una delle tante guide online
http://www.utteraccess.com/wiki/index.php/Recordsets_for_Beginners
 
che mi sembra semplice e chiara, ora me la leggo e faccio anche qualche esercizio, così almeno so di cosa stiamo parlando.
Giusto per puntualizzare, ma avevo cercato su google, ma le soluzioni sono così tante e di verse fra loro, ne ho provate alcune senza riuscirvi.
Un saluto e grazie ancora.
 
Remigio

...
Bruno,
guarda la prima riga del mio messaggio
A03

 ha scritto nel messaggio 
news:86687054-0a19-4db3...@googlegroups.com...

---------------------------------------------
 
Se devi inviare email puoi usare Blat
http://www.blat.net/194/
 
E' un programma che, dopo aver impostato una riga di testo contenente i 
comandi, fa tutto lui, compreso il log di eventuali errori su file di testo
La cosa importante e' che non ti leghi ad un client di posta, nel senso che 
devi dare i dati del server di posta e l'account col quale autenticarti
Cosi' facendo elimini tutti quei problemi del tipo "sul mio va e sull'altro 
pc no"
 
 
 

Grazie Roberto,
credo che terrò questa come ultima soluzione.
Un saluto cordiale.
 
Remigio


ricordo male o blat non supporta l'autenticazione in uscita?
oppure non permette di settare il protocollo smtp rendendolo quindi 
inutilizzabile quando va usato con SSL etc?
 
ciao
BFS
 
 
 
 
 
 

 Cambia il Dim di MailItem: MailItem As Object.
 
Non so se ho fatto bene:
 
    Dim db As Database
    Dim RS As Recordset
    Dim OutlookApp As Object
    Dim mailitem As Object
 
    Set db = CurrentDb
    Set RS = db.OpenRecordset("prova", dbOpenDynaset)
    Set OutlookApp = CreateObject("Outlook.Application")
    Set NewMail = OutlookApp.CreateItem(olMailItem)
 
    Do Until RS.EOF
        With NewMail
            .To = RS![EMail]
ma a questa riga da il seguente errore:
 
metodo "to" dell'oggetto "_mailitem" non riuscito
 
Ricordo che uso Access 2003 
Ciao e grazie
 
Remigio

Remigio pretended :

Come dicevo non l'ho provato...
 
.To = CHR(34) & RS![EMail] & CHR(34)
 
Vuole una stringa, dovrebbe andare.
Se cosï¿œ non fosse prova con:
.To = "
brun...@libero.it
"
 
e dimmi quel che succede.
 
Bruno

 Bruno
 
Ciao Bruno,
ho provato come sotto
 
        With NewMail
            .To = "
lin...@gmail.com
"
 
ma l'errore persiste, 
 
"l'elemento è stato spostato o eliminato"
 
anche con il chr(34)
Comunque il messaggio a 
lin...@gmail.com
 è stato inviato, come prima veniva inviato il messaggio solo al primo destinatario dell'elenco
Se hai tempo potresti fare una prova su un pulsantino?
Grazie infinite.
 
Remigio

Remigio laid this down on his screen :

Questo nel Command Button di una Form:
=========================================
Private Sub Command2_Click()
Dim RS As Recordset, eMail As String, Subject As String, Message As 
String
 
Set RS = CurrentDb.OpenRecordset("Verbale_Generale", dbOpenDynaset)
Do Until RS.EOF
    eMail = RS![eMail]
    Subject = "Commissione del " & RS![data_visita]
    Message = "Gentile Dottore, Le comunichiamo che in data " & _
              RS![data_visita] & " abbiano visitato " & RS![Cognome] & 
_
              " " & RS![Nome] & " con il seguente esito " & RS![esito] 
& "."
    SendMail_1 eMail, Subject, Message
    RS.MoveNext
Loop
 
End Sub
==========================================
 
 
Questo in un Modulo:
==========================================
Public Sub SendMail(eMailAddr As String, Subject As String, Message As 
String)
Dim olApp As Object, NewMail As Object
 
Set olApp = CreateObject("Outlook.Application")
Set NewMail = olApp.CreateItem(olMailItem)
 
With NewMail
    .To = eMailAddr
    '.CC = "
xxx.it
"
    '.BCC = "yyy"
    .Subject = Subject
    .Body = Message
    .ReadReceiptRequested = True
    .Send
End With
DoEvents
olApp.Quit
 
End Sub
=========================================
 
Creato da Access 2013/64 bit col quale funziona perfettamente.
L'ho convertito in Access 2003, senza però riuscire a farlo
funzionare perché A2013/64 non mi carica più la Reference
Microsoft DAO 3.6 Object Library.
 
Adegua tutte le Reference alla tua versione A203.
 
Bruno