Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

6.129 Inviare da codice VBA una e-mail con allegati usando Outlook Express

640 views
Skip to first unread message

ignazio.pilone

unread,
Apr 12, 2010, 7:13:25 AM4/12/10
to
Scusate cerco una persona di buona volontà per qualche delucidazione.
Mi piacerebbe riuscire ad utilizzare l'utility in oggetto da una
maschera ma mi manca qualche pezzo...
Ho preso il codice (indicato nell'esempio) e l'ho incollato in un
modulo.
Nella mia maschera (dalla quale dovrei inviare la mail) ho collegato
un pulsante che all'evento click mi esegue il codice del suddetto
modulo.
(Ovviamente) mi compare un box che mi dice: "Email non creata".
Mi è chiaro che dovrei indicare il destinatario, il testo del
messaggio e altri riferimenti "pescati" dalla maschera, ma non capisco
dove e come andare a implementarli.

Io farei una sottomaschera che mediante combinate (indirizzi c./cc/
ccn) e campi testo (valori messaggio) mi autocompone il testo e poi ci
metterei un pulsante per l'invio, ma mi manca come implementare tali
campi.

Qualcuno è così gentile / paziente da aiutarmi ?

grazie infinite
p.s. utilizzo una rete aziendale e non posso installare altri sw come
quelli indicati in altri esempi.

marcopio

unread,
Apr 12, 2010, 8:08:43 AM4/12/10
to

Ciao,
se guardi in fondo al punto 6.129 nel sito comune c'è il codice che
devi chiamare con il tuo click del pulsante.
HTH. mpio.

marcopio

unread,
Apr 12, 2010, 10:49:27 AM4/12/10
to
On 12 Apr, 13:13, "ignazio.pilone" <ignazio.pil...@gmail.com> wrote:

Altro, solo una nota a margine:
dal sito comune si dovrebbe usare:
msoe.dll
Non ho capito il motivo della disfunzione ma a me questo a volte dava
errori all'invio.
Mi son trovato meglio con:
mapi32.dll
(se qualcuno sa dove sbaglio con msoe.dll e lo scrive è sempre
conoscenza gradita)
Comunque è un'idea se tu dovessi aver problemi.
Ciao, mpio.

@Alex

unread,
Apr 12, 2010, 2:47:27 PM4/12/10
to
On 12 Apr, 13:13, "ignazio.pilone" <ignazio.pil...@gmail.com> wrote:

Che io sappia la complesstià di interfacciarsi con OE ha spinto gli
sviluppatori ad evitarlo... in sostanza
nemmeno con le API sembra che non ci sia questa possibilità, anche
perchè non sono direttamente
accessibili da VB/VBA ma solo da C/C++.

Prova a vedere questo:
http://www.it-lang-vb.net/download.asp?file=http://www.it-lang-vb.net/Archivio/Sorgenti/MailOE.zip&ID=597

Non l'ho provato... ma non credo vedendo il codice con NotePad che
possa inviare Allegati....

In alternativa il classico e banale MAPI:
http://www.codeguru.com/forum/attachment.php?s=9378699d77344ce830e0135b4ee0f476&attachmentid=2266&d=1046454452

@Alex

Roberto da Parma

unread,
Apr 12, 2010, 6:07:09 PM4/12/10
to

"ignazio.pilone" <ignazio...@gmail.com> ha scritto nel messaggio
news:c49ffce5-6bdb-46fd...@y14g2000yqm.googlegroups.com...

Scusami ma qual'è in sostanza il tuo problema?
Se hai a disposizione solo outlook express ci sono numerosi modi per
sfruttare OE per inviare email.
I comandi li lanci da access poi naturalmente la gestione è affidata ad OE
però attraverso MAPI puoi fare tutto.
Non ho visto il comando in oggetto ma con la classe MAPI ti puoi
interfacciare bene...
Nella classe MAPI hai :

.AddTo
.Subject
.Body

e compili tutta la tua mail...

Ciao

--
Roberto da Parma

Message has been deleted

ignazio.pilone

unread,
Apr 14, 2010, 1:27:33 PM4/14/10
to
On 13 Apr, 00:07, "Roberto da Parma" <arisi.robe...@tin.it> wrote:
> "ignazio.pilone" <ignazio.pil...@gmail.com> ha scritto nel messaggionews:c49ffce5-6bdb-46fd...@y14g2000yqm.googlegroups.com...
> Roberto da Parma- Nascondi testo citato
>
> - Mostra testo citato -

ciao, grazie a tutti per il prezioso aiuto.
purtroppo mi si blocca su questa istruzione e non capisco il perchè

Public Sub Send1()
Dim r As Long
With mM
If lAf > 0 Then
.FileCount = lAf
.Files = VarPtr(mAf(0))
End If
If lAr > 0 Then
.RecipCount = lAr
.Recipients = VarPtr(mAr(0))
r = MAPISendMail(0, 0, mM, 0, 0)
If r <> 0 Then
If aErrors(r) = "" Then
MsgBox " Email non creata "
Else
MsgBox aErrors(r) & " - Email non creata"
End If
Else
End If
End If
End With
End Sub

qualcuno mi può gentilmente dare una mano ? grazie.

ignazio.pilone

unread,
Apr 16, 2010, 7:11:19 AM4/16/10
to
> qualcuno mi può gentilmente dare una mano ? grazie.- Nascondi testo citato

>
> - Mostra testo citato -

Nessuno sa darmi un contributo ?
Nel codice ho sostituito le variabili a, cc, oggetto e testo con dei
campi ma non funziona lo stesso, nessun'idea da parte Vostra ?
Potrebbe essere che mi manchi qualche libreria ?

Geppo

unread,
Apr 16, 2010, 6:30:37 AM4/16/10
to

e come se non fornisci alcun elemento per aiutarti?

> Nel codice ho sostituito le variabili a, cc, oggetto e testo con dei
> campi ma non funziona lo stesso, nessun'idea da parte Vostra ?

Come sono queste modifiche? Posta il codice.

> Potrebbe essere che mi manchi qualche libreria ?

Uhmm....no non credo.

--
Ciao
Geppo


ignazio.pilone

unread,
Apr 19, 2010, 3:33:12 AM4/19/10
to
> Geppo- Nascondi testo citato

>
> - Mostra testo citato -

ciao Geppo,
grazie per l'aiuto.
Allora ti ricapitolo il mio problema. Ho incollato su un modulo MSOE
il codice di cui all'esempio in oggetto e precisamente:

Private Type MAPIRecip
Reserved As Long
RecipClass As Long
Name As String
Address As String
EIDSize As Long
EntryID As String
End Type

Private Type MAPIFileTag
Reserved As Long
TagLength As Long
Tag() As Byte
EncodingLength As Long
Encoding() As Byte
End Type

Private Type MAPIFile
Reserved As Long
Flags As Long
Position As Long
PathName As String
FileName As String
FileType As Long
End Type

Private Type MAPIMessage
Reserved As Long
Subject As String
NoteText As String
MessageType As String
DateReceived As String
ConversationID As String
Originator As Long
Flags As Long
RecipCount As Long
Recipients As Long
FileCount As Long
Files As Long
End Type

Public Declare Function MAPISendMail Lib "c:\programmi\outlook express
\msoe.dll" (ByVal Session As Long, _
ByVal UIParam As Long, ByRef message As MAPIMessage, ByVal Flags As
Long, ByVal Reserved As Long) As Long

