0/5 (3 avis)
Vue 10 337 fois - Téléchargée 796 fois
Imports System.Object Imports System.Runtime.InteropServices.Marshal Imports System.IO Imports System Public Class sendmails Public blat_instructions$ Public blat_to$ Public dossier_temp$ Public dossier_archives$ Public chemin_courrant$ Public fermetureauto$ Public liste_attachements$ Public archivage$ Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedBuffer As IntPtr, ByVal nSize As Integer, ByVal lpFileName As String) As Integer Public argument As String 'Retourne la valeur de la clé "Cle" de la section "Section" du fichier "File" Public Function GetCle(ByVal File As String, ByVal Section As String, ByVal Cle As String) As String Dim PtrCh As IntPtr Dim Lng As Integer Dim Chaine As String PtrCh = StringToHGlobalAnsi(New String(vbNullChar, 1024)) Lng = GetPrivateProfileString(Section, Cle, "", PtrCh, 255, File) Chaine = PtrToStringAnsi(PtrCh, Lng) FreeHGlobal(PtrCh) GetCle = Chaine End Function Private Sub sendmails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dirInfo As DirectoryInfo Dim arguments As [String]() = Environment.GetCommandLineArgs() chemin_courrant$ = Application.StartupPath 'récupérer l'argument If arguments.Length > 1 Then argument = arguments(1) If argument = "" Then argument = "DEFAULT" blat_to = GetCle(chemin_courrant$ + "\sendmails.ini", argument, "to") Else blat_to = argument End If 'lecture du fichier ini fermetureauto = GetCle(chemin_courrant$ + "\sendmails.ini", "DEFAULT", "fermetureauto") archivage = GetCle(chemin_courrant$ + "\sendmails.ini", "DEFAULT", "archivage") blat_instructions = GetCle(chemin_courrant$ + "\sendmails.ini", "BLAT", "instructions") dossier_temp = GetCle(chemin_courrant$ + "\sendmails.ini", "DOSSIERS", "temp") dossier_archives = GetCle(chemin_courrant$ + "\sendmails.ini", "DOSSIERS", "archives") Dim Liste_fichiers As String() = Directory.GetFileSystemEntries(dossier_temp$) Dim Entree As String Dim monStreamWriter1 As StreamWriter = New StreamWriter(chemin_courrant + "\sendmails.log", True, System.Text.Encoding.UTF8) Dim monStreamWriter2 As StreamWriter = New StreamWriter(chemin_courrant + "\attach.txt", True, System.Text.Encoding.UTF8) 'lecture du dossier temporaire et création de la liste des piéces jointes For Each Entree In Liste_fichiers 'Pour chaque entrée de la liste If File.Exists(Entree) Then 'Si c'est un fichier liste_attachements = liste_attachements + "," + Entree End If Next (Entree) 'écriture de la liste dasn sun fichier texte monStreamWriter2.WriteLine(liste_attachements) monStreamWriter2.Close() ListBox1.Items.Add(argument) If liste_attachements <> "" Then ListBox1.Items.Add(liste_attachements) ListBox1.Items.Add(blat_instructions + " -to " + blat_to + " -af " + chemin_courrant + "\attach.txt") 'exécution de blat Shell(blat_instructions + " -to " + blat_to + " -af " + chemin_courrant + "\attach.txt", AppWinStyle.NormalFocus, True, -1) If archivage = "Oui" Then 'si archivage = oui, création des dossiers si nécessaire et déplacement des fichiers dirInfo = New DirectoryInfo(dossier_archives + "\" + Str(Now.Year)) If dirInfo.Exists Then 'le dossier année existe't'il ? dirInfo = New DirectoryInfo(dossier_archives + "\" + Str(Now.Year) + "\" + Str(Now.Month)) If dirInfo.Exists = False Then Directory.CreateDirectory(dossier_archives + "\" + Str(Now.Year) + "\" + Str(Now.Month)) 'si le dossier mois n'existe pas, le creer Else Directory.CreateDirectory(dossier_archives + "\" + Str(Now.Year)) 'creer le dossier année Directory.CreateDirectory(dossier_archives + "\" + Str(Now.Year) + "\" + Str(Now.Month)) 'ceer le dossier mois End If dossier_archives = dossier_archives + "\" + Str(Now.Year) + "\" + Str(Now.Month) For Each Entree In Liste_fichiers 'Pour chaque entrée de la liste Dim TmpName As String = Microsoft.VisualBasic.Mid(Entree, Len(dossier_temp$) + 1) TmpName = Replace(TmpName, "'\'", "") 'récupérer le nom du fichier If File.Exists(Entree) Then 'Si c'est un fichier File.Move(Entree, dossier_archives + TmpName) ' le déplace dans le dossier archives End If Next (Entree) Else For Each Entree In Liste_fichiers 'Pour chaque entrée de la liste Dim TmpName As String = Microsoft.VisualBasic.Mid(Entree, Len(dossier_temp$) + 1) TmpName = Replace(TmpName, "'\'", "") 'récupérer le nom du fichier If File.Exists(Entree) Then 'Si c'est un fichier File.Delete(dossier_archives + TmpName) ' le déplace dans le dossier archives End If Next (Entree) End If 'Ecriture du texte dans le fichier log monStreamWriter1.WriteLine(Now) monStreamWriter1.WriteLine("argument :" & argument) monStreamWriter1.WriteLine("Pieces jointes :" & liste_attachements) monStreamWriter1.WriteLine(blat_instructions + " -to " + blat_to + " -af " + chemin_courrant + "\attach.txt") 'Fermeture du StreamWriter monStreamWriter1.Close() 'suppression du fichier liste des pieces jointes File.Delete(chemin_courrant + "\attach.txt") If fermetureauto = "Oui" Then End End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged End Sub End Class
3 févr. 2010 à 08:13
Sinon il y plus simple pour envoyer des mails, .Net l'implémente déja.
Il faut importer "Imports System.Net.Mail" et puis celà doit suffir :
Dim MonSMTP As New SmtpClient("ServeurDeMail")
MonSMTP.Send("moi@domaine.fr", "lui@domaine.fr", "Sujet", "Mon message")
Sinon l'INI pourquoi pas, mais bon le XML étant à la mode, pourquoi ne pas s'y mettre :-)
Pour débuter ce cours est pas mal : http://plasserre.developpez.com/cours/vb-net/
Bon code ...
2 févr. 2010 à 21:39
Blat est un petit prog qui permet d'envoyer des emails en lignes de commandes
Je reconnais que j'ai surtout fait du VB6 et que pour le .Net pour l'instant je récupère des fonctions à droite à gauche suivant ce dont j'ai besoin.
J'ai utilisé un point ini car les collègues qui utilisent le prog et qui n'ont pas l'habitude du xml sont plus à l'aise avec un fichier ini.
Je prend note de tes remarques, je vais essayé de prendre le temps de le corriger et mieux faire la prochaine fois.
@+
2 févr. 2010 à 08:25
Alors déjà c’est quoi Blat ? :-s
Sinon çà je ne pense pas que çà serve à grand-chose "Imports System.Object", Object est une classe et non un espace de nom
Je vois également que tu as utilisé un gros bloc de variable déclaré en Public.
En fait ta classe n’est pas une classe, il n’y a pas de constructeur, aucun passage de paramètre, çà ressemble plus à un module.
Tu devrais regarder des articles sur la POO, il y en a pas mal sur la toile.
De plus tes declarations comme "Public dossier_archives$" serai un peu mieux comme çà : "Public dossier_archives as String"
Sinon pas obligatoire mais tu peux faire plus court si tu veux :
Dim monStreamWriter1 As StreamWriter = New StreamWriter( ...
Dim monStreamWriter1 As New StreamWriter( ...
Tu fais un monStreamWriterX.Close, mais n’oublie pas pour des soucis d’optimisation de faire un monStreamWriterX.Dispose (ou utilise un bloc Using...End Using) pour libérer l’objet
Shell ... arf, çà existe encore çà ? Regarde si tu ne peux pas utiliser la Class Process.
Fais gaffe à çà : dossier_archives + "" + ...
Si tu te trouve dans la racine du disque (ex : C:\), le "" va être doublé !
fermetureauto = "Oui" -> un boolean ne serait pas mieux ?
Après essai pour ton fichier de config de passer dans un autre format comme le XML, puisqu’a ma connaissance Microsoft ne veut plus maintenir le .INI (pas de classe présente dans .Net)
Public Function GetCle(
[code]
GetCle = Chaine
End Function
Stop, en .Net on retourne le résultat d’une fonction avec Return et non le nom de la fonction.
Là t’a laissé trainé çà :
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Ca ne sert à rien, et de plus ta classe n’hérite pas de Windows.Form !? ( = Ce n'est pas un formulaire)
Comment tu as pu créer une listbox la dessus ?
Dim TmpName As String = Microsoft.VisualBasic.Mid(Entree, Len(dossier_temp$) + 1)
TmpName = Replace(TmpName, "'\'", "") 'récupérer le nom du fichier
-> Là aussi essai de te documenter sur la Class String (String.SubString(), String.Replace(), etc..)
Allé corrige nous tous çà ... et mets toi à l'objet, tu verra c'est super sympa ;-)
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.