Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENVOI DE MAIL(MAILING ET/OU MAILBOMBING, ENVOI SYNCHRONE/ASYNCHRONE


Information sur la source

Catégorie :VB.NET Classé sous : Mail, Asynchrone, smtp Niveau : Débutant Date de création : 31/12/2008 Date de mise à jour : 31/12/2008 16:57:40 Vu : 2 101

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Voila une petite source (ma première) qui permet d'envoyer un/des mail(s) a une/plusieurs personne(s). Elle prend en charge l'envoi asynchrone des données et la synchronisation des threads. Toute critique est la bienvenue surtout négative :) Il est possible que j'ai oublié des trucs car je l'ai fait ce matin mêmef en 30 min.
 

Source

  • Imports System.Net.Mail
  • Imports System.Runtime.CompilerServices
  • Imports System.Runtime.InteropServices
  • Imports System.Text.RegularExpressions
  • Imports System.IO
  • Imports System.Threading
  • Imports System.ComponentModel
  • <Serializable(), StructLayout(LayoutKind.Auto)> _
  • Public Class Mail
  • <Serializable()> _
  • Public Class MailMessage
  • Private Mail_Src As String ' Adresse source
  • Private Mail_Dest As List(Of String) 'Adresse(s) de destination
  • Private Mail_Nbr_Mail_By_Dest As ULong ' Nombre de message par personne
  • Private Mail_Subject As String 'Sujet
  • Private Mail_Body As String ' Corps
  • Private Mail_Attachment_Path As String 'Fichier d'attache
  • Private Mail_Is_Html As Boolean ' Si le mail est en html
  • Private Mail_Smtp_Addr As String 'Adresse du serveur smtp
  • Public Sub New()
  • End Sub
  • Public Sub New(ByVal MailMsg As MailMessage)
  • Mail_Src = MailMsg.Mail_Src
  • Mail_Dest = MailMsg.Mail_Dest
  • Mail_Nbr_Mail_By_Dest = MailMsg.Mail_Nbr_Mail_By_Dest
  • Mail_Subject = MailMsg.Mail_Subject
  • Mail_Body = MailMsg.Mail_Body
  • Mail_Attachment_Path = MailMsg.Mail_Attachment_Path
  • Mail_Is_Html = MailMsg.Mail_Is_Html
  • Mail_Smtp_Addr = MailMsg.Mail_Smtp_Addr
  • End Sub
  • Public Sub New(ByVal Src As String, ByVal Dest As List(Of String), _
  • ByVal NbrMailDest As ULong, ByVal Subject As String, ByVal Body As String, _
  • ByVal Attachment As String, ByVal IsHtml As Boolean, ByVal SmtpAddr As String)
  • Mail_Src = Src
  • Mail_Dest = Dest
  • Mail_Nbr_Mail_By_Dest = NbrMailDest
  • Mail_Subject = Subject
  • Mail_Body = Body
  • Mail_Attachment_Path = Attachment
  • Mail_Is_Html = IsHtml
  • Mail_Smtp_Addr = SmtpAddr
  • End Sub
  • Public Property GetSrc() As String
  • Set(ByVal value As String)
  • Mail_Src = value
  • End Set
  • Get
  • Return Mail_Src
  • End Get
  • End Property
  • Public Property GetNbrMailByDest() As ULong
  • Set(ByVal value As ULong)
  • Mail_Nbr_Mail_By_Dest = value
  • End Set
  • Get
  • Return Mail_Nbr_Mail_By_Dest
  • End Get
  • End Property
  • Public Property GetDests() As List(Of String)
  • Set(ByVal value As List(Of String))
  • Mail_Dest = value
  • End Set
  • Get
  • Return Mail_Dest
  • End Get
  • End Property
  • Public Property GetSubject() As String
  • Set(ByVal value As String)
  • Mail_Subject = value
  • End Set
  • Get
  • Return Mail_Subject
  • End Get
  • End Property
  • Public Property GetBody() As String
  • Set(ByVal value As String)
  • Mail_Body = value
  • End Set
  • Get
  • Return Mail_Body
  • End Get
  • End Property
  • Public Property GetAttachmentPath() As String
  • Set(ByVal value As String)
  • Mail_Attachment_Path = value
  • End Set
  • Get
  • Return Mail_Attachment_Path
  • End Get
  • End Property
  • Public Property GetIsHtml() As Boolean
  • Set(ByVal value As Boolean)
  • Mail_Is_Html = value
  • End Set
  • Get
  • Return Mail_Is_Html
  • End Get
  • End Property
  • Public Property GetSmtpAddr() As String
  • Set(ByVal value As String)
  • Mail_Smtp_Addr = value
  • End Set
  • Get
  • Return Mail_Smtp_Addr
  • End Get
  • End Property
  • End Class
  • Private MailMsg As MailMessage
  • Private SendingResult As IAsyncResult
  • Private Canceled As Boolean = False
  • Public Shared IsActive As Boolean = False
  • Private Delegate Sub InvokeSend()
  • Private DelegSend As InvokeSend
  • Private NbrMail As ULong
  • Private NbrMailsSent As ULong = 1
  • Public Event Message_Sent As EventHandler
  • Public Event Sending_Error As EventHandler
  • Public Event MailAddressSent As EventHandler
  • Public Sub New(ByVal Mail_Msg As MailMessage)
  • MailMsg = Mail_Msg
  • If MailMsg.GetDests.Count = 1 Then
  • 'Calcule le nombre de messages total à envoyer
  • NbrMail = MailMsg.GetNbrMailByDest
  • Else
  • 'Calcule le nombre de messages total à envoyer
  • NbrMail = (MailMsg.GetNbrMailByDest * MailMsg.GetDests.Count - 1)
  • End If
  • End Sub
  • Public ReadOnly Property GetNbrMail() As ULong
  • Get
  • Return NbrMail
  • End Get
  • End Property
  • Public ReadOnly Property GetCanceled() As Boolean
  • Get
  • Return Canceled
  • End Get
  • End Property
  • Public WriteOnly Property SetCanceled() As Boolean
  • Set(ByVal value As Boolean)
  • Canceled = value
  • End Set
  • End Property
  • Public ReadOnly Property GetIsActive() As Boolean
  • Get
  • Return IsActive
  • End Get
  • End Property
  • <MethodImpl(MethodImplOptions.Synchronized)> _
  • Public Function Send() As Boolean
  • IsActive = True
  • Try
  • For Each Addr_Dest As String In MailMsg.GetDests
  • RaiseEvent MailAddressSent(DirectCast(Addr_Dest, Object), EventArgs.Empty)
  • Dim Mail As New System.Net.Mail.MailMessage
  • Mail.From = New MailAddress(MailMsg.GetSrc)
  • Mail.To.Clear()
  • Mail.To.Add(Addr_Dest)
  • Mail.Body = MailMsg.GetBody
  • Mail.Subject = MailMsg.GetSubject
  • Mail.IsBodyHtml = MailMsg.GetIsHtml
  • Dim Mail_Smtp As New SmtpClient
  • Mail_Smtp.Host = MailMsg.GetSmtpAddr
  • For Nbr_Msg_Sending As ULong = 0 To MailMsg.GetNbrMailByDest
  • If Canceled Then
  • IsActive = False
  • Return False
  • End If
  • Mail_Smtp.Send(Mail)
  • RaiseEvent Message_Sent(NbrMailsSent, EventArgs.Empty)
  • NbrMailsSent += 1
  • Next Nbr_Msg_Sending
  • Next
  • IsActive = False
  • Return True
  • Catch ex As Exception
  • RaiseEvent Sending_Error(DirectCast(ex, Object), EventArgs.Empty)
  • Canceled = True
  • IsActive = False
  • Return False
  • Finally
  • End Try
  • End Function
  • Public Sub BeginSend()
  • DelegSend = New InvokeSend(AddressOf Send)
  • SendingResult = DelegSend.BeginInvoke(Nothing, Nothing)
  • End Sub
  • Public Function EndSend() As Boolean
  • If Canceled OrElse DelegSend IsNot Nothing Then
  • Return Nothing
  • Else
  • DelegSend.EndInvoke(SendingResult)
  • End If
  • End Function
  • Public Sub CancelSending()
  • If Not Canceled AndAlso DelegSend IsNot Nothing Then
  • Canceled = True
  • DelegSend.EndInvoke(SendingResult)
  • End If
  • End Sub
  • REM Verie si une adresse email est conforme syntaxiquement
  • Public Shared Function IsValidMail(ByVal AddrMail As String) As Boolean
  • Dim RegVerify As New Regex("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")
  • Return RegVerify.IsMatch(AddrMail)
  • End Function
  • End Class
