|
Trouver une ressource
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
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
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
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 a partir de vb, je regarde souvent toutes les sources, mais je n'y arrive pas... j'ai essayé
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è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
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|