Private Const MAPI_E_NO_LIBRARY = 999
Private Const MAPI_E_INVALID_PARAMETER = 998

Private Const MAPI_ORIG = 0
Private Const MAPI_TO = 1
Private Const MAPI_CC = 2
Private Const MAPI_BCC = 3

Private Const MAPI_UNREAD = 1
Private Const MAPI_RECEIPT_REQUESTED = 2
Private Const MAPI_SENT = 4

Private Const MAPI_LOGON_UI = &H1
Private Const MAPI_NEW_SESSION = &H2
Private Const MAPI_DIALOG = &H8
Private Const MAPI_UNREAD_ONLY = &H20
Private Const MAPI_ENVELOPE_ONLY = &H40
Private Const MAPI_PEEK = &H80
Private Const MAPI_GUARANTEE_FIFO = &H100
Private Const MAPI_BODY_AS_FILE = &H200
Private Const MAPI_AB_NOMODIFY = &H400
Private Const MAPI_SUPPRESS_ATTAch = &H800
Private Const MAPI_FORCE_DOWNLOAD = &H1000

Private Const MAPI_OLE = &H1
Private Const MAPI_OLE_STATIC = &H2

Dim mAf() As MAPIFile
Dim mAr() As MAPIRecip
Dim lAr As Long
Dim lAf As Long
Dim mM As MAPIMessage
Dim aErrors(0 To 26) As String

