Envoyer des emails avec pieces jointes en exécutant blat

Description

Ce logiciel permet d'envoyer un email en exécutant blat avec en pièces jointes tous les fichiers d'un dossier. On peut mettre une ou plusieurs adresses mail en argument ou dans un fichier ini.
Une fois transmis les fichiers peuvent être archivés.
Le prog peut se refermer automatiquement ou rester ouvert

Source / Exemple :


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

Conclusion :


Dans le zip on trouve la source, blat et les doc(word) html
décompresser le zip sur d: renseigner le fichier ini, mettre un petit fichier dans le dossier temp et executer sendmails.exe

Codes Sources

A voir également

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.