Condividi tramite

selezionare account mittente per invio automatico report

Anonimo
2015-10-06T11:50:27+00:00

Buon giorno a tutti,

facendo riferimento ad un post che ho trovato sul forum ho creato una routine che in automatico invia dei report giornalieri tramite outlook, ora questa procedura funzinona perfettamente.

Ora, è stato deciso che il mittente sarà un indirizzo mail creato ad hoc (tenendo presente che su outlook del miittente sono configurati 3 indirizzi di posta diversi).

ho fatto delle prove con l'istruzione

Set .SendUsingAccount = mailOutlook.Session.Accounts.Item(intero)

ma la mail viene creata sempre con l'indirizzo di posta principale. 

Colgo l'occasione per ringraziarvi per il grande aiuto che ho sempre trovato nella comunuty.

Grazie per il tempo che potrete dedicarmi

Massimiliano

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2015-10-08T10:44:53+00:00

ciao Massimiliano,

bene.

aggiungo: la soluzione che ti ho proposto, instanzia Outlook in late Binding, è bene sincerarsi che l'instanza sia chiusa.

invoca, almeno su scaricamento della form, la distruzione degli oggetti creati, inserendo nel modulo in cui hai la newOlIstance questa sub :

Public Sub setOl2Nothing()

    Set OlApp = Nothing

    Set namespaceOutlook = Nothing

    set folderOL=nothing

End Sub

quindi l'evento su scaricamento diventa così :

Private Sub Form_Unload(Cancel As Integer)

DBEngine(0)(0).Execute "delete * from T_accounts", dbFailOnError

setOl2Nothing

End Sub

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-10-06T14:22:19+00:00

    ciao Massimiliano,

    visualizzi l'id_accounts della tabella t_accounts anziché il nome del mittente se non imposti il numero delle colonne e la loro larghezza in modo corretto per la listbox lstAccounts

    verifica : numero colonne 2 e larghezza colonne : 0cm;5cm, colonna associata : 1.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-10-06T14:15:25+00:00

    Ciao Massimiliano,

    io carico gli accounts disponibili direttamente in una combo presente nella form corrente con il seguente codice:

    Private Sub CaricaAccounts()

        Dim outApp As Object

        Dim outMsg As Object

        Dim i As Integer

        Dim Stringa As String

        On Error Resume Next

        ' Controlla se Outlook è aperto

        Set outApp = GetObject(, "Outlook.Application")

        ' Se Outlook non è aperto, apre una nuova istanza

        If Err Then

            Set outApp = CreateObject("Outlook.Application")

        End If

        On Error GoTo 0

        Set outMsg = outApp.CreateItem(olMailItem)

        For i = 1 To outApp.Session.Accounts.Count

            Stringa = i & ";" & outApp.Session.Accounts.Item(i).DisplayName

            Me.cboMittente.AddItem Stringa

        Next i

        Set outMsg = Nothing

        Set outApp = Nothing

    End Sub

    Con la prima colonna della combo nascosta che è il numero d'ordine che devi utilizzare nell'invio dell'eMail

            With outMsg

                Set .SendUsingAccount = outApp.Session.Accounts.Item(Me.cboMittente)

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-10-06T13:40:09+00:00

    Ciao Sandro,

    grazie per la risposta,

    l'esito della procedura è questo

    io preferirei che fosse tutto automatico, impostando direttamente il mittente, credi che sia possibile?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-10-06T13:12:35+00:00

    ciao Massimiliano,

    prova così.

    crea una tabella t_accounts con questi due campi: id_accounts PK autonumber e outLookAccounts testo.

    crea una form ed inserisci in essa una listbox chiamata lstAccounts numero colonne 2 dimensione 0;5.

    copia il modulo che vedi sotto in un modulo standard e richiama su caricamento della form :

    Private Sub Form_Load()

    loadAccounts Me.lstAccounts

    End Sub

    la listbox dovrebbe popolarsi con gli accounts disponibili.

    da qui credo ti sia facile selezionare dalla listbox l'account da cui mandare l'email.

    Facci sapere.

    Ciao, Sandro.

    codice:

    Option Compare Database

    Option Explicit

    Private OlApp            As Object

    Private folderOL         As Object

    Private namespaceOutlook As Object

    '

    Public Sub newOlIstance()

        On Error Resume Next

        Set OlApp = GetObject(, "Outlook.Application")

        If OlApp Is Nothing Then

            Set OlApp = CreateObject("Outlook.Application")

            Set namespaceOutlook = OlApp.GetNamespace("MAPI")

            Set folderOL = namespaceOutlook.GetDefaultFolder(0)

            folderOL.Display

        Else

            Set namespaceOutlook = OlApp.GetNamespace("MAPI")

        End If

    End Sub

     Public Sub loadAccounts(lst As Access.ListBox)

     On Error GoTo errorLoadAccountHandler

        newOlIstance

        Dim i            As Integer

        Dim strAccounts  As String

        DBEngine(0).BeginTrans

            For i = 1 To OlApp.Session.Accounts.Count

                  CurrentDb.Execute "insert into T_accounts (outLookAccounts) values ('" & OlApp.Session.Accounts.Item(i) & "')", dbFailOnError

            Next i

       DBEngine(0).CommitTrans dbForceOSFlush

       lst.RowSourceType = "table/query"

       lst.RowSource = "T_accounts"

    ext_errorLoadAccountHandler:

        Exit Sub

    errorLoadAccountHandler:

        DBEngine(0).Rollback

        With Err

           MsgBox "ERR#" & .Number _

                & vbNewLine & .Description _

                , vbOKOnly Or vbCritical

         End With

         Resume ext_errorLoadAccountHandler

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento