View Full Version : Invio automatico email da Access 2010 con Outlook
Dottor Gonzo
07-12-2012, 22:51
Buongiorno a tutti.
Nello studio veterinario nel quale lavoro, abbiamo la seguente necessità. Vorremmo inviare delle email in automatico ai nostri clienti quando si avvicina il termine per la vaccinazione annuale del loro animale.
Utilizziamo Access 2010 per la contabilità di cassa e Outlook come gestore di posta elettronica.In sostanza vorremmo che a scadenze regolari (ad esempio una volta al mese) il programma selezioni i nominativi corretti nel database clienti, crei un messaggio personalizzato (con nome cliente, nome animale, data ultimo vaccino, ecc) e lo invii.
Non vi chiedo di indicarmi passo a passo la procedura, anche perchè sono completamente digiuno di Access, programma che non ho mai utilizzato. Vorrei solo sapere se la cosa è fattibile con tali programmi o se consigliate una soluzione diversa. Magari se potete darmi una traccia da cui iniziare.
Mi sembra di aver capito che probabilmente ci vorrà anche un po' di programmazione tramite VBA per l'invio delle email. Vero? Anche qui purtroppo non so nulla.
Grazie.
ti serve un software fatto ad hoc. outlook e' fuori dall'equazione.
ti consiglio di scaricarti visual c# express e farlo con quello, o al limite visual basic express se ti e' + congeniale.
l'idea di base e' che il software debba aprire il database access, fare una query apposita che selezioni i clienti con vaccinazioni in scadenza, e per ogni record invii una mail (tramite un server, ovviamente) generata direttamente nel codice del programma.
tale software poi dovrebb essere schedulato per l'esecuzione (operazioni pianificate di windows) ogni tot giorni
Dottor Gonzo
09-12-2012, 22:09
Ciao e grazie mille per le informazioni.
Credo di aver afferrato bene l'idea di base. Nei prossimi giorni vedrò cosa riesco a ricavare da visual c# express.
Ho detto di essere abbastanza smanettone ma purtroppo la mia conoscenza dei linguaggi di programmazione è bassissima. Partendo praticamente da zero e leggendo apposite guide, pensi sia fattibile la cosa o mi consigli di lasciar perdere?
se hai dei rudimenti di programmazione e sql probabilmente si, dopotutto non e' difficile come programma
Dottor Gonzo
14-12-2012, 17:25
In questo giorno ho setacciato la rete e mi sono studiato i principi base di Access. Sto pensando, almeno per ora, di lasciar perdere l'automazione dell'invio mail, e di creare invece un pulsante abbinato ad una macro VBA che faccia il lavoro.
Mi sono creato un database fittizio a casa con:
- Tabella clienti con tutti i dati necessari
- Maschera per l'inserimento di nuovi clienti
- Query per la ricerca dei pazienti con vaccino in scadenza
Vorrei ora creare per l'appunto (tramite VBA) un pulsante che invii a tutti gli indirizzi email della query un email personalizzato con i dati del cliente (nome animale, data ultimo vaccino, ecc) inseriti all'interno del testo.
Qualcosa del tipo:
"Gentile cliente, dai dati in nostro possesso risulta che il suo <<animale>> <<nome animale>> ha effettuato l'ultima vaccinazione in data <<data vaccinazione>>. La invitiamo dunque a prendere contatto presso il nostro studio ecc ecc"
Al termine dell'invio bisognerebbe anche aggiornare uno specifico campo della tabella clienti relativo all'avvenuto invio dell'email onde evitare invii doppi.
Mi sembra di aver capito che il cuore del codice sta nel comando DoCmd.SendObject ma non riesco a capire come fare ad inserire i dati necessari all'interno dell'email.
Immagino che bisogni prima estrarre dalla query gli indirizzi email da immettere nel campo Bbc ed inserire gli altri dati da inserire nel testo del messaggio.
Chi mi dà qualche spunto da cui partire?
Grazie
ma non ti conviene onestamente eh... ti do' una base da cui partire, con c#
gli using vanno in testa, il resto va dentro al codice della funzione principale da cui vuoi lanciare la procedura
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.IO;
System.Data.OleDb.OleDbConnection conn = null;
System.Data.OleDb.OleDbDataReader reader = null;
System.Data.OleDb.OleDbCommand cmd;
String dbpath = "c:\\database\\";
String dbpass = "eventualepassword";
conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbpath + "database.mdb; Jet OLEDB:Database Password=" + dbpass + ";");
conn.Open();
cmd = new System.Data.OleDb.OleDbCommand("SELECT * FROM CLIENTI WHERE ecc ecc", conn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
// codice che invia le mail qui dentro
}
reader.Close();
conn.Close();
Dottor Gonzo
16-12-2012, 16:10
Grazie per il suggerimento.
Intanto però, avendo voglia di imparare un po' il vba, mi sono messo a studiare durante il fine settimana.
Sono giunto ad una prima versione del codice, che sembra funzionare a dovere. In sostanza la routine apre la query per la ricerca dei vaccini in scadenza, copia gli indirizzi email, compone il messaggio di posta elettronica, lo invia tramite outlook, aggiorna il database (cambia il campo "richiamo inviato") e scrive un messaggio di conferma.
Ecco il codice:
Option Compare Database
Option Explicit
Private Sub Comando172_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim ConteggioRecord As Long
Dim indirizzo As String
Dim Paziente As String
Dim NomePaziente As String
Dim UltimoRichiamo As Date
Dim olApp As Object
Dim objMail As Object
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
' Apre la query "ricerca vaccini in scadenza
Set db = CurrentDb
Set rst = db.OpenRecordset("Ricerca vaccini in scadenza")
' 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 vaccino 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)
' Imposta indirizzo destinatario
indirizzo = rst![email]
' Imposta tipo animale
Paziente = LCase(rst![Animale])
' Imposta il nome animale
NomePaziente = rst![Paziente]
' Imposta data ultimo vaccino
UltimoRichiamo = rst![Data vaccino norm]
' Compila il messaggio email
With objMail
.BodyFormat = olFormatPlain
.To = indirizzo
.Subject = "Richiamo vaccini prova 3.0"
.body = "Gentile cliente," & vbCrLf & _
vbCrLf & _
"Dai dati in nostro possesso risulta che il suo " & Paziente & " " & NomePaziente & " ha effettuato l'ultima vaccinazione in data " & UltimoRichiamo & "." & _
vbCrLf & "La invitiamo dunque a prendere contatto presso il nostro studio per fissare un appuntamento per il richiamo annuale." & vbCrLf & _
vbCrLf & _
" Centro Veterinario Girard & Gabucci"
.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
Ho fatto alcuni test e, come dicevo, sembra funzionare bene.
Magari qualcuno sa dirmi se ho commesso errori grossolani?
Il passo successivo sarebbe effettivamente automatizzare la procedura. Non so se sia possibile direttamente tramite le operazioni pianificate di Windows oppure sia per l'appunto necessario crearsi un software ad hoc tramite C#.
Isabella_AA
05-11-2013, 14:01
Buongiorno Dottor Gonzo,
sei riuscito a risolvere il problema? Abbiamo le stesse necessità con la differenza che io sono quasi totalmente digiuna di linguaggi di programmazione vba...:mc: il codice va incorporato nel file Access o come eseguibile?
Grazie in anticipo :)
Dottor Gonzo
05-11-2013, 14:24
Ciao Isabella.
Il progetto dell'invio automatico delle email era in realtà parte integrante di un progetto più complesso che prevedeva l'allestimento di un gestionale completo dello studio veterinario. Vale a dire gestione dei dati di clienti, pazienti, cartelle cliniche, farmaci e loro prezzi, fatturazioni e pure invio automatico di email.
Il lavoro, seppur praticamente finito e funzionante, è ormai fermo da parecchi mesi. In sostanza non mi sentivo pronto ad assumermi la responsabilità di far gestire l'attività commerciale ad un programma da me creato in poche settimane, partendo completamente da zero. Ho provato a richiedere l'appoggio di qualche esperto in materia, ma non è per nulla facile.
Detto questo, il mio consiglio è il seguente. Se ti interessa imparare il funzionamento di Access e di vba, studia più che puoi :D
In rete si trova parecchio materiale in merito. Iscriviti ai forum dedicati e fai domande. Io ho fatto così e sono rimasto sorpreso delle nozioni che ho imparato in breve tempo.
Per ciò che riguarda l'invio automatico di email la questione è abbastanza complessa. Farlo con Access è possibile, malgrado molti sostengano il contrario. Io ci sono riuscito con il codice che ho esposto sopra. Il codice è lanciato in seguito al click di un apposito pulsante presente nella schermata di Access che gestisce il tutto. Il linguaggio è parte integrante del programma ed è possibile programmarlo direttamente in Access.
È comunque una cosa piuttosto complessa da fare. Ma se ti leggi un minimo di materiale sul tema, dovresti in breve tempo capire la logica e riprodurre ciò che ho fatto ed adattarlo alle tue esigenze.
Non posso darti indicazioni più precise, perché non mi dedico più alla questione da parecchio tempo e faccio davvero fatica a ricordare il significato di tutto ciò che ho scritto prima :D
Ci sono evidentemente anche altre alternative. In rete si trovano ad esempio diverse applicazioni a pagamento per la gestione di una mailing list, sicuramente molto più complesse ed affidabili di un codice amatoriale ;)
Se hai la possibilità di affrontare la spesa e se non hai voglia o tempo di dedicarti allo studio nerd di linguaggi di programmazione, ci farei più di un pensiero.
Spero di esserti stato utile. Se hai bisogno altre informazioni, chiedi pure.
In bocca al lupo per il tuo progetto!
Isabella_AA
05-11-2013, 16:24
Grazie Dott. Gonzo; in effetti sto muovendo i primi passi nella direzione suggerita, ho dato un'occhiata al visual basic editor e comincio lontanamente ad intuire alcune dinamiche di funzionamento... :sperem:
Ho creato il database e inserito il codice... ma non riesco ad eseguirlo.... :cry: magari qualcuno del forum può aiutarmi in quest'ultimo passaggio....:ave:
Dottor Gonzo
05-11-2013, 18:11
Per eseguire il codice, devi abbinarlo ad un evento.
La prima riga del mio codice (Private Sub Comando172_Click()) si riferisce proprio a questo. Quando il comando 172 (un pulsante immesso nella schermata di Access) viene premuto, viene eseguito il codice che segue.
Se non ricordo male, esiste anche la possibilità di testare il codice mentre lo stai componendo.
Più di così non riesco ad aiutarti, perché è quasi un anno che non tocco Access...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.