Newsgroup: it.comp.appl.access
Titolo: Inviare da codice VBA una e-mail con allegati OUTLOOK 2003

Buongiorno a tutti! sto utilizzando il codice sotto per inviare mail con 
allegati con outlook express.
Tutte le mail che invio me le ritrovo nella posta inviata.
Vorrei fare la stessa cosa ma utilizzando outlook 2003 di office
Qualcuno riesce a darmi una mano per modificare il codice??
Grazie!
Ciao Chita
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
        Dim stDirectory As String
        Dim stNomeFilePre As String
        Dim stNomeFileId As String
        Dim stIndMailTO As String
        Dim stIndMailCC As String
        Dim stIndMailCC1 As String
        Dim stOggettoMail As String
        Dim stTestoMail As String
        Dim stDocName7 As String
        Dim stDocName8 As String
        Dim stDocName9 As String
        Dim NomeFileOrdine
         stDirectory = "C:\documenti\"
         stNomeFilePre = "ord"
         stNomeFileId = Forms!ORDINIFORNITORI!ID
         stIndMailTO = Forms!ORDINIFORNITORI!email
         If Not IsNull(Forms!ORDINIFORNITORI!emailTO) Then
           stIndMailCC = Forms!ORDINIFORNITORI!emailTO
         End If
         If Not IsNull(Forms!ORDINIFORNITORI!emailCC) Then
           stIndMailCC1 = Forms!ORDINIFORNITORI!emailCC
         End If
         stOggettoMail = Forms!ORDINIFORNITORI!OggettoMail
         stTestoMail = Forms!ORDINIFORNITORI!testomail
         Refresh
        'invio il messaggio
         aTO(0) = stIndMailTO
        'invio il messaggio ad un secondo indirizzo ma non � usato vedi il 
modulo inviomailconaccess REM for i
         aTO(1) = stIndMailTO
        aCC(0) = stIndMailCC
        'invio il messaggio ad un secondo indirizzo CC ma essendo nullo non 
lo invia
        aCC(1) = stDocName7
        'invio il messaggio ad un indirizzo CCN nascosto ma essendo nullo 
non lo invia
        aBCC(0) = stDocName8
        'Oggetto della mail
           OBJX = stDocName5 & ": " & stOggettoMail & " " & stDocName4
        'Testo nella mail
        MSGX = stTestoMail
        'vado a leggere il nome del file da inviare e allegare alla mail
        NomeFileOrdine = Dir(stDirectory & stDocName5 & "_" & stDocName3 & 
stDocName4 & ".pdf")
       'verifico se l'allegato � stato inserito
       If NomeFileOrdine = "" Then
         MsgBox "Attenzione non � stato allegato alcun ordine alla mail!", 
vbInformation, "info"
        Exit Sub
       Else
        aFiles(0) = NomeFileOrdine
           MsgBox "Ordine " & NomeFileOrdine & " allegato alla mail!", 
vbInformation, "info"
   '     aFiles(1) = "C:\EMAIL\Quo.ZIP"
    '    aFiles(2) = "C:\DOC\Qua.PDF"
Invia_MSOE aTO, aCC, aBCC, OBJX, MSGX, aFiles

 Qualcuno riesce a darmi una mano per modificare il codice??
[...]
Prova a usare questo:
===================================
Private Sub SendMail_Click()
' Access 2003, Outlook 2003, References:
' Visual Basic for Applications
' Microsoft Access 11.0 Object Library
' Microsoft Outlook 11.0 Object Library
'
Dim NewMail As MailItem, AttachArray(1 To 2) As String, i As Integer
Set NewMail = 
CreateObject("Outlook.Application").CreateItem(olMailItem)
AttachArray(1) = "C:\aa1.txt"
AttachArray(2) = "C:\aa2.txt"
With NewMail
    .To = [eMailAddress]
    .Subject = [eMailSubject]
    .Body = [eMailMessage]
    .CC = "
