hMailServer : distribution lists

jeudi 14 avril 2011, par Minimalteck

Le logiciel hMailServer est un serveur de messagerie gratuit sous Windows. Il permet entre autre la gestion de listes de diffusion. L’installation propose l’utilisation d’une base de donnée Microsoft SQL Server Compact Edition.

Et alors me direz-vous ?

Alors admettons que justement vous ayez besoin de mettre à jour une de ces fameuses listes de diffusion à partir d’un fichier csv que l’on vient de vous transmettre en pièce jointe d’un petit mail…

« Ça serait sympa si t’avais 2 min pour mettre à jour cette liste de diff… toute la liste d’abonnés ont été revue… pas loin de 4000 comptes :-O

d’avance merci @+ »

Et vous voilà fort mari… en constatant qu’il faut saisir les abonnés un par un…

Voici donc un petit script en VB qui va vous sauver la vie :

Option Explicit

Dim objectApp
Dim objectDomain
Dim objectDistributionLists
Dim objectDistributionList
Dim objectjFSO
Dim objectjTextFile
Dim stringNewMailAddress

Const ForReading = 1
Const DOMAIN_NAME = "kaamelott.graal"
Const LIST_NAME = "onenagros"
Const HMSADMINUSER = "Administrator"
Const HMSADMINPWD = "genievre"
Const SENDER_ADDRESS = "arthur@kaamelott.graal"
Const SRC_FILE_NAME = "chevaliersDeLaTableRonde.csv"

'Initialisation
Set objectApp = Createobject("hMailServer.Application")

'Authentification
Call objectApp.Authenticate(HMSADMINUSER, HMSADMINPWD)

'Suppression de la liste
Set objectDomain = objectApp.Domains.ItemByName(DOMAIN_NAME)
Set objectDistributionLists = objectDomain.DistributionLists
Set objectDistributionList = objectDistributionLists.ItemByAddress(LIST_NAME & "@" & DOMAIN_NAME)
objectDistributionList.Delete
objectDistributionLists.Refresh

'Creation de la liste avec les memes parametres
Set objectDistributionList = objectDistributionLists.Add

'Address
objectDistributionList.Address = LIST_NAME & "@" & DOMAIN_NAME

'Enabled the list
objectDistributionList.Active = true

'Mode
objectDistributionList.Mode = 2
objectDistributionList.RequireSenderAddress = SENDER_ADDRESS

'Security
objectDistributionList.RequireSMTPAuth = false

objectDistributionList.Save()  
objectDistributionLists.Refresh

'Lecture du fichier csv source contenant la liste des abonnes
Set objectjFSO = Createobject("Scripting.FileSystemobject")
Set objectjTextFile = objectjFSO.OpenTextFile(SRC_FILE_NAME, ForReading)

Do While objectjTextFile.AtEndOfStream <> True
  stringNewMailAddress = objectjTextFile.Readline
  If objectApp.Utilities.IsValidEmailAddress(stringNewMailAddress) Then
       'Si la chaine de caractere est bien une adresse mail on ajoute
        AddRecipient stringNewMailAddress, LIST_NAME, DOMAIN_NAME
  End If
Loop

objectjTextFile.Close

'Message de fin on affiche le nombre total des abonnes
WScript.Echo LIST_NAME & "@" & DOMAIN_NAME & " : " & objectDistributionList.Recipients.Count & " subscribers"
WScript.Quit
 
'Fonction de creation de compte abonne
Sub AddRecipient(stringEmailAddress, stringListName, stringDomainName)
 Dim objectDomain
 Dim objectDistributionLists
 Dim objectDistributionList
 Dim objectRecipient
 Dim objectRecipients

 Set objectDomain = objectApp.Domains.ItemByName(stringDomainName)
 Set objectDistributionLists = objectDomain.DistributionLists
 Set objectDistributionList = objectDistributionLists.ItemByAddress(stringListName & "@" & stringDomainName)
 Set objectRecipients = objectDistributionList.Recipients

 Set objectRecipient = objectRecipients.Add()
 objectRecipient.RecipientAddress = stringEmailAddress
 objectRecipient.Save()

 Set objectRecipient = Nothing
 Set objectDomain = Nothing
 Set objectDistributionLists = Nothing  
 Set objectDistributionList = Nothing
 Set objectRecipients = Nothing
End Sub

En fait, au sein de ce script, il n’y a pas de mise à jour, mais suppression de l’ancienne liste, création d’une nouvelle avec des paramètres indentiques et import des nouveaux abonnés [1].

Une méthode plus simple consiterait à modifier directement en base les données de la table " hm_distributionlistsrecipients"

Notes

[1] C’est plus rapide et plus simple que de tenter de réaliser une synchro - du fait des désabonnements ou modifications possibles - ici aucune erreur possible, il y a une vérif de la validité du mail avant insertion et la suppression de la liste… supprime bien les abonnés liés en base, j’ai vérifé ;-)

[2] Fait rare pour ce type de logiciel et qui mérite donc d’être souligné ;-)

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0