Newsgroup: it.comp.appl.access
Titolo: Invio mail da maschera continua con allegato .pdf .

buongiorno a tutti.
Ho un problema più grosso di me, praticante Access a livello autodidatta e poco professionale e per il quale chiedo il vostro prezioso aiuto.
Non voglio rompere troppo e quindi spiego meglio la mia necessità.
 
Ho una maschera continua che per i record che devo lavorare mi evidenzia indirizzo, CC, e testo per inviare mail.
Alla mail devo allegare anche una copia, possibilmente in pdf, di altra maschera riferita allo stesso record (numerato con "Progr").
 
Al momento per ciascun record da lavorare:
1 - faccio ctrlC del contenuto e dei destinatari.
2 - da Outlook apro un nuovo messaggio mail ci incollo il testo
3- Scannerizzo la seconda maschera e la allego al messaggio
4 - invio il messaggio e cambio lo status del record.
 
Causa protezione aziendale non penso di poter modificare le impostazione della posta elettronica e quindi di poter eseguire i punti 1 e 2.
 
Sarei già molto "contentissimo" di poter salvare singolarmente (in c:|cartellaX/Progr.pdf) i file della seconda maschera in pdf nominati opportunamente.
 
Grazie infinite a chiunque mi potrà aiutare.


Abbi pazienza ma non si capisce una mazza
 
'..scannerizzo la seconda maschera...' vuol dire che la stampi e la 
passi allo scanner oppure prendi uno schreenshoot?
 
'...non penso di poter modificare impostazioni posta..' vuoi forse 
intendere che non riusciresti a pilotare Outlook da esterno via vba?
 
'...salvare i file della seconda maschera...' intendi gli screenshoot o 
dei report con i dati correnti della seconda maschera (le ultime 
versioni di Access lo fanno nativamente)?
 
Inzomma, spendi qualche minuto a capirti, e soprattutto farci capire 
cosa vuoi ottenere, da quali dati, e sicuramente un valido aiuto arriva
(non si sa quando, ma arriva)
(va che scherzavo)

Per la stampa PDF la puoi fare da REPORT che casualmente è fatto apposta...
Secondo me puoi fare tutto da vba anche la prima parte... qualsiasi siano le policy aziendali... via vba apri il Client di posta e lo usi per inviare mail...
Il tutto è estremamente semplice sfruttando l'automazione di MSO.
Il problema è che se non hai un minimo di basi lo troverai impossibile... ma sono 19 righe di codice...
 
@ALEX

 opportunamente.
 
DoCmd.OutputTo acOutputForm, "Form1", acFormatPDF, "D:\PDF_2.pdf"
 
Questa riga di codice... beh dovrebbe essere chiara la sua
funzione: vedi se può servirti come base di partenza.
 
Bruno

ciao Roberto e grazie anche a tutti gli altri che hanno postato.
Grazie per l'interessamento e per l'aiuto.
Cerco di spiegarmi meglio:
 
Si tratta di un lavoro noioso e ripetitivo che vorrei, per quanto mi è possibile, ottimizzare. Attualmente questo è l'iter. 
Preciso di avere una tabella db contenente n interventi suddivisi per "Progr".
Ecco il mio lavoro certosinoi e giornaliero....
 
 
a) -Apro ciascun intervento e stampo (su carta) il report "cover RDA"
b) -lo faccio firmare dai capi.
c) -lo scannerizzo sulla stampante di rete
d) -ne salvo copia in cartella nominandola con il "progr" 
 
e) nel database apro l'intervento "x"
f) tramite un pulsante ottengo una maschera che mi riporta destinatari oggetto e testo messaggio che copio e incollo su un nuovo messaggio mail
g) allego alla mail il corrispettivo allegato "CoverRDA" e invio
h) nell'intervento "x" vario la casella Status da "aperto" a "inviato"
 
E ' un lavoro da pazzi.....
 
la mia idea che sto cercando di realizzare è questa:
 