Imports System.Net.Mail
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Threading
Imports System.ComponentModel

<Serializable(), StructLayout(LayoutKind.Auto)> _
Public Class Mail

    <Serializable()> _
    Public Class MailMessage

        Private Mail_Src As String ' Adresse source
        Private Mail_Dest As List(Of String) 'Adresse(s) de destination
        Private Mail_Nbr_Mail_By_Dest As ULong ' Nombre de message par personne
        Private Mail_Subject As String 'Sujet
        Private Mail_Body As String ' Corps
        Private Mail_Attachment_Path As String 'Fichier d'attache
        Private Mail_Is_Html As Boolean ' Si le mail est en html
        Private Mail_Smtp_Addr As String 'Adresse du serveur smtp

        Public Sub New()

        End Sub

        Public Sub New(ByVal MailMsg As MailMessage)

            Mail_Src = MailMsg.Mail_Src
            Mail_Dest = MailMsg.Mail_Dest
            Mail_Nbr_Mail_By_Dest = MailMsg.Mail_Nbr_Mail_By_Dest
            Mail_Subject = MailMsg.Mail_Subject
            Mail_Body = MailMsg.Mail_Body
            Mail_Attachment_Path = MailMsg.Mail_Attachment_Path
            Mail_Is_Html = MailMsg.Mail_Is_Html
            Mail_Smtp_Addr = MailMsg.Mail_Smtp_Addr

        End Sub

        Public Sub New(ByVal Src As String, ByVal Dest As List(Of String), _
        ByVal NbrMailDest As ULong, ByVal Subject As String, ByVal Body As String, _
        ByVal Attachment As String, ByVal IsHtml As Boolean, ByVal SmtpAddr As String)

            Mail_Src = Src
            Mail_Dest = Dest
            Mail_Nbr_Mail_By_Dest = NbrMailDest
            Mail_Subject = Subject
            Mail_Body = Body
            Mail_Attachment_Path = Attachment
            Mail_Is_Html = IsHtml
            Mail_Smtp_Addr = SmtpAddr

        End Sub

        Public Property GetSrc() As String
            Set(ByVal value As String)
                Mail_Src = value
            End Set
            Get
                Return Mail_Src
            End Get
        End Property

        Public Property GetNbrMailByDest() As ULong
            Set(ByVal value As ULong)
                Mail_Nbr_Mail_By_Dest = value
            End Set
            Get
                Return Mail_Nbr_Mail_By_Dest
            End Get
        End Property

        Public Property GetDests() As List(Of String)
            Set(ByVal value As List(Of String))
                Mail_Dest = value
            End Set
            Get
                Return Mail_Dest
            End Get
        End Property

        Public Property GetSubject() As String
            Set(ByVal value As String)
                Mail_Subject = value
            End Set
            Get
                Return Mail_Subject
            End Get
        End Property

        Public Property GetBody() As String
            Set(ByVal value As String)
                Mail_Body = value
            End Set
            Get
                Return Mail_Body
            End Get
        End Property

        Public Property GetAttachmentPath() As String
            Set(ByVal value As String)
                Mail_Attachment_Path = value
            End Set
            Get
                Return Mail_Attachment_Path
            End Get
        End Property

        Public Property GetIsHtml() As Boolean
            Set(ByVal value As Boolean)
                Mail_Is_Html = value
            End Set
            Get
                Return Mail_Is_Html
            End Get
        End Property

        Public Property GetSmtpAddr() As String
            Set(ByVal value As String)
                Mail_Smtp_Addr = value
            End Set
            Get
                Return Mail_Smtp_Addr
            End Get
        End Property

    End Class

    Private MailMsg As MailMessage
    Private SendingResult As IAsyncResult
    Private Canceled As Boolean = False
    Public Shared IsActive As Boolean = False
    Private Delegate Sub InvokeSend()
    Private DelegSend As InvokeSend
    Private NbrMail As ULong
    Private NbrMailsSent As ULong = 1
    Public Event Message_Sent As EventHandler
    Public Event Sending_Error As EventHandler
    Public Event MailAddressSent As EventHandler

    Public Sub New(ByVal Mail_Msg As MailMessage)

        MailMsg = Mail_Msg
        If MailMsg.GetDests.Count = 1 Then
            'Calcule le nombre de messages total à envoyer
            NbrMail = MailMsg.GetNbrMailByDest
        Else
            'Calcule le nombre de messages total à envoyer
            NbrMail = (MailMsg.GetNbrMailByDest * MailMsg.GetDests.Count - 1)
        End If

    End Sub

    Public ReadOnly Property GetNbrMail() As ULong

        Get
            Return NbrMail
        End Get

    End Property

    Public ReadOnly Property GetCanceled() As Boolean

        Get
            Return Canceled
        End Get

    End Property

    Public WriteOnly Property SetCanceled() As Boolean

        Set(ByVal value As Boolean)
            Canceled = value
        End Set

    End Property

    Public ReadOnly Property GetIsActive() As Boolean

        Get
            Return IsActive
        End Get

    End Property

    <MethodImpl(MethodImplOptions.Synchronized)> _
    Public Function Send() As Boolean

        IsActive = True
        Try
            For Each Addr_Dest As String In MailMsg.GetDests
                RaiseEvent MailAddressSent(DirectCast(Addr_Dest, Object), EventArgs.Empty)
                Dim Mail As New System.Net.Mail.MailMessage
                Mail.From = New MailAddress(MailMsg.GetSrc)
                Mail.To.Clear()
                Mail.To.Add(Addr_Dest)
                Mail.Body = MailMsg.GetBody
                Mail.Subject = MailMsg.GetSubject
                Mail.IsBodyHtml = MailMsg.GetIsHtml
                Dim Mail_Smtp As New SmtpClient
                Mail_Smtp.Host = MailMsg.GetSmtpAddr
                For Nbr_Msg_Sending As ULong = 0 To MailMsg.GetNbrMailByDest
                    If Canceled Then
                        IsActive = False
                        Return False
                    End If
                    Mail_Smtp.Send(Mail)
                    RaiseEvent Message_Sent(NbrMailsSent, EventArgs.Empty)
                    NbrMailsSent += 1
                Next Nbr_Msg_Sending
            Next
            IsActive = False
            Return True
        Catch ex As Exception
            RaiseEvent Sending_Error(DirectCast(ex, Object), EventArgs.Empty)
            Canceled = True
            IsActive = False
            Return False
        Finally
        End Try

    End Function

    Public Sub BeginSend()

        DelegSend = New InvokeSend(AddressOf Send)
        SendingResult = DelegSend.BeginInvoke(Nothing, Nothing)

    End Sub

    Public Function EndSend() As Boolean

        If Canceled OrElse DelegSend IsNot Nothing Then
            Return Nothing
        Else
            DelegSend.EndInvoke(SendingResult)
        End If

    End Function

    Public Sub CancelSending()

        If Not Canceled AndAlso DelegSend IsNot Nothing Then
            Canceled = True
            DelegSend.EndInvoke(SendingResult)
        End If

    End Sub

    REM Verie si une adresse email est conforme syntaxiquement
    Public Shared Function IsValidMail(ByVal AddrMail As String) As Boolean

        Dim RegVerify As New Regex("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")
        Return RegVerify.IsMatch(AddrMail)

    End Function

