Newsgroup: it.comp.appl.access
Titolo: invio di posta elettronica con allegati

ciao a tutti
 
ho cercato di mettere in pratica dal sito
http://www.freevbcode.com/ShowCode.asp?ID=109
 
per l'invio di mail con allegati,
ma ho quest'errore: tipo definito dall'utente non definito.
Ho provato ad inserire la libreria
vbSendMail.dll sia in System che System32
ativandola dal dos (regsvr32 vbsendmail.dll)
ma nulla di fatto.
 
Accetto consigli anche per soluzioni alternative
 
Grazie
 
 
 

 ha scritto nel messaggio 
news:52c05878$0$1365$4faf...@reader1.news.tin.it...

aggiungo ho Access 2003 con XP ver. 2002 
 
 

 ha scritto nel messaggio 
news:52c05a16$0$1368$4faf...@reader1.news.tin.it...

ho fatto un piccolo passo
ora qui ho variabile non definita
    Set poSendMail = New vbSendMail.clsSendMail 
 
 

 Accetto consigli anche per soluzioni alternative
Usare, saran 20 righe di codice, un client di posta tipo Outlook di 
Office.
 
Bruno
 
 


Grazie Bruno
dove posso trovarlo?
 
 
 

 dove posso trovarlo?
 
Puoi provare ad adattarti questa:
=======================================
Private Sub SendingMailFromTable_Click()
' References:
' Visual Basic for Applications
' Microsoft Outlook 14.0 Object Library
' Microsoft Office 14.0 Object Library
' Microsoft Office 14.0 Access database engine Object Library
' Microsoft Scripting Runtime
'
Dim NewMail As MailItem, S As String, i As Integer
Dim AttachmentArray(1 To 3) As String
Dim FSO As Object, TextStream As Object
Dim db As Database, RS As Recordset
 
Set db = CurrentDb
Set RS = db.OpenRecordset("t_Contacts", dbOpenDynaset)
' Table t_Contacts has 3 Fields:
' CompanyName, Attn, EmailAddress. All the Fields are Text(255).
 
' Some Attachments
AttachmentArray(1) = "D:\aa1.txt"
AttachmentArray(2) = "D:\aa2.txt"
AttachmentArray(3) = "D:\aa3.txt"
 
' C:\aa0.txt is your newsletter
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.OpenTextFile("C:\aa0.txt")
Do Until TextStream.AtEndOfStream
    S = S & vbCrLf & TextStream.ReadLine
Loop
 
Do Until RS.EOF
    Set NewMail = 
CreateObject("Outlook.Application").CreateItem(olMailItem)
    With NewMail
        .To = RS![eMailAddress] ' "aaaaa@aaa; bbbbb@bbb; ccccc@ccc"
        '.CC = "ddddd@ddd; eeeee@eee"
        '.BCC = "fffff@fff; ggggg@ggg"
        .Subject = "My Special Subject"
        .Body = RS![CompanyName] & vbCrLf & "Attn " & RS![Attn] & 
vbCrLf & S
        For i = 1 To 3
            .Attachments.Add AttachmentArray(i)
        Next
        .Send
    End With
    Set NewMail = Nothing
    RS.MoveNext
Loop
 
End Sub
========================================
 
Bruno
 
 

http://www.3stone.be/access/articles.php?lng=fr&pg=89&PHPSESSID=be2hnmtpbck13h8vq42glivjp7
 
 
Saluti
 
@Alex

http://www.3stone.be/access/articles.php?lng=fr&pg=17
 
http://www.3stone.be/access/articles.php?lng=fr&pg=88
 
 
Sempre saluti
@Alex

 ha scritto nel messaggio 
news:52c17edf$0$1381$4faf...@reader1.news.tin.it...

Grazie  Bruno
 
 

 ha scritto nel messaggio 
news:43333775-7490-49fe...@googlegroups.com...

Grazie Alex 
 
 

 ha scritto nel messaggio 
news:52c1845c$1$23126$4faf...@reader2.news.tin.it...

ciao Bruno e Alex
 
quello di cui avrei bisogno io � qualcosa di piu'
elementare, ma credo non fattibile;
su click di un pulsante ho inserito questo codice:
Dim blRet As Boolean
 