Ho già realizzato una maschera continua che contiene gli interventi che devo processare. Ciascun intervento,
ho bisogno di un controllo puntuale, contiene un pulsante che:
 
a-b-c-d-) Stampa su file .pdf il report "cover RDA" contenente le firma già digitalizzate e lo salva in cartella"scansioniRDANapoli":
 
DoCmd.OutputTo acOutputReport, "Cover RDA firmata", acFormatPDF, "D:\scansioniRDANapoli\progr.PDF", False
 
fino a qui sono riuscito, vorrei che il nome file sia il numero [Progr] e ci sto provando.
Ora dovrei riuscire a evitare il lavoro di copia e incolla ma non ho conoscenza, come si sarà capito, del VBA necessario.
 
Grazie a te e a tutti quanti per l'aiuto che mi potrete dare.
 
 

buongiorno Bruno,
è possibile avere una riga di codice per capire se posso inviare un messaggio tramite Outlook, per avere conferma che il mio server di @ sia disponibile ?
La ringrazio molto.

 fino a qui sono riuscito.


 fino a qui sono riuscito.


ignazio.pilone was thinking very hard :

È già strano sentirsi usare il pronome di cortesia fuori dal Web,
che sentirselo usare nel Web...
Vorrei lo evitassi, almeno nei miei confronti.
 
Con una riga di codice si può fare ben poco; con le seguenti
puoi verificare le possibilità di accesso al tuo Outlook:
=========================================
Private Sub Command10_Click()
Dim OL As New outlook.Application, NewMail As MailItem
Dim i As Integer, S As String
Dim AttachmentArray(1 To 3) As String
Dim FSO As Object, TextStream As Object
Dim eMailMessage As String, SendAccount As String
Dim ReceiveAccount As String
 
'---  Definizioni  ----------------------------------
'Testo del messaggio
eMailMessage = "Quando i Romani avevano le palle."
 
' File contenente il corpo del messaggio
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.OpenTextFile("D:\Test\aa0.txt")
Do Until TextStream.AtEndOfStream
    S = S & vbCrLf & TextStream.ReadLine
Loop
 
' Tre file costituenti gli attachment
AttachmentArray(1) = "D:\Test\aa1.txt"
AttachmentArray(2) = "D:\Test\aa2.txt"
AttachmentArray(3) = "D:\Test\aa3.txt"
 
' Indirizzo DAL quale si trasmette
SendAccount = "
xxxxx...@xxxxxx.com
"
 
' Indirizzo AL quale si trasmette
ReceiveAccount = "yyyyy...@yyyyyy.yy"
'----------------------------------------------
 
On Error GoTo SendErr
Set OL = CreateObject("Outlook.Application")
Set NewMail = OL.CreateItem(olMailItem)
With NewMail
    .SendUsingAccount = Session.Accounts(SendAccount)
    .To = ReceiveAccount
    .CC = "wwwww...@wwwwww.ww; zzzzz...@zzzzzz.zz"
    '.BCC = "vvvvv...@vvvvvv.vv; uuuuu...@uuuuuu.uu"
    .Subject = "Prova eMail da Access"
    .Body = eMailMessage & vbCrLf & S
    .ReadReceiptRequested = True ' False
    For i = 1 To 3
        .Attachments.Add AttachmentArray(i)
    Next
    .Send
End With
MsgBox "Sent without Errors!"
 
Exit_Sub:
    Exit Sub
 
SendErr:
    MsgBox "Error n. " & Err.Number & vbCrLf & Err.Description
    Resume Exit_Sub
 
End Sub
==================================
 
Dovrai sostituire i vari xxxxx...@xxxxxx.xx con indirizzi
effettivi e creare i file "D:\Test\aaX.txt" che contengono il
testo e gli allegati, ovvero REMmare le righe di codice che
li riguardano.
 
In Tools-->References dovrai avere:
 - Visual Basic for Applications
 - Microsoft Access 16.0 Object Library
 - Microsoft Outlook 16.0 Object Library
 - Microsoft Office 16.0 Access database engine Object Library
 
