hazzelthorn Payday vador | ben envoie moi un PM et je t'envoies les sources sur ton mail, l'application possèdent une interface je vais linker a quoi elle ressemble ainsi que son fonctionnement EDIT : dans quelques minutes
Voilà le module :
Code :
- Imports System.Threading
- Imports System.Net.Mail
- Imports System.Text.RegularExpressions
- Imports System.Data.SqlClient
- Imports System
- Imports System.IO
- Imports System.Windows.Forms
- Imports Microsoft.VisualBasic
- Imports System.Drawing
- Module Module1
- Dim con_strg As String = System.Configuration.ConfigurationSettings.AppSettings("conSQL" )
- Sub ChargeTable(ByVal RqtCtc As String, ByVal TableName As String, ByVal DatasetCtc As System.Data.DataSet)
- Dim con As New SqlConnection()
- Dim sqlda As SqlDataAdapter
- con = New SqlConnection(con_strg)
- con.Open()
- sqlda = New SqlDataAdapter(RqtCtc, con)
- Try
- ' Récupération des données dans une table nomtable
- sqlda.Fill(DatasetCtc, TableName)
- Catch ex As Exception
- MsgBox(ex.ToString)
- Finally
- con.Close()
- End Try
- End Sub
- Function lire_replace_html(ByVal fichier As String, ByVal position As String) As ArrayList
- Dim civil As String = System.Configuration.ConfigurationSettings.AppSettings("Civilite" )
- Dim version As String = System.Configuration.ConfigurationSettings.AppSettings("Version" )
- Dim RespCompte As String = System.Configuration.ConfigurationSettings.AppSettings("ResponsableCompte" )
- Dim DataMail As New Data.DataSet()
- Dim requete As String = System.Configuration.ConfigurationSettings.AppSettings("Rqt1" )
- Try
- ChargeTable(requete, "RECHERCHE", DataMail)
- Catch ex As Exception
- MsgBox(ex.ToString)
- End Try
-
- 'Ici on compte le nombre de lignes et de colonnes du datatable
- Dim maligne As String
- Dim monlecteur As StreamReader
- Dim meslignes As New ArrayList
- Dim template As Regex = New Regex(civil)
- Dim template2 As Regex = New Regex(version)
- Dim template3 As Regex = New Regex(RespCompte)
- Try
- monlecteur = New StreamReader(fichier)
- With monlecteur
- .BaseStream.Seek(0, SeekOrigin.Begin)
- While (.Peek >= 0)
- maligne = .ReadLine.ToString()
- 'test si il y a le motif civilite dans ma ligne lue
- If InStr(maligne, civil) <> 0 Then
- meslignes.Add(Regex.Replace(maligne, civil, Civilite(meslignes, DataMail, position)))
- 'test s'il y a le motif version dans ma ligne lue
- ElseIf InStr(maligne, version) <> 0 Then
- meslignes.Add(Regex.Replace(maligne, version, System.Configuration.ConfigurationSettings.AppSettings("Numero" )))
- 'test s'il y a le motif responsablecompte dans ma ligne lue
- ElseIf InStr(maligne, RespCompte) <> 0 Then
- 'si le champ type client de mon datasetmail ne contient pas 'toto' ou 'Autre Client' alors j'affiche le responsable de compte associé
- If (DataMail.Tables("RECHERCHE" ).Rows(position).Item(6).ToString <> "Autre client" And DataMail.Tables("RECHERCHE" ).Rows(position).Item(6).ToString <> "toto" ) Then
- meslignes.Add(Regex.Replace(maligne, RespCompte, ResponsableCompte(meslignes, DataMail, position)))
- 'sinon j'affiche toto tutu
- Else
- meslignes.Add(Regex.Replace(maligne, RespCompte, ("Responsable Client <a href=mailto:toto@titi.com>toto tutu</a>" )))
- End If
- 'si aucun des test n'est rempli je recopie ma ligne lu en cours dans mon body de mail
- Else
- meslignes.Add(maligne)
- End If
- End While
- End With
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- Finally
- monlecteur.Close()
- End Try
- Return meslignes
- End Function
- Function Civilite(ByVal meslignes As ArrayList, ByVal DatasetMail As DataSet, ByVal pos_dataset As Integer) As String
- Dim motif As String
- Dim genre As String
- If DatasetMail.Tables("RECHERCHE" ).Rows(pos_dataset).Item(0) = "Monsieur" Then
- genre = "Cher"
- Else
- genre = "Chère"
- End If
- motif = genre + " " + DatasetMail.Tables("RECHERCHE" ).Rows(pos_dataset).Item(1) + " " + DatasetMail.Tables("RECHERCHE" ).Rows(pos_dataset).Item(2)
- Return motif
- End Function
- Function Array2String(ByVal meslignes As ArrayList) As String
- Dim x As Integer
- Array2String = ""
- For x = 0 To meslignes.Count - 1
- Array2String += meslignes.Item(x).ToString
- Next
- Return Array2String
- End Function
- Function ResponsableCompte(ByVal meslignes As ArrayList, ByVal DatasetMail As DataSet, ByVal pos_dataset As Integer) As String
- Dim toto As Array = Split(DatasetMail.Tables("RECHERCHE" ).Rows(pos_dataset).Item(5), "," )
- Dim nom As String = toto(0)
- Dim prenom As String = toto(1)
- 'Requete 2 sert a selectionner les responsable de compte associé aux clients
- Dim requete2 As String = ""
- Dim DataResp As New Data.DataSet()
- Dim mailResp As String
- Try
- ChargeTable(requete2, "RECHERCHE", DataResp)
- Catch ex As Exception
- MsgBox(ex.ToString)
- End Try
- mailResp = "Responsable de Compte <a href=" + "mailto:" + DataResp.Tables("RECHERCHE" ).Rows(0).Item(0).ToString + ">" + DataResp.Tables("RECHERCHE" ).Rows(0).Item(2).ToString + " " + DataResp.Tables("RECHERCHE" ).Rows(0).Item(1).ToString + "</a> pour envisager une migration"
- Return mailResp
- End Function
- Function EmailValide(ByVal mail_address As String) As Boolean
- Dim rexp As New Regex("^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", RegexOptions.IgnoreCase)
- Return rexp.IsMatch(mail_address)
- End Function
- End Module
|
Mon form
Code :
- Imports System.Threading
- Imports System.Net.Mail
- Imports System.Text.RegularExpressions
- Imports System.Data.SqlClient
- Imports System.DBNull
- Imports System
- Imports System.IO
- Imports System.Windows.Forms
- Imports Microsoft.VisualBasic
- Imports System.Drawing
- Public Class Kimoce2mailing
- Public Sub liste_contact_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles liste_contact.Click
- Dim DataMail As New Data.DataSet()
- Dim requete As String = System.Configuration.ConfigurationSettings.AppSettings("Rqt1" )
- Try
- ChargeTable(requete, "RECHERCHE", DataMail)
- Catch ex As Exception
- MsgBox(ex.ToString)
- End Try
- 'Ici on compte le nombre de lignes et de colonnes du datatable
- Dim NbRow As Integer = 0
- Dim nbcol As Integer = DataMail.Tables("RECHERCHE" ).Columns.Count
- NbRow = DataMail.Tables("RECHERCHE" ).Rows.Count
- Dim adresse_mail As String
- Dim fichier As String
- Dim x As Integer
- If option1.Checked = True Then
- TextBox1.Clear()
- fichier = System.Configuration.ConfigurationSettings.AppSettings("CheminFichierMajeur" )
- ElseIf option2.Checked = True Then
- TextBox1.Clear()
- fichier = System.Configuration.ConfigurationSettings.AppSettings("CheminFichierBuild" )
- End If
- TextBox1.AppendText(Environment.NewLine + "Début envoi des mails" + Environment.NewLine)
-
- Dim smtp As New SmtpClient(System.Configuration.ConfigurationSettings.AppSettings("Serveur" ))
- pbar.Visible = True
- pbar.Minimum = 1
- pbar.Value = 1
- pbar.Maximum = NbRow
- pbar.Step = 1
- For x = 0 To NbRow - 1
- Dim mail As New MailMessage()
- adresse_mail = (DataMail.Tables("RECHERCHE" ).Rows(x).Item(4))
- If EmailValide(adresse_mail) = True Then
- TextBox1.AppendText(Environment.NewLine + "Envoi du mail à " + DataMail.Tables("RECHERCHE" ).Rows(x).Item(2) + " " + DataMail.Tables("RECHERCHE" ).Rows(x).Item(1) + Environment.NewLine)
- mail.From = New MailAddress(System.Configuration.ConfigurationSettings.AppSettings("AddrFrom" ))
- mail.To.Add(DataMail.Tables("RECHERCHE" ).Rows(x).Item(4))
- mail.Bcc.Add(System.Configuration.ConfigurationSettings.AppSettings("AddrCache" ))
- 'set the content
- If option1.Checked = True Then
- mail.Subject = System.Configuration.ConfigurationSettings.AppSettings("SujetMajeur" )
- ElseIf option2.Checked = True Then
- mail.Subject = System.Configuration.ConfigurationSettings.AppSettings("SujetBuild" )
- End If
- mail.Body = Array2String(lire_replace_html(fichier, x))
- mail.IsBodyHtml = True
- 'add an attachment from the filesystem
- mail.Attachments.Add(New Attachment(System.Configuration.ConfigurationSettings.AppSettings("PieceJointe" )))
- 'envoi du message
- smtp.Send(mail)
- End If
- mail = Nothing
- pbar.PerformStep()
- Next
- TextBox1.AppendText(Environment.NewLine + "Fin envoi des mails" + Environment.NewLine)
- Dim mailtrace As New MailMessage()
- Dim erreur As String
- mailtrace.From = New MailAddress(System.Configuration.ConfigurationSettings.AppSettings("AddrFrom" ))
- mailtrace.To.Add(New MailAddress(System.Configuration.ConfigurationSettings.AppSettings("AddrDestTrace" )))
- mailtrace.Subject = "Liste des adresses mails non conforme"
- For x = 0 To NbRow - 1
- adresse_mail = (DataMail.Tables("RECHERCHE" ).Rows(x).Item(4))
- If EmailValide(adresse_mail) = False Then
- erreur = erreur + DataMail.Tables("RECHERCHE" ).Rows(x).Item(3) + " || " + DataMail.Tables("RECHERCHE" ).Rows(x).Item(2) + " || " + DataMail.Tables("RECHERCHE" ).Rows(x).Item(1) + " || " + DataMail.Tables("RECHERCHE" ).Rows(x).Item(4) + "<br>"
- End If
- Next
- mailtrace.IsBodyHtml = True
- If erreur = "" Then
- mailtrace.Body = "Toutes les adresses mails sont conformes."
- Else
- mailtrace.Body = "Société" + " || " + "Nom" + " || " + "Prénom" + " || " + "Adresse mail" + "<br><br>" + erreur
- End If
- smtp.Send(mailtrace)
- mailtrace = Nothing
- End Sub
- Private Sub QuitterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles QuitterToolStripMenuItem.Click
- Me.Dispose()
- End Sub
- End Class
|
Le fichier de config associé :
Code :
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <appSettings>
- <!-- REQUETES Pour selectionner les clients Pour marquer le signe différent dans la requête SQL utiliser != et pas <> sinon le logiciel ne reconnait pas la requête-->
- <add key="Rqt1" value=","/>
- <!--MAIL-->
- <add key="AddrFrom" value="" />
- <add key="AddrCache" value="" />
- <add key="SujetBuild" value="" />
- <add key="SujetMajeur" value=" />
- <add key="Serveur" value="" />
- <add key="AddrDestTrace" value="" />
- <!--CIVILITE-->
- <add key="Civilite" value ="{civilite}"/>
- <!--SQL-->
- <add key="conSQL" value ="Data Source=toto;Initial catalog=titi;Integrated Security=SSPI"/>
- <!--RESPONSABLE COMPTE-->
- <add key="ResponsableCompte" value="{RC}"/>
- <!--version-->
- <add key="Version" value ="{version}"/>
- <add key="Numero" value =""/>
- <!--FICHIER HTML-->
- <add key="CheminFichierMajeur" value ="C:\build_majeur.html"/>
- <add key="CheminFichierBuild" value ="C:\build_trimestriel.html"/>
- <!--FICHIER JOINT-->
- <add key="PieceJointe" value ="C:\Documents and Settings\toto.pdf"/>
- </appSettings>
- </configuration>
|
le template HTML qui va bien pour chercher les motifs :
Code :
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- </head>
- {civilite}
- <br><br>
- Vous êtes utilisateur de la solution toto et nous vous en remercions.
- <br><br>
- Nous avons le plaisir de vous informer que la version {version} de toto est désormais disponible.
- <br><br>
- A cet effet, nous vous adressons ci-joint la ‹‹ release ›› note associée dans laquelle vous trouverez
- notamment la liste détaillée des nouvelles fonctionalités mises à votre disposition.
- <br>
- <br>
- Afin de bénéficier de tous les apports de cette nouvelle version majeure, nous vous invitons à contacter votre {RC}
- <br><br>
- Nous espérons que ces nouvelles fonctionnalités vous satisferont et restons bien évidemment à votre entière disposition.
- <br>
- <br>
- Vous remerciant de votre confiance,
- <br>
- <br>
- Cordialement,
- <br> <br>
- Votre service client.
- <body>
- </body>
- </html>
|
Message édité par hazzelthorn le 16-03-2011 à 15:05:00
|