Private Sub Class_Initialize()
aErrors(0) = "Success"
aErrors(1) = "User Abort"
aErrors(2) = "Failure"
aErrors(3) = "LogIn Failure"
aErrors(4) = "Disk Full"
aErrors(5) = "Insufficient Memory"
aErrors(6) = "Block Too Small"
aErrors(8) = "Too Many Sessions"
aErrors(9) = "Too Many Files"
aErrors(10) = "Too Many Recipients"
aErrors(11) = "Attachment No Found"
aErrors(12) = "Attachment Open Failure"
aErrors(13) = "Attachment Write Failure"
aErrors(14) = "Unknown Recipient"
aErrors(15) = "Bad Recipient"
aErrors(16) = "No Messages"
aErrors(17) = "Invalid Message"
aErrors(18) = "Text Too Large"
aErrors(19) = "Invalid Session"
aErrors(20) = "Type Not Suppported"
aErrors(21) = "Ambiguous Recipient"
aErrors(22) = "Message in Use"
aErrors(23) = "Network Failure"
aErrors(24) = "Invalid Edit Fields"
aErrors(25) = "Invalid Recipient"
aErrors(26) = "Not Supported"
End Sub

Public Sub Azzera_Email()
lAr = 0
lAf = 0
End Sub
Public Sub BCCAddressAdd(ByVal strAddress As String)
RecipientAdd MAPI_BCC, , strAddress
End Sub

Public Sub BCCAdd(ByVal strName As String, ByVal strAddress As String)
RecipientAdd MAPI_BCC, strName
End Sub
Public Sub BCCNameAdd(ByVal strName As String)
RecipientAdd MAPI_BCC, strName, strAddress
End Sub

Public Sub CCAddressAdd(ByVal strAddress As String)
RecipientAdd MAPI_CC, , strAddress
End Sub

Public Sub CCNameAdd(ByVal strName As String)
RecipientAdd MAPI_CC, strName
End Sub

Public Sub MessageIs1(ByVal strNoteText As String)
mM.NoteText = strNoteText
End Sub

Public Sub SubjectIs1(ByVal strSubject As String)
mM.Subject = strSubject
End Sub

Public Sub ToAddressAdd(ByVal strAddress As String)
RecipientAdd MAPI_TO, , strAddress
End Sub

Public Sub ToNameAdd(ByVal strName As String)
RecipientAdd MAPI_TO, strName
End Sub

Public Sub FileAdd(ByVal strPathName As String)
Dim f As MAPIFile
With f
.PathName = StrConv(strPathName, vbFromUnicode)
End With
ReDim Preserve mAf(lAf)
mAf(lAf) = f
lAf = lAf + 1
End Sub


Public Sub Send1()
Dim r As Long
With mM
If lAf > 0 Then
.FileCount = lAf
.Files = VarPtr(mAf(0))
End If
If lAr > 0 Then
.RecipCount = lAr
.Recipients = VarPtr(mAr(0))
r = MAPISendMail(0, 0, mM, 0, 0)
If r <> 0 Then
If aErrors(r) = "" Then
MsgBox " Email non creata "
Else
MsgBox aErrors(r) & " - Email non creata"
End If
Else
End If
End If
End With
End Sub

