Newsgroup: it.comp.appl.access
Titolo: Invio mail da Access

Salve a tutti.....
Con questa routine invio un messaggio di posta elettronica da access
ed eventualmente un allegato:
 
Dim ApplOutlook As Outlook.Application
Dim IstanzaOutlook As Object
Dim EMail As Object
Dim Allegato As String
 
 
Set IstanzaOutlook = CreateObject("Outlook.Application")
Set EMail = IstanzaOutlook.CreateItem(olmailitem)
 
 
    With EMail
        .To = Me.Destinatario
        If Not IsNull(Me.DestinatarioCc) Then
        .CC = Me.DestinatarioCc
        End If
        .Subject = Me.Oggetto
        If Me.Allegato <> "" Then
        Allegato = Me.Allegato
        .Attachments.Add Allegato
        End If
        .Body = Me.Testo
        .Send
    End With
 
Set IstanzaOutlook = Nothing
Set EMail = Nothing
 
Tutto funziona benissimo.... ma capita di voler inviare più di un
allegato e a questo punto se nel campo vado a inserire il percorso del
secondo file, la procedura da errore del tipo: percorso non trovato o
simile.
Qualche idea di come indicare diversi file nel campo di tipo testo?
Grazie 1000
Saluti M7a1x

M7a1x ha scritto:

Devi eseguire più volte la riga
   .Attachments.Add Allegato
passando uno ad uno i nomi dei vari file, non eseguirla una volta sola 
passando tutti i nomi assieme.
Ciao.
-Marco-
 
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 - Mostra testo citato -
 
Salve Marco....
Se ho capito bene: Invio la mail col primo allegato; seleziono l'altro
allegato e di nuovo invio? E così via.....
Saluti
M7a1x

 allegato e di nuovo invio? E cosï¿œ via.....
 
Nein!
In luogo di
    .Attachments.Add Allegato
 
scrivi:
    .Attachments.Add Allegato_1
    .Attachments.Add Allegato_2
    .Attachments.Add Allegato_3
    .etc
e tutto il resto non cambia.
 
In fatti Attachments ï¿œ una Collection.
 
Una forma piï¿œ elegante ï¿œ costruirsi
una matrice di N allegati ed ed usare
un For... Next in luogo di
N righe di .Attachments.Add Allegato_...
 
Bruno
 
 

 Bruno
 
Salve Bruno....
Credo di aver trovato la forma più elegante che potevo:
 
Dim ApplOutlook As Outlook.Application
Dim IstanzaOutlook  As Object
Dim EMail As Object
Dim Allegato As String
 
Dim rs As New ADODB.Recordset
Dim Data As String
Dim Ora As String
Dim IDInvio As Integer
 
Dim rsAllegati As New ADODB.Recordset
Dim SQL As String
Dim Records As Integer
Dim I As Integer
 
DoCmd.RunCommand acCmdSaveRecord
 
Data = Date
Ora = Time()
IDInvio = Me.IDMail
 
SQL = "SELECT * FROM AllegatiMail WHERE [AllegatiMail.IDMail] = " &
IDInvio & " ORDER BY [AllegatiMail].[IDMail]"
 
rs.Open "InviiMail", CurrentProject.Connection, adOpenKeyset,
adLockOptimistic
 
Call rsAllegati.Open(SQL, CurrentProject.Connection, adOpenKeyset,
adLockOptimistic)
 
Records = rsAllegati.RecordCount
 
Set IstanzaOutlook = CreateObject("Outlook.Application")
Set EMail = IstanzaOutlook.CreateItem(olmailitem)
 
If MsgBox("Visualizzare la mail prima che sia spedita ai
destinatari?", vbInformation + vbYesNo, "Invio mail") = vbYes Then
    With EMail
        .To = Me.Destinatario
        If Not IsNull(Me.DestinatarioCc) Then
        .CC = Me.DestinatarioCc
        End If
        .Subject = Me.Oggetto
            If Records > 0 Then
                rsAllegati.MoveFirst
                For I = 1 To Records
                Allegato = rsAllegati("Allegato")
        .Attachments.Add Allegato
                rsAllegati.MoveNext
                Next I
            End If
        If Not IsNull(Me.Testo) Then
        .Body = Me.Testo
        End If
        .display
End With
    rs.AddNew 'tiene traccia di tutti gli invii della mail su
appposita tabella
    rs("IDMail").Value = IDInvio
    rs("Data").Value = Data
    rs("Ora").Value = Ora
    rs.Update
    Me.InviiMail.Requery 'aggiorna la subform che indica gli invii
della mail
Else
    With EMail
        .To = Me.Destinatario
        If Not IsNull(Me.DestinatarioCc) Then
        .CC = Me.DestinatarioCc
        End If
        .Subject = Me.Oggetto
            If Records > 0 Then
                rsAllegati.MoveFirst
                For I = 1 To Records
                Allegato = rsAllegati("Allegato")
        .Attachments.Add Allegato
                rsAllegati.MoveNext
                Next I
            End If
        If Not IsNull(Me.Testo) Then
        .Body = Me.Testo
        End If
        .Send
    End With
    rs.AddNew 'tiene traccia di tutti gli invii della mail su
appposita tabella
    rs("IDMail").Value = IDInvio
    rs("Data").Value = Data
    rs("Ora").Value = Ora
    rs.Update
    Me.InviiMail.Requery 'aggiorna la subform che indica gli invii
della mail
End If
 
Set IstanzaOutlook = Nothing
Set EMail = Nothing
 
rs.Close
Set rs = Nothing
 
rsAllegati.Close
Set rsAllegati = Nothing
 
Funziona alla perfezione, proprio come volevo. Grazie per la dritta
(non si è mai troppo lontani per trovare la soluzione)
Saluti
M7a1x

 Credo di aver trovato la forma più elegante che potevo:
[...]
 
Avrei scelto questa variante:
 
Do Until rsAllegati.EOF
   EMail.Attachments.Add rsAllegati![Allegato]
   rsAllegati.MoveNext
Loop
...
 
Ma non cambia niente.
 
Bruno
 
 


Ahi, ahi.... io ho segiuto il tuo consiglio!
Fa nulla, funziona benissimo (il risultato giustifica i mezzi)
Grazie del gentile riscontro.
Distinti saluti
M7a1x