brun...@libero.it
;
cmp...@gmail.com
"
    For i = 1 To 2
        .Attachments.Add AttachArray(i)
    Next
    .Send
End With
End Sub
==========================================
[eMailAddress], [eMailSubject], [eMailMessage] sono controlli
della scheda dalla quale fai partire la subroutine.
Se devi aumentare gli Attachments modifica AttachArray().
Bruno

 ha scritto nel messaggio
news:4dfb3317$0$18598$4faf...@reader2.news.tin.it...


 ...
Il codice ï¿œ identico.
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 

Prova Questa:
Option Compare Database
Option Explicit
Type MAPIMessage
  Reserved As Long
  Subject As String
  NoteText As String
  MessageType As String
  DateReceived As String
  ConversationID As String
  flags As Long
  RecipCount As Long
  FileCount As Long
End Type
Type MapiRecip
  Reserved As Long
  RecipClass As Long
  Name As String
  Address As String
  EIDSize As Long
  EntryID As String
End Type
Type MapiFile
  Reserved As Long
  flags As Long
  Position As Long
  PathName As String
  FileName As String
  FileType As String
End Type
'Public Dialogue As MAPIMessage
'Private Dialogue As MAPIMessage
'@@@Outlook Express
'Declare Function MAPISendMail Lib "c:\programmi\outlook express\msoe.dll" 
Alias "BMAPISendMail" (ByVal Session&, ByVal UIParam&, Message As 
MAPIMessage, Recipient() As MapiRecip, File() As MapiFile, ByVal flags&, 
ByVal Reserved&) As Long
'@@@Outlook
Declare Function MAPISendMail Lib "MAPI32.DLL" Alias "BMAPISendMail" (ByVal 
Session&, ByVal UIParam&, Message As MAPIMessage, Recipient() As MapiRecip, 
File() As MapiFile, ByVal flags&, ByVal Reserved&) As Long
Global Const SUCCESS_SUCCESS = 0
Global Const MAPI_TO = 1
Global Const MAPI_CC = 2
Global Const MAPI_CCO = 3
Global Const MAPI_LOGON_UI = &H1
Global Const MAPI_DIALOG = &H8
Function SendMail(sSubject As String, sTo As String, sCC As String, sCCO As 
String, sAttach As String, sMessage As String, Optional sImmediateSend As 
Boolean = True) As Long
  Dim MAPI_Message As MAPIMessage
  Dim I As Integer
  Dim cTo As Integer
  Dim cCC As Integer
  Dim cCCO As Integer
  Dim cAttach As Integer
  Dim Dialogue As MAPIMessage
  cTo = CountWords(sTo, ";")
  cCC = CountWords(sCC, ";")
  cCCO = CountWords(sCCO, ";")
  cAttach = CountWords(sAttach, ";")
  ReDim rTo(0 To cTo) As String
  ReDim RCC(0 To cCC) As String
  ReDim rCCO(0 To cCCO) As String
  ReDim rAttach(0 To cAttach) As String
  ParseWords rTo(), sTo, ";"
  ParseWords RCC(), sCC, ";"
  ParseWords rCCO(), sCCO, ";"
  ParseWords rAttach(), sAttach, ";"
  ReDim MAPI_Recip(0 To cTo + cCC + cCCO - 1) As MapiRecip
  For I = 0 To cTo - 1
    MAPI_Recip(I).Name = rTo(I)
    MAPI_Recip(I).RecipClass = MAPI_TO
   Next I
  For I = 0 To cCC - 1
    MAPI_Recip(cTo + I).Name = RCC(I)
    MAPI_Recip(cTo + I).RecipClass = MAPI_CC
  Next I
  For I = 0 To cCCO - 1
    MAPI_Recip(cTo + cCC + I).Name = rCCO(I)
    MAPI_Recip(cTo + cCC + I).RecipClass = MAPI_CCO
  Next I
  ReDim MAPI_File(0 To cAttach) As MapiFile
  MAPI_Message.FileCount = cAttach
  For I = 0 To cAttach - 1
    MAPI_File(I).Position = -1
    MAPI_File(I).PathName = rAttach(I)
  Next I
  MAPI_Message.Subject = sSubject
  MAPI_Message.NoteText = sMessage
  MAPI_Message.RecipCount = cTo + cCC + cCCO
  Dialogue.flags = MAPI_LOGON_UI + MAPI_DIALOG
  'SendMail = MAPISendMail(0&, 0&, MAPI_Message, MAPI_Recip(), MAPI_File(), 