blRet = ConvertReportToPDF(Me.lstRptName, vbNullString, _
Me.lstRptName.Value & ".pdf", False, True, 150, "", "", 0, 0, 0)
per aprire con pdf xchange viewer un report trasformato in pdf
 
Poi con "invia per e-mail" apro Outlook Express con l'allegato gi� inserito.
 
Ora �' possibile con access inserire anche gli indirizzi di posta 
elettronica?
Grazie 
 
 

 elettronica?
Il codice che ti ho inviato preleva gli indirizzi da un recordset, gli 
allegati da un array e invia il tutto.
Perï¿œ lo sto perfezionando acciocchï¿œ possa anche fare un buon caffï¿œ.
 
Buon Anno
Bruno
 
 


grazie
l'attendo
Buon Anno
;-) 
 
 

 Usare, saran 20 righe di codice, un client di posta tipo Outlook di Office.
 
in passato con A97 ho mandato via email dei report esportati in html, 
senza problemi, sfruttando la presenza nel computer di outlook express.
 
Nel frattempo pero' l'azienda ha gestito la posta aziendale tramite 
Lotus Notes, che viene interrogata tramite webmail. Nei computer 
aziendali quindi non e' piu' installato nessun cliente di posta e mi sa 
che anche porte 25 ecc. sono sbarrate.
 
Nella rete az. resta accessibile la porta 80, filtrata da un sistema di 
white list.
 
In una situazione del genere che tipo di approccio potrei seguire?
 
 
 
 
 
 
 
 
 
 
 
-- 
Guillotin n'avait coupï¿œ trop peux

Giacobino da Tradate expressed precisely :

Il codice che ho inviato l'ho creato con Office 2003, poi forse (non 
ricordo bene) lievemente modificato per Office 2007, 2010, 2013.
Funziona con l'Outlook di Office, non Outlook Express.
Occorre pertanto verificare che detto Outlook sia installato e che vi 
sia stato aperto un account di posta.
 
Se non puoi installare Outlook prova con vbSendMail.dll citato dall'OP.
Occorrerï¿œ solo qualche lieve modifica per adattare il VB6 al VBA di 
Access.
 
Bruno
 
 


Ciao Bruno
� possibile creare una funzione in modo da richiamarla all'occorenza con 
call,
per non riposrtare ogni volta tutto il codice?
 
 
 

 per non riposrtare ogni volta tutto il codice?
 
Inserisci il codice in un modulo e rinominalo:
        Public Sub SendingMailFromTable
Sarï¿œ disponibile da ovunque entro Access e richiamabile anche passando 
parametri (occorre una lieve modifica al codice).
Non ï¿œ necessario trasformarlo in Function, che Function non ï¿œ: non 
restituisce un valore, ma esegue un'azione.
 
Quali sono i parametri che vorresti passare?
 
Bruno
 
 


Ciao Bruno e grazie
 
ho piu' situazioni.
p.e.
in una maschera (dove ho il pulsante) ho una sottomaschera 
"S_EmailFornitori_2" da query:
SELECT TbEmailFornitori.IdFornitore, TbEmailFornitori.Email, 
TbEmailFornitori.Email_ChiusuraCarico, TbEmailFornitori.Esclusa, 
IIf(IsNull(IIf(Not 
IsNull(DLookUp("Email_ChiusuraCarico","Q_EmailFornitori","IDFornitore= " & 
[IDFornitore])),[Email]=Null,[Email])),[Email_ChiusuraCarico],IIf(Not 
IsNull(DLookUp("Email_ChiusuraCarico","Q_EmailFornitori","IDFornitore= " & 
[IDFornitore])),[Email]=Null,[Email])) AS EmailNew
FROM TbEmailFornitori
WHERE (((IIf(IsNull(IIf(Not 
IsNull(DLookUp("Email_ChiusuraCarico","Q_EmailFornitori","IDFornitore= " & 
[IDFornitore])),[Email]=Null,[Email])),[Email_ChiusuraCarico],IIf(Not 
IsNull(DLookUp("Email_ChiusuraCarico","Q_EmailFornitori","IDFornitore= " & 
[IDFornitore])),[Email]=Null,[Email]))) Is Not Null));
 
che mi mostra le mail dei destinatari.
 