Public Sub RecipientAdd(ByVal lngType As Long, Optional ByVal strName
As String, Optional ByVal strAddress As String)
Dim r As MAPIRecip
r.RecipClass = lngType
If strName <> "" Then r.Name = StrConv(strName, vbFromUnicode)
If strAddress <> "" Then r.Address = StrConv(strAddress,
vbFromUnicode)
ReDim Preserve mAr(lAr)
mAr(lAr) = r
lAr = lAr + 1
End Sub
Sub Invia_MSOE(TO1 As Variant, CC1 As Variant, BCC1 As Variant, ByVal
OGG1 As String, ByVal MSG1 As String, AFIL1 As Variant)
Dim T1, B1, C1, A1 As Long
'NUOVA TRASMISSIONE
Azzera_Email
'ACCODA TO
For T1 = LBound(TO1) To UBound(TO1)
If TO1(T1) <> "" Then
ToAddressAdd TO1(T1)
Else
MsgBox "MANCA IL DESTINATARIO - CHIUDO"
Exit Sub
End If
Next T1
'ACCODA CC
For C1 = LBound(CC1) To UBound(CC1)
If CC1(C1) <> "" Then
CCAddressAdd CC1(C1)
Else
End If
Next C1
'ACCODA BCC
For B1 = LBound(BCC1) To UBound(BCC1)
If BCC1(B1) <> "" Then
BCCAddressAdd BCC1(B1)
Else
End If
Next B1
'INSERISCI TESTO MESSAGGIO
MessageIs1 MSG1
'INSERISCI OGGETTO MESSAGGIO
SubjectIs1 OGG1
'ACCODA ALLEGATI
For A1 = LBound(AFIL1) To UBound(AFIL1)
If AFIL1(A1) <> "" Then
FileAdd AFIL1(A1)
Else
End If
Next A1
'INVIA
Send1
End Sub


da un amaschera "frmnuovointervento" con un pulsante apro una nuova
maschera collegata ai dati.
Da questa ho un pulsante che su evento sviluppa questo codice:

Private Sub Comando45_Click()
On Error GoTo Err_Comando45_Click

'codice per trasmissione mail
Dim MSGX, OBJX As Variant
Dim aTO(0 To 1) As String
Dim aCC(0 To 1) As String
Dim aBCC(0 To 0) As String
Dim aFiles(0 To 2) As String

aFiles(0) = "C:\EMAIL\Qui.ZIP"
aFiles(1) = "C:\EMAIL\Quo.ZIP"
aFiles(2) = "C:\DOC\Qua.PDF"


aTO(0) = "ignazio...@gmail.com"


aTO(1) = "eta...@pluto.it"

aCC(0) = "benv...@posteitaliane.it"
aCC(1) = "Pape...@pluto.it"

aBCC(0) = "topo...@pluto.it"

OBJX = "prova"
MSGX = "ciao ciao quessto è un testo di prova per la mail"


Invia_MSOE aTO, aCC, aBCC, OBJX, MSGX, aFiles

Exit_Comando45_Click:
Exit Sub

Err_Comando45_Click:
MsgBox Err.Description
Resume Exit_Comando45_Click

End Sub


purtroppo non funziona e mi segnala "email non creata".
grazie infinite per l'aiuto, un caro saluto.

Geppo

unread,
Apr 19, 2010, 10:51:22 AM4/19/10
to
Ciao ignazio.pilone wrote:
----cut----

ma questi file esito nelle relative cartelle?

> aFiles(0) = "C:\EMAIL\Qui.ZIP"
> aFiles(1) = "C:\EMAIL\Quo.ZIP"

e questo?

> aFiles(2) = "C:\DOC\Qua.PDF"

se non sono corretti non va.

hai provato ad inviare una mail senza allegati?

Comunque ho provato il codice e funziona se fai tutto correttamente, infatti
se il tuo indizzo di posta � corretto, dovresti aver ricevuto una mail che
ho inviato con quel codice.

--
Ciao
Geppo


ignazio.pilone

unread,
Apr 20, 2010, 4:07:21 AM4/20/10
to

ciao Geppo,
grazie per l'aiuto.

Allora ho messo gli allegati e non mi funziona lo stesso.
Ho fatto un ulteriore tentativo. Ho creato un nuovo db, ci ho messo il
modulo e un pulsante che su evento chiama il codice:


Private Sub Comando0_Click()


Dim MSGX, OBJX As Variant
Dim aTO(0 To 1) As String
Dim aCC(0 To 1) As String
Dim aBCC(0 To 0) As String
Dim aFiles(0 To 2) As String