Dialogue.flags, 0) '21/02/2007
  SendMail = MAPISendMail(0&, 0&, MAPI_Message, MAPI_Recip(), MAPI_File(), 
Dialogue.flags, 0&)
  If SendMail Then MsgBox " Email non creata ", 48, "MODULO MAPI"
  VariabileByte = SendMail
End Function
Function CountWords(ByVal sSource As String, ByVal sDelim As String) As 
Integer
  Dim iDelimPos As Integer
  Dim iCount As Integer
  If sSource = "" Then
    CountWords = 0
  Else
    iDelimPos = InStr(1, sSource, sDelim)
    Do Until iDelimPos = 0
      iCount = iCount + 1
      iDelimPos = InStr(iDelimPos + 1, sSource, sDelim)
    Loop
    CountWords = iCount + IIf(Right(sSource, 1) = sDelim, 0, 1)
  End If
End Function
Function GetWords(sSource As String, ByVal sDelim As String) As String
  Dim iDelimPos As Integer
  iDelimPos = InStr(1, sSource, sDelim)
  If (iDelimPos = 0) Then
    GetWords = Trim$(sSource)
    sSource = ""
  Else
    GetWords = Trim$(Left$(sSource, iDelimPos - 1))
    sSource = Mid$(sSource, iDelimPos + 1)
  End If
End Function
Sub ParseWords(mArray() As String, ByVal sTokens As String, ByVal sDelim As 
String)
  Dim I As Integer
  For I = LBound(mArray) To UBound(mArray)
    mArray(I) = GetWords(sTokens, sDelim)
  Next I
End Sub 

 Il codice è identico.


 Riferimenti, ma il riferimento è disabilitato.
Se il riferimento ad Outlook non è attivato la procedura non può 
funzionare.
Da te tale riferimento non è attivabile: solo lui o anche altri?
Bruno

 Strumenti - Riferimenti, ma il riferimento ï¿œ disabilitato.
Non ï¿œ normale, ma Bruno ha giï¿œ chiesto dettagli.
In alternativa puoi provarlo con Late Binding:
Dim olApp As Object
Dim olMail As Object
Dim strAttach(1 To 2) As String
Dim i As Integer
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
AttachArray(1) = "C:\aa1.txt"
AttachArray(2) = "C:\aa2.txt"
With NewMail
    .To = [eMailAddress]
    .Subject = [eMailSubject]
    .Body = [eMailMessage]
    .CC = "
brun...@libero.it
;
cmp...@gmail.com
"
    For i = 1 To 2
        .Attachments.Add strAttach(i)
    Next
    .Send
End With


 Sono andato a vedere su un pc in cui non � installato outlook 2003.
Prova a vederlo su un PC dove si scrive correttamente DOPO il quoting...
Antonio 

 ha scritto nel messaggio
news:iti98n$gt0$1...@speranza.aioe.org...


 Chiedo un'ultima cosa,
Sempre DOPO il quoting
e 2
Antonio 

 ha scritto nel messaggio 
news:itlpp2$se7$1...@speranza.aioe.org...


 piccola maschera ....a chi veniva inviata la mail e l'oggetto!