su click del pulsante ho questo codice da completare:
 
            Dim blRet As Boolean
 
            blRet = ConvertReportToPDF(Me.lstRptName, vbNullString, _
            Me.lstRptName.Value & ".pdf", False, True, 150, "", "", 0, 0, 0)
 
richiamando il tuo programma,
per inviare la mail con i vari indirizzi e attachament (che di solito � un 
solo attachament per volta)
 
 

 solo attachament per volta)
 
Di seguito al codice dui sopra (opportunamente adattato):
=========================================================
Dim RS As Recordset, FieldName As String, Message As String
Dim AttachDoc As String, CCstring, BCCstring
 
Set RS = CurrentDb.OpenRecordset("Tua ExprSQL", dbOpenDynaset)
FieldName = "TuoCampoMailAddress"
Message = "Auguri 2014"
AttachDoc = "D:\Pixel.txt"
CCstring = "
brun...@libero.it
"
BCCstring = ""
 
SendingMailFromTable RS, FieldName, Message, AttachDoc, CCstring, 
BCCstring
===========================================================
 
 
 
Quindi Scrivi in un Modulo:
=============================
Public Sub SendingMailFromTable(RS As Recordset, _
           FieldName As String, _
           Message As String, _
           AttachDoc As String, _
           Optional CCstring, _
           Optional BCCstring)
 
Dim NewMail As MailItem
 
Do Until RS.EOF
    Set NewMail = 
CreateObject("Outlook.Application").CreateItem(olMailItem)
    With NewMail
        .To = RS(FieldName)
        .Body = Message
        .Attachments.Add AttachDoc
        .CC = CCstring
        .BCC = BCCstring
        .Subject = "My Special Subject"
        .Send
    End With
    Set NewMail = Nothing
    RS.MoveNext
Loop
 
End Sub
===================================
 
Bruno
 
 