O qualcosa di simile riferito alla versione di Office installata
(forse anche Microsoft Scripting Runtime...)
 
Inoltre, dovresti creare un file di testo con estensione .REG
contenente:
===============================
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Outlook\Security]
"ObjectModelGuard"=dword:00000002
 
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security]
"PromptOOMSend"=dword:00000002
"AdminSecurityMode"=dword:00000003
 
===============================
che dovrai eseguire una tantum per consentire l'accesso ad
Outlook da programma (l'ultima riga - come sopra indicato - deve
risultare blank).
 
Per quanto riguarda l'intera automazione del laborioso processo,
direi che è fattibile avendo a disposizione uno stralcio
esemplificativo del database sul quale operarre.
 
Bruno

esemplificativo del database sul quale operare.
 
Ora ci provo e cercherò di approfondire... In caso di difficoltà posso condividere un db ridotto composto di maschera e tabella  ? Avresti voglia di aiutarmi ?
Non so nemmeno dove postare il db...
grazie infinite.

ignazio.pilone pretended :

Puoi inviarlo qui:
brun...@libero.it
 
 
Bruno

buongiorno a tutti.
Provando e riprovando nonostante le mie scarse conoscenze sono riuscito dalla maschera continua, tramite un pulsante che aziona una macro (creato con l'autocomposizione) a "mandar via" le mail.
In realtà questo non avviene, perché per ciascun record mi crea il messaggio @ con tutti i campi che mi interessano e io devo solo premere il tasto dell'invio. Questo per me è già molto e mi va benissimo.
 
Vi chiedo un aiuto importante per il quale non riescirò mai a venirne fuori.
E' possibile in tale macro aggiungere un azione che alleghi alla mail il file .pdf che si chiama come il record e che si trova in D:\RDANapoli\
 
Ad esempio, se il record è il Progr 12345 mi deve allegare il file che è D:\RDANapoli\12345.pdf
 
GRAZIE INFINITE A TUTTI


Non so a che punto sei arrivato e che soluzione hai utilizzato.
Se usi il metodo OutPutTo... non puoi allegare nulla.
Se usi MSO o MAPI puoi fare come vuoi usando il metodo ADD sulla Collection Attachments membro dell'oogetto MAPI Message.
 
objMessage.Attachments.Add "C:\TuoFile.PDF"
 
Tuttavia penso siamo lontani da quetsa cosa....
 
@Alex

 @Alex
 
 
ciao Alex,
io sicuramente sono lontanissimo e non ho nemmeno il GPS, posso quindi contare solo sull'aiuto di questo Forum.
 
Spiego meglio cosa ho fatto, penso con la classica fortuna dell'inesperto.
Nella maschera continua, dove ho tutti i record che devo trasmettere, ho inserito con l'autocomposizione un pulsante che comanda una macro.
Sulle proprietà su click del pulsante vedo (macro incorporata).
Se clicco sui puntini mi apre una videata "includiOggettoDatabaseInMessaggioDiPostaElettronica" dove ho inserito oggetto, testo messaggio, destinatari e cc.
In calce a questa schermata c'è una combobox che mi consente di aggiungere una nuova azione, non capisco però che istruzione dare e se posso allegare il mio file .pdf.
 
grazie infinite per l'aiuto e per la sempre squisita attenzione.


A prescindere, con una MACRO non puoi fare quello che chiedi, a meno di no scrivere una FUNZIONE VBA che poi richiami con la tua macro... ma devi prendere una strada diversa, il VBA, senza il quale hai una rinuncia.
 
@Alex

ok grazie Alex....
Considerando la mia scarsissima capacità in VBA tengo duro fino al 31/12/2017 e continuerò a schiacciare i miei pulsantini.
Dal 1 gennaio 2018 sarò a riposo e quindi smetterò di stressarvi con le mie richieste di aiuto. 
 
grazie infinite per la consulenza.