E comunque non ho compreso questa tua esigenza. C'e' qualche particolare 
"feature" di outlook 2003 che ti interessa?
Io, per esempio, per inviare email non uso nessun prodotto intermedio 
(uso la libreria CDO, altri, la maggioranza qui dentro, usa MAPI -credo-).
Se non ricordo male il sistema (i.e. access) usa il programma di posta 
"predefinito".
Cosa succede se poi vai su una stazione che non ha, o ne ha uno diverso, 
dal mail sender da te scelto (ad es. ThunderBird)?
Rispetto ai tempi di esecuzione non credo che quattro istruzioni cambino 
la vita a meno delle diverse "performances" del prodotto sender.
express e' un prodotto "piu' leggero", probabilmente in prima 
attivazione e' piu' rapido del "non" express, e dovrebbe dirlo la parola 
stessa ;-{)
-- 
ac (x=y-1)

> ....con outlook express l'invio era pi� veloce e veniva specificato con 


>
Groan!!!
come il tek
Antonio 

Ora ho il problema che l'invio avviene solo se apro il programma!
Ciao
Chita


 Chita
Prima esponi tutto o parte significativa del messaggio a cui rispondi,
poi fai seguire la tua risposta.
ï¿œ questo che ti stava dicendo Antionio Biso.
Allora, tenendo comunque presente che non si puï¿œ aver tutto dalla vita:
=======================================
Private Sub SendMail_Click()
' Access 2003, Outlook 2003, References:
' Visual Basic for Applications
' Microsoft Access 11.0 Object Library
' Microsoft Outlook 11.0 Object Library
'
Dim OL As Object, NewMail As MailItem, AttachArray(1 To 2) As String, i 
As Integer
' Indicare l'eseguibile di Outlook
Application.FollowHyperlink "C:\Microsoft Office\Office14\Outlook.exe"
Set OL = CreateObject("Outlook.Application")
Set NewMail = OL.CreateItem(olMailItem)
AttachArray(1) = "C:\aa1.txt"
AttachArray(2) = "C:\aa2.txt"
With NewMail
    .To = [eMailAddress]
    .Subject = [eMailSubject]
    .Body = [eMailMessage]
    .CC = "
brun...@libero.it
;
cmp...@gmail.com
"
    For i = 1 To 2
        .Attachments.Add AttachArray(i)
    Next
    .Send
End With
OL.Application.Quit
End Sub
==============================================
Bruno

 Allora, tenendo comunque presente che non si pu� aver tutto dalla vita:
Bruno, tenendo conto che io per un lavoro simile utilizzavo il file snp di 
access 2003, ma che non tutti riescono a vederlo se non hanno installato il 
viewer e soprattutto con vista o 7 ci sono proprio problemi di 
compatibilit�, come fare per inviare in automatico un report come allegato 
PDF e non SNP?
Se serve qualcosa di esterno deve essere possibile darlo agli utenti finali 
con una installazione semplice
Grazie
Antonio 

 con una installazione semplice
Con Office 2010 ï¿œ semplicissimo:
Apri il report in modalitï¿œ Preview
Click (sul ribbon) in E-mail
Scegli PDF
Si apre Outlook per l'indirizzo etc.
Per automatizzare il tutto... non l'ho mai fatto!
Provo a darci un'occhiata.
Bruno

 Per automatizzare il tutto... non l'ho mai fatto!
Premetto che � escluso il 2010
e cmq deve essere automatizzato perch� il tutto � all'interno di un ciclo 
che invia mail a n indirizzi salvati in rubrica ma ognuno con i dati del 
record in corso
Antonio 

 in corso
Salvati in quale rubrica? in quella di Outlook?
E se sï¿œ, a tutti ovvero secondo un filtro?
Con Office 2003?
Bruno

 Con Office 2003?
no no, in una tabella access
outlook nel mio caso non c'entra nulla
Antonio 

 outlook nel mio caso non c'entra nulla
Questo funziona con Access/Outlook 2010.
Ora non ho tempo di provarlo con Access/Outlook 2003.
Dimmelo tu come va.
===========================================
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) = "C:\aa2.txt"
AttachmentArray(2) = "C:\aa3.txt"
AttachmentArray(3) = "C:\aa4.txt"
' C:\aa1.txt is your newsletter
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.OpenTextFile("C:\aa1.txt")
Do Until TextStream.AtEndOfStream
    S = 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