Cette Classe permet L'envoi d'e-mail quelque soit votre client de messagerie par défaut elle utilise MAPI. Elle est la modification d'une classe déjà sur code Source end VB6.
Fonctionne avec Vista.
Source / Exemple :
Imports System.Runtime.InteropServices
Public Class MailingClass
Public Enum Mail_Software
DefaultMailSoftware
Smtp
End Enum
Private Function Isnull(ByVal Source As Object, ByVal ReplaceBy As Object) As Object
If Source Is System.DBNull.Value Then
Return ReplaceBy
Else
If Source Is Nothing Then
Return ReplaceBy
Else
Return Source
End If
End If
End Function
'----------------------------------------------------------------------------------------------------------'
' déclaration des types utilisés
'----------------------------------------------------------------------------------------------------------'
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Structure Message
Dim Reserved As Integer
Dim Subject As String
Dim NoteText As String
Dim MessageType As String
Dim DateReceived As String
Dim ConversationID As String
Dim flags As Integer
Dim RecipCount As Integer
Dim FileCount As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Structure Recip
Public Reserved As Integer
Public RecipClass As Integer
<MarshalAs(UnmanagedType.LPTStr)> Public Name As String
<MarshalAs(UnmanagedType.LPTStr)> Public Address As String
Public EIDSize As Integer
<MarshalAs(UnmanagedType.LPTStr)> Public EntryID As String
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Structure File
Public Reserved As Integer
Public flags As Integer
Public POSITION As Integer
<MarshalAs(UnmanagedType.LPTStr)> Public PathName As String
<MarshalAs(UnmanagedType.LPTStr)> Public FileName As String
<MarshalAs(UnmanagedType.LPTStr)> Public FileType As String
End Structure
Private zlParentHwnd, zlSessionID, zlShowDialogs As Integer
Private Const MAPI_DIALOG As Short = &H8S
Private Const MAPI_LOGON_UI As Short = &H1S
Private Const MAPI_TO As Short = 1
Private Const MAPI_CC As Short = 2
Private Const MAPI_CCO As Short = 3
Private Declare Function GetActiveWindow Lib "user32" () As Integer
Private Declare Function MAPILogon Lib "MAPI32.DLL" (ByVal lUIParam As Integer, ByVal user As String, ByVal Password As String, ByVal lFlags As Integer, ByVal lReserved As Integer, ByRef lSession As Integer) As Integer
Private Declare Function MAPILogoff Lib "MAPI32.DLL" (ByVal lSession As Integer, ByVal lUIParam As Integer, ByVal lFlags As Integer, ByVal lReserved As Integer) As Integer
Private Declare Function MAPISendMailOE Lib "C:\Program Files\Outlook Express\msoe.dll" Alias "BMAPISendMail" (ByVal session As Integer, ByVal UIParam As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef Message As Message, <MarshalAs(UnmanagedType.SafeArray)> ByRef Recipient() As Recip, <MarshalAs(UnmanagedType.SafeArray)> ByRef File() As File, ByVal flags As Integer, ByVal Reserved As Integer) As Integer
Private Declare Function MAPISendMailWM Lib "C:\Program Files\Windows Mail\msoe.dll" Alias "BMAPISendMail" (ByVal session As Integer, ByVal UIParam As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef Message As Message, <MarshalAs(UnmanagedType.SafeArray)> ByRef Recipient() As Recip, <MarshalAs(UnmanagedType.SafeArray)> ByRef File() As File, ByVal flags As Integer, ByVal Reserved As Integer) As Integer
'Private Declare Function MAPISendMailWM Lib "C:\msoe.dll" Alias "BMAPISendMail" (ByVal session As Integer, ByVal UIParam As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef Message As Message, <MarshalAs(UnmanagedType.SafeArray)> ByRef Recipient() As Recip, <MarshalAs(UnmanagedType.SafeArray)> ByRef File() As File, ByVal flags As Integer, ByVal Reserved As Integer) As Integer
Private Declare Function MAPISendMail Lib "MAPI32.DLL" Alias "BMAPISendMail" (ByVal session As Integer, ByVal UIParam As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef Message As Message, <MarshalAs(UnmanagedType.SafeArray)> ByRef Recipient() As Recip, <MarshalAs(UnmanagedType.SafeArray)> ByRef File() As File, ByVal flags As Integer, ByVal Reserved As Integer) As Integer
Private Declare Function MAPILogon12 Lib "C:\Program Files\Microsoft Office\Office12\OLMAPI32.DLL" (ByVal lUIParam As Integer, ByVal user As String, ByVal Password As String, ByVal lFlags As Integer, ByVal lReserved As Integer, ByRef lSession As Integer) As Integer
Private Declare Function MAPILogoff12 Lib "C:\Program Files\Microsoft Office\Office12\OLMAPI32.DLL" (ByVal lSession As Integer, ByVal lUIParam As Integer, ByVal lFlags As Integer, ByVal lReserved As Integer) As Integer
Private Declare Function MAPISendMailO12 Lib "C:\Program Files\Microsoft Office\Office12\OLMAPI32.DLL" Alias "BMAPISendMail" (ByVal session As Integer, ByVal UIParam As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef Message As Message, <MarshalAs(UnmanagedType.SafeArray)> ByRef Recipient() As Recip, <MarshalAs(UnmanagedType.SafeArray)> ByRef File() As File, ByVal flags As Integer, ByVal Reserved As Integer) As Integer
Public Function SendMail(ByVal MailTo As String, ByVal Subject As String, Optional ByVal Body As String = Nothing, Optional ByVal Attachments() As String = Nothing, Optional ByVal MailFrom As String = Nothing, Optional ByVal Host As String = Nothing, Optional ByVal DirectSend As Boolean = False, Optional ByVal CC As String = Nothing, Optional ByVal CCO As String = Nothing, Optional ByVal MailingMethod As Mail_Software = Mail_Software.DefaultMailSoftware) As Boolean
'Controle de l'adresse
If MailTo = Nothing Then
Throw New Exception("Adresse destinataire non définie")
Return False
End If
If MailTo.LastIndexOf("@") = -1 Or MailTo.LastIndexOf(".") = -1 Then
Throw New Exception("Adresse Destinataire Mal orthographiée")
Return False
End If
Dim DefaultSoft As String = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Clients\Mail\", False).GetValue("")
If MailingMethod = Mail_Software.Smtp Then DefaultSoft = "Smtp"
Dim X As Integer
Dim MAPI_Message As Message = Nothing
Dim Nto As Integer = CountWords(MailTo, ";")
Dim NCC As Integer = CountWords(CC, ";")
Dim NCCO As Integer = CountWords(CCO, ";")
Dim MAPI_recip(Nto + NCC + NCCO - 1) As Recip
Dim MAPI_file(Attachments.Length - 1) As File
Dim Dialog As Integer = 1
Select Case DefaultSoft
Case "Outlook Express", "Microsoft Outlook", "Microsoft Office Outlook", "Outlook", "Windows Mail"
If Not DirectSend Then Dialog = 9
MAPI_Message.Subject = Subject
MAPI_Message.NoteText = Isnull(Body, "")
MAPI_Message.RecipCount = MAPI_recip.Length
For X = 0 To Nto - 1
MAPI_recip(X).Name = Isnull(MailTo, "").Split(";")(X)
MAPI_recip(X).RecipClass = MAPI_TO
Next
For X = 0 To NCC - 1
MAPI_recip(Nto + X).Name = Isnull(CC, "").Split(";")(X)
MAPI_recip(Nto + X).RecipClass = MAPI_CC
Next
For X = 0 To NCCO - 1
MAPI_recip(Nto + NCC + X).Name = Isnull(CC, "").Split(";")(X)
MAPI_recip(Nto + NCC + X).RecipClass = MAPI_CCO
Next
MAPI_Message.FileCount = MAPI_file.Length
For X = 0 To Attachments.Length - 1
MAPI_file(X).POSITION = -1
MAPI_file(X).PathName = Attachments(X)
Next
Case Else
DefaultSoft = "Smtp"
End Select
Try
Select Case DefaultSoft
Case "Outlook Express"
SendMail = MAPISendMailOE(0, 0, MAPI_Message, MAPI_recip, MAPI_file, Dialog, 0)
Case "Microsoft Outlook", "Outlook", "Microsoft Office Outlook"
Logon("Outlook", "")
SendMail = MAPISendMail(zlSessionID, 0, MAPI_Message, MAPI_recip, MAPI_file, Dialog, 0)
LogOff()
'Case
'Logon12("Outlook", "")
'SendMail = MAPISendMailO12(zlSessionID, 0, MAPI_Message, MAPI_recip, MAPI_file, Dialog, 0)
'LogOff12()
Case "Windows Mail"
SendMail = MAPISendMailWM(0, 0, MAPI_Message, MAPI_recip, MAPI_file, Dialog, 0)
Case "Smtp"
If MailFrom.LastIndexOf("@") = -1 Or MailFrom.LastIndexOf(".") = -1 Then
Throw New Exception("Adresse Expéditeur Mal orthographiée, ou non renseigné" + vbCrLf + "Vous pouvez la définir pour chaque utilisateur dans Administration - Les Renseignements utilisateur")
Return False
End If
Dim Mail As New System.Net.Mail.MailMessage
Mail.To.Add(MailTo)
Mail.From = New System.Net.Mail.MailAddress(MailFrom)
Mail.Subject = Subject
Mail.Body = Body
If Not Attachments Is Nothing Then
For X = 0 To Attachments.Length - 1
Mail.Attachments.Add(New System.Net.Mail.Attachment(Attachments(X)))
Next
End If
Try
Dim Smtp As New System.Net.Mail.SmtpClient(Host)
Smtp.Send(Mail)
Catch
Throw New Exception("L'hôte SMTP n'a pas été défini, vous pouvez le faire dans Administration - Paramètres Généraux")
End Try
End Select
Catch ex As Exception
Throw ex
End Try
Return True
End Function
Private Function CountWords(ByVal st As String, ByVal Ch As Char) As Integer
If st = Nothing Then Return 0
st = st.Trim
If st.LastIndexOf(Ch) = st.Length - 1 Then st = st.Remove(st.Length - 1, 1)
Return st.Split(Ch).Length
End Function
'----------------------------------------------------------------------------------------------------------'
' je sais plus
'----------------------------------------------------------------------------------------------------------'
Private Sub Class_Initialize_Renamed()
zlShowDialogs = MAPI_DIALOG
zlParentHwnd = GetActiveWindow 'Seed parent window handle
End Sub
'----------------------------------------------------------------------------------------------------------'
' Connection au compte MAPI Outlook (pas Express)
'----------------------------------------------------------------------------------------------------------'
Private Sub Logon(Optional ByRef zsusername As String = Nothing, Optional ByRef zspassword As String = "")
' renvoit 0 si ok
Dim lReturnValue As Integer
If zsusername = Nothing Then
zsusername = "Outlook"
zspassword = ""
End If
Class_Initialize_Renamed()
Try
If zlSessionID Then
'End existing session
LogOff()
zlSessionID = 0
End If
zlSessionID = 0
lReturnValue = MAPILogon(zlParentHwnd, zsusername, zspassword, MAPI_LOGON_UI, 0, zlSessionID)
Catch ex As Exception
End Try
End Sub
Private Sub Logon12(Optional ByRef zsusername As String = Nothing, Optional ByRef zspassword As String = "")
' renvoit 0 si ok
Dim lReturnValue As Integer
If zsusername = Nothing Then
zsusername = "Outlook"
zspassword = ""
End If
Class_Initialize_Renamed()
Try
If zlSessionID Then
'End existing session
LogOff()
zlSessionID = 0
End If
zlSessionID = 0
lReturnValue = MAPILogon12(zlParentHwnd, zsusername, zspassword, MAPI_LOGON_UI, 0, zlSessionID)
Catch ex As Exception
End Try
End Sub
'----------------------------------------------------------------------------------------------------------'
' Deconnection du compte
'----------------------------------------------------------------------------------------------------------'
Private Function LogOff() As Integer 'retourne 0 si ok
If zlSessionID Then
Return MAPILogoff(zlSessionID, zlParentHwnd, 0, 0)
zlSessionID = 0
End If
End Function
Private Function LogOff12() As Integer 'retourne 0 si ok
If zlSessionID Then
Return MAPILogoff12(zlSessionID, zlParentHwnd, 0, 0)
zlSessionID = 0
End If
End Function
End Class
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.