ASSTO
27-09-2011, 20:14
Ciao a tutti,
nel mio programma ho questa funzione:
Public Sub SendEMail(ByVal destinatari() As String, ByVal oggetto As String, ByVal messaggioHTML As String, ByVal cartellaAllegati As String, ByVal allegaFiles As Boolean)
Dim outlookApp As Object
outlookApp = CreateObject("Outlook.application")
If Process.GetProcessesByName("OUTLOOK").Count > 0 Then
outlookApp = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
Else
outlookApp = New Outlook.Application
Dim ns As Outlook.NameSpace = outlookApp.GetNamespace("MAPI")
ns.Logon("", "", Missing.Value, Missing.Value)
ns = Nothing
End If
Dim mailMessage As Outlook.MailItem = outlookApp.CreateItem(Outlook.OlItemType.olMailItem)
mailMessage.BodyFormat = Outlook.OlBodyFormat.olFormatRichText
mailMessage.Subject = oggetto
Dim elencoDest As String = ""
For i As Int16 = 0 To destinatari.Count - 1
elencoDest = elencoDest & destinatari(i)
Next
If Not destinatari Is Nothing Then
mailMessage.To = elencoDest
End If
If allegaFiles And Directory.Exists(cartellaAllegati) Then
Dim numeroFilesNellaDirectory As Int16 = Directory.GetFiles(cartellaAllegati).Count
If numeroFilesNellaDirectory = 0 Then
messaggioHTML = messaggioHTML & "Non sono presenti allegati."
Else
Dim nFile As Int16 = numeroFilesNellaDirectory - 1
For i As Int16 = 0 To nFile
mailMessage.Attachments.Add(Directory.GetFiles(cartellaAllegati).ElementAt(i))
Next
End If
End If
mailMessage.Body = messaggioHTML
mailMessage.Display()
End Sub
Funziona alla grande su Outlook 2007 e Outlook 2003, ma restituisce un'eccezione riguardo la memoria su Outlook 2000:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt
Inizialmente l'oggetto OutlookApp era dichiarato come:
Dim OutlookApp as Outlook.Application
usando le PIA di Outlook. Poi ho voluto provare a dichiararlo come oggetto generico ma senza risultato (continua a funzionare su 2003 e 2007 ma non sul 2000).
Idee?
nel mio programma ho questa funzione:
Public Sub SendEMail(ByVal destinatari() As String, ByVal oggetto As String, ByVal messaggioHTML As String, ByVal cartellaAllegati As String, ByVal allegaFiles As Boolean)
Dim outlookApp As Object
outlookApp = CreateObject("Outlook.application")
If Process.GetProcessesByName("OUTLOOK").Count > 0 Then
outlookApp = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
Else
outlookApp = New Outlook.Application
Dim ns As Outlook.NameSpace = outlookApp.GetNamespace("MAPI")
ns.Logon("", "", Missing.Value, Missing.Value)
ns = Nothing
End If
Dim mailMessage As Outlook.MailItem = outlookApp.CreateItem(Outlook.OlItemType.olMailItem)
mailMessage.BodyFormat = Outlook.OlBodyFormat.olFormatRichText
mailMessage.Subject = oggetto
Dim elencoDest As String = ""
For i As Int16 = 0 To destinatari.Count - 1
elencoDest = elencoDest & destinatari(i)
Next
If Not destinatari Is Nothing Then
mailMessage.To = elencoDest
End If
If allegaFiles And Directory.Exists(cartellaAllegati) Then
Dim numeroFilesNellaDirectory As Int16 = Directory.GetFiles(cartellaAllegati).Count
If numeroFilesNellaDirectory = 0 Then
messaggioHTML = messaggioHTML & "Non sono presenti allegati."
Else
Dim nFile As Int16 = numeroFilesNellaDirectory - 1
For i As Int16 = 0 To nFile
mailMessage.Attachments.Add(Directory.GetFiles(cartellaAllegati).ElementAt(i))
Next
End If
End If
mailMessage.Body = messaggioHTML
mailMessage.Display()
End Sub
Funziona alla grande su Outlook 2007 e Outlook 2003, ma restituisce un'eccezione riguardo la memoria su Outlook 2000:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt
Inizialmente l'oggetto OutlookApp era dichiarato come:
Dim OutlookApp as Outlook.Application
usando le PIA di Outlook. Poi ho voluto provare a dichiararlo come oggetto generico ma senza risultato (continua a funzionare su 2003 e 2007 ma non sul 2000).
Idee?