aFiles(0) = "D:\MONSTER\allegatimail\Qui.ZIP"
aFiles(1) = "D:\MONSTER\allegatimail\Quo.ZIP"
aFiles(2) = "D:\MONSTER\allegatimail\Qua.PDF"

aTO(0) = "ignazio...@gmail.com"
aTO(1) = "eta...@pluto.it"

aBCC(0) = "topo...@pluto.it"

OBJX = "prova trasmissione mail"
MSGX = "Se ricevi questa mail mi chiami per favore ? 011 7796
869"

Invia_MSOE aTO, aCC, aBCC, OBJX, MSGX, aFiles


End Sub
----------------------------------------------------
A questo punto o sono io che sbaglio nell'evento del pulsante, magari
ho trascurato qualcosa di indispensabile, oppure è il mio outlook che
non mi consente di "forzare" il suo stato.
Ho provato a modificare le protezioni di outlook ma senza esito
positivo.

grazie ancora per l'aiuto

Geppo

unread,
Apr 20, 2010, 4:57:29 PM4/20/10
to

Io il codice l'ho provato è funziona, non è che tu ti trovi in una delle
condizioni prospettate nella faq in oggetto da Alessandro Massarenti (vds
nota in fondo alla faq 6.129)?

Comunque questo è il db su cui ho fatto le prove:

http://www.divshare.com/download/11116695-f63

e tutto funziona.

> grazie ancora per l'aiuto

--
Ciao
Geppo


ignazio.pilone

unread,
Apr 20, 2010, 6:31:00 PM4/20/10
to
> >         aTO(0) = "ignazio.pil...@gmail.com"
> >         aTO(1) = "etab...@pluto.it"
>
> >         aCC(0) = "benveg...@posteitaliane.it"
> >         aCC(1) = "Paper...@pluto.it"
>
> >         aBCC(0) = "topol...@pluto.it"

>
> >         OBJX = "prova trasmissione mail"
> >         MSGX = "Se ricevi questa mail mi chiami per favore ?  011 7796
> > 869"
>
> >         Invia_MSOE aTO, aCC, aBCC, OBJX, MSGX, aFiles
>
> > End Sub
> > ----------------------------------------------------
> > A questo punto o sono io che sbaglio nell'evento del pulsante, magari
> > ho trascurato qualcosa di indispensabile, oppure è il mio outlook che
> > non mi consente di "forzare" il suo stato.
> > Ho provato a modificare le protezioni di outlook ma senza esito
> > positivo.
>
> Io il codice l'ho provato è funziona, non è che tu ti trovi in una delle
> condizioni prospettate nella faq in oggetto da Alessandro Massarenti (vds
> nota in fondo alla faq 6.129)?
>
> Comunque questo è il db su cui ho fatto le prove:
>
> http://www.divshare.com/download/11116695-f63
>
>  e tutto funziona.
>
> > grazie ancora per l'aiuto
>
> --
> Ciao
> Geppo

grazie Geppo, ti posso chiedere una cortesia ?
posso postarti il mio db di prova e tu mi verifiche se a te funziona
l'invio ?
Avrei la certezza matematica che il problema risiede nelle
impostazioni outlook (o altro....)

grazie infinite
p.s. non ho proprio idea di dove poter postare il db..grazie

Geppo

unread,
Apr 21, 2010, 4:04:16 AM4/21/10
to
Ciao ignazio.pilone wrote:
----cut----

> grazie Geppo, ti posso chiedere una cortesia ?
> posso postarti il mio db di prova e tu mi verifiche se a te funziona
> l'invio ?

ma il file che ti hi postato l'hai provato? ti funziona? se non ti funziona
è già chiaro che il problema non è il codice.

> Avrei la certezza matematica che il problema risiede nelle
> impostazioni outlook (o altro....)

Si parla di Outlook Express.

Se il db che tio postato non va, sicuramente.

> grazie infinite
> p.s. non ho proprio idea di dove poter postare il db..grazie

ci sono molti siti ad esempio puoi usare:

http://www.divshare.com/

oppure

skydrive.live.com

--
Ciao
Geppo


0 new messages