End Class

Historique

31 décembre 2008 16:54:58 :
J'avais oublié de rajouter un truc
31 décembre 2008 16:57:40 :
eeedfff

Commentaires et avis

signaler à un administrateur
Commentaire de aitnamane le 30/03/2009 00:07:52

merci
g vé l'essai

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Smtp avec authentification [ par Nicolas75 ] Bonjour à tousActuellement je réalise une petite appli en VB6 dans laquelle j'utilise le contrôle winsock pour un envoi par mail.Winsock que j'utilise Mail SMTP par WINSOCK [ par mcroteau ] J'ai présentement un problème. J'utilise Winsock pour envoyer des mails. Si j'envoie le mail par un serveur Exchange, la date d'envoie n'est pas la bo mail winsocks [ par vesta ] Voila je souhaiterai faire un petit programme qui me renvoie mensuellement des données a partir d'un pc distant... Je voudrais que celui ci soit autom mail winsocks [ par vesta ] Voila je souhaiterai faire un petit programme qui me renvoie mensuellement des données a partir d'un pc distant... Je voudrais que celui ci soit autom mail qui partent mais n'arrivent pas [ par papi jim ] Salut, je galere pas mal avec l'envoie de mail&nbsp; a partir de vb, je regarde souvent toutes les sources, mais je n'y arrive pas... j'ai essay&#233; SMTP identification [ par ciberrique ] Bonjours, je voudrais envoyer des mails par smtp, seulement la plupart des serveurs smtp requiert un mot de passe et un login. Mon probl&#232;me et qu authentification SMTP [ par PatDeLaYaute ] Bonjour,je suis en train de faire un formulaire d'envoi de mail à partir de mon projet.Le problème pour envoyer le mail j'utilise le serveur de l'hebe ***ENVOI DE MAIL PAR SMTP ?! [ par meason ] j'avai créer un pti prog pour envoyer des mails à partir de serveur smtp d'ifrance. il marchai tres bien juska hier..pourtant je nai touché à aucun co mail sans smtp [ par marcod59 ] Bonjour,Est-il possible d'envoyer un mail sur un réseau local sans utiliser une adresse SMTP (en fait, il n'y a pas de serveur SMTP, car utilisation d Problème envois de mail avec smtp [ par patrickrgn ] Bonjour, Dans mon appli je souhaite pouvoir envoyer des mails automatiquement. Le problème est que je n'arrive pas à envoyer un mail sur un serve


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.