> per inviare la mail con i vari indirizzi e attachament (che di solito � 

Grazie Bruno
posso darci un nome qualsiasi al modulo?
 
 

cut

nel modulo ho errore qui:
Dim NewMail As MailItem


Piero expressed precisely :

Hai una versione di Office inferiore a 2010?
 
Intanto correggi in:
   Dim NewMail As Object
 
Bruno
 
 

   Dim NewMail As Object
 
ok
 
qui mi da variabile non definita "olMailItem"
 
 
 

 qui mi da variabile non definita "olMailItem"
 
Spiacente, non sono in grado di verificare con Office 2003.
Prova a guardare in Tools==>References (Strumenti==>Riferimenti)
se tutto ï¿œ a posto.
 
Bruno
 
 


ciao Bruno
ho un problema in questo punto
        .To = RS(FieldName)
elemento non trovato in quest'insieme
 
 
 

 elemento non trovato in quest'insieme
 
E con olMailItem... risolto?
 
Bruno
 
 

 E con olMailItem... risolto?
no!
al momento ho aggirato l'ostacolo cosi
'Option Explicit 
 
 


Quando esegui il codice in late binding (hai dichiarato as Object) non puoi usare "olMailItem" o qualunque nome appartenente all'oggetto. Devi per forza usare il numero che lo rappresenta, nel tuo caso 0 (vado a memoria).

 'Option Explicit
 
Quando esegui il codice in late binding (hai dichiarato as Object) non puoi 
usare "olMailItem" o qualunque nome appartenente all'oggetto. Devi per forza 
usare il numero che lo rappresenta, nel tuo caso 0 (vado a memoria).
 
 
grazie Fair87
perch� nel mio casi zero?
da dove lo vedi? 
 
 

 ha scritto nel messaggio 
news:52c7c648$0$23125$4faf...@reader2.news.tin.it...

cmq ora non mi chiede piu' di dichiarare la variabile 
 
 


Butta un occhio qua
 
http://www.dicks-clicks.com/excel/olBinding.htm
 

 cmq ora non mi chiede piu' di dichiarare la variabile
 
Butta un occhio qua
 
http://www.dicks-clicks.com/excel/olBinding.htm
 
 
grazie 
 
 

Bruno Campanini wrote :

Questo funziona, testato or ora, con Office 2003 su XP SP3:
===========================================================
Public Sub SendingMailFromTable(RS As Recordset, _
           FieldName As String, _
           Message As String, _
           AttachDoc As String, _
           Optional CCstring, _
           Optional BCCstring)
'
' References:
' ===========
' Visual Basic for Applications
' Microsoft Access 11.0 Object Library
' Microsoft DAO 3.60 Object Library
' Microsoft Outlook 11.0 Object Library
'
Dim olApp As New Outlook.Application
Dim NewMail As Outlook.MailItem
 
Do Until RS.EOF
    Set NewMail = olApp.CreateItem(olMailItem)
    With NewMail
        .To = RS(FieldName)
        .Body = Message
        .Attachments.Add AttachDoc
        .CC = CCstring
        .BCC = BCCstring
        .Subject = "My Special Subject"
        .Send
    End With
    Set NewMail = Nothing
    RS.MoveNext
Loop
 
End Sub
===========================================
 
Bruno
 
 

> se tutto � a posto.

ciao Bruno e grazie
ho l'errore qui:
Dim olApp As New Outlook.Application
Dim NewMail As Outlook.MailItem


>> se tutto ï¿œ a posto.

Sono attivi tutti i Riferimenti che ho indicato?
 
Bruno
 
 

 ha scritto nel messaggio 
news:52c83c78$0$23124$4faf...@reader2.news.tin.it...

mio errore, non avevo spuntato Microsoft Outlook 11.0 Object Library
 
 

 ha scritto nel messaggio 
news:52c840d8$0$23117$4faf...@reader2.news.tin.it...

ciao Bruno
altro problema :
 
Set RS = CurrentDb.OpenRecordset("SELECT TbEmailFornitori.* FROM 
TbEmailFornitori", dbOpenDynaset)
 
If RS.RecordCount > 0 Then
MsgBox RS.RecordCount
Else
MsgBox "no"
End If
 
non � vuoto 1 record c'�
 
FieldName = "Me!S_EmailFornitori_2.form!Email"
 
in questo punto mi esce:
        .To = RS(FieldName)
 
elemento non trovato in questo insieme
e non capisco il perch�.
come posso fare per vedere cosa restituisce la query?
 
 
 
 

 come posso fare per vedere cosa restituisce la query?
 
Passo la mano.
 
Bruno
 
 


grazie cmq 
 
 

 ha scritto nel messaggio 
news:52c853d2$0$23117$4faf...@reader2.news.tin.it...

ciao Bruno
il problema � qui
        .To = RS(FieldName)
evidentemente Access 2003 non lo riconosce
con cosa posso sostituirlo?
Grazie 
 
 

access  lo riconosce eccome. il problema é se esiste. ti sta gridando a gran voce " non esiste sta cosa che tenti di farmi leggere". controlla

 ha scritto nel messaggio 
news:0d485aed-4586-47d5...@googlegroups.com...
access  lo riconosce eccome. il problema � se esiste. ti sta gridando a gran 
voce " non esiste sta cosa che tenti di farmi leggere". controlla
 
ciao Fair87
sicuramente, infatti sto cercando di capire dove sbaglio 
 
 

una domanda
 
Set RS = CurrentDb.OpenRecordset("SELECT TbEmailFornitori.* FROM
TbEmailFornitori", dbOpenDynaset)
 
If RS.RecordCount > 0 Then  
MsgBox RS.RecordCount
Else
MsgBox "no"
End If
 
FieldName = "Me!S_EmailFornitori_2.form!Email"
 
in questo punto mi esce:
        .To = RS(FieldName) 
 
 
CIOE' APRI UN RECORDSET  e poi leggi il valore del campo Email della maschera?
es. "Me!S_EmailFornitori_2.form!Email" ti restituisce --> 
ro...@libero.it
 
 
 
e' logico che non trovi 
il campo 
ro...@libero.it
 

 ha scritto nel messaggio 
news:e52230c2-2872-4454...@googlegroups.com...

ciao pfmarro
a quel punto mi dovrebbe dare gli indirizzi email che ho poi nella 
sottomaschera
Me!S_EmailFornitori_2.form!Email
 
 
 

 > TbEmailFornitori
penso siano le mail dei fornitori
 
forse allora vorrai filtrare i dati del tuo recordset (TbEmailFornitori) in base al valore della sottomaschera?
 
se visualizzi 
msgbox Me!S_EmailFornitori_2.form!Email  ---> cosa ti restituisce?
 
 

msgbox Me!S_EmailFornitori_2.form!Email  ---> cosa ti restituisce?
 
l'oggetto a cui si fa riferimento nell'espressione � stato chiuso o 
eliminato
e sinceramente non capisco il perch�
 
 
 

 e sinceramente non capisco il perch�
 
se apri la maschera con sottomaschera ci sono dati nella sottomaschera?
come si chiama la sottomaschera ?
 
prova
msgbox Me!S_EmailFornitori_2.form.caption --> cosa visualizzi?
c'e' la casella di testo Email? hai altre caselle di testo collegate?
 
 
 

 ha scritto nel messaggio 
news:52cbce56$0$1380$4faf...@reader1.news.tin.it...

aggiungo..
mentre su click di un pulsante nella maschera
msgbox Me!S_EmailFornitori_2.Form!NewEmail
mi mostra il primo indirizzo email che ho nella sottomaschera
 
 

hai altre caselle di testo collegate?
si, Esclusa (campo boelano si/no)
per escludere o meno una determinata email di quel fornitore
 
 
 

 ha scritto nel messaggio 
news:52cbcffb$0$1367$4faf...@reader1.news.tin.it...

mentre sul pulsante
MsgBox Me!S_EmailFornitori_2.Form.Caption
 
da come risultato
SM_EmailFornitori 
 
 

 

allora la casella di testo email non esiste
 
devi usare  Me!S_EmailFornitori_2.Form!NewEmail
 
fatto questo continuo a non capire perche' apri il rs 
 
Set RS = CurrentDb.OpenRecordset("SELECT TbEmailFornitori.* FROM
TbEmailFornitori", dbOpenDynaset)
 
If RS.RecordCount > 0 Then  
MsgBox RS.RecordCount
Else
MsgBox "no"
End If
 
FieldName = "Me!S_EmailFornitori_2.form!Email"
 
in questo punto mi esce:
        .To = RS(FieldName) 
 
e FieldName = nome campo!!! e non valore del campo

e FieldName = nome campo!!! e non valore del campo
 
consigliami cosa fare
 
 

 
non e' + facile creare una query con 
 
TbEmailFornitori  in relazione con Q_EmailFornitori e crearti un campo che metti la mail che ti interessa o metti null?
 

 cmq ? questa il rs

grazie pfmarro
 
io ho pensato a questa soluzione
 
        Dim RS
        Set RS = Me.S_EmailFornitori_2.Form.RecordsetClone
        Me!Pippo.SetFocus
        Do Until RS.EOF
        Me!Pippo = Me!S_EmailFornitori_2.Form!NewEmail & ";"
        RS.MoveNext
        Loop
 
ma nel caso di piu' indirizzi, non riesco ad affiancarli
p.e. 
ro...@libero.it
; 
ve...@libero.it
 
 
 
 


per me stai scegliendo una strada contorta
 
prova a vedere questo esempio di query
http://www.swoopshare.com/file/080b7dec15ed54b364fea90353062d6b/MailConcatenate.mdb.html
 
 
(e' un file .mdb)

 (e' un file .mdb)
 
complimenti!!!
 
aiutami a realizzare anche questa
in modo piu' semplice



COSA INTENDI PER COMPLIMENTI?
 
prova ad inviarmi il file con 2 dati 
utilizza pure 
http://www.swoopshare.com
 per inviarlo 

 Null));
 
COSA INTENDI PER COMPLIMENTI?
che hai capito il problema � risolto
con una ottima query.
confesso che per me era improponibile  questa soluzione.
 
prova ad inviarmi il file con 2 dati
utilizza pure 
http://www.swoopshare.com
 per inviarlo
ok
 
 

 Bruno
 
ciao Bruno
volevo ringraziarti, perch� il tuo programma fuziona.
Il problema lo creava il codice per trasformare il report
in pdf.
 
Ancora grazie. 
 
 

 Ancora grazie.
 
Funziona col solito warning di Outlook 2003: qualcuno sta tentando di 
usare il tuo client di posta elettronica...?
Problema di Programmatic Access che ha fatto tribolare tanti utenti di 
Outlook 2003 e che nessuno ï¿œ riuscito a risolvere, almeno a quei tempi, 
in modo definitivo.
 
Bruno