Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1 2
Bonjour,
De nombreuses méthodes sont utilisées pour l'envoi de mails avec PB :
* objet PB mailSession : protocole MAPI
* outils "3rd party" : on en trouve par milliers sur internet, payants ou non, (aspemail, easymailobjects, ...)
* bibliothèques PB sur www.codexchange.sybase.com (Lotus Notes, Outlook, SMTP via PBNI)
....
Après avoir regardé un peu ces différentes approches, je me suis focalisé sur BLAT (www.blat.net) un petit outil gratuit très souple et indépendant du modèle de serveur de messagerie (à condition qu'il supporte le protocole SMTP) ou d'un quelconque client de messagerie. Bien évidemment il ne s'agit là que d'envoyer des messages. Pour pouvoir "en recevoir" avec PB, d'autres approches sont nécessaires, par exemple du côté du client, avec Outlook via OLE, ou avec un autre petit utilitaire.
BLAT est à la base un utilitaire de ligne de commande (syntaxe sur www.blat.net/syntax/syntax.html). Mais pour notre plus grand bonheur, il existe une DLL win 32 correspondante (www.geocities.com/toby_korn/blat), utilisable directement sous PB. Pour cela, il suffit de déployer la bibliothèque BLAT.DLL (112ko) avec l'application PB (téléchargement : home.earthlink.net/~tobykorn/blat/blat3_1.zip).
Exemple d'utilisation dans PB avec une petite classe n_mail :
1) Déclaration de la DLL dans les Global external functions :
Function Long SendBlat( String sCmd ) Library 'blat.dll' Alias For 'Send'
Cette fonction retourne le résultat de l'envoi du message : 0 si c'est OK. (liste des codes retour ici )
2) Classe n_mail :
$PBExportHeader$n_mail.sru forward global type n_mail from nonvisualobject end type end forward global type n_mail from nonvisualobject end type global n_mail n_mail type variables String is_smtp // adresse du serveur SMTP String is_port // port du serveur SMTP String is_user // utilisateur String is_password // mot de passe String is_file // fichier texte de BODY String is_from // expéditeur du message String is_to // liste destinataires du message (,) String is_cc // liste cc du message (,) String is_bcc // liste bcc du message (,) String is_subject // sujet du message String is_attacht // liste des fichiers attachés (,) String is_log // fichier log String is_cmd // ligne de commande end variables forward prototypes public function string of_compute_cmd () public function long of_send () end prototypes public function string of_compute_cmd (); // génération de la ligne de commande String ls_cmd = '' // fichier du corps du message (en 1er) ls_cmd += This.is_file // paramètres du serveur ls_cmd += ' -server "' + This.is_smtp + '"' ls_cmd += ' -port "' + This.is_port + '"' ls_cmd += ' -u "' + This.is_user + '"' ls_cmd += ' -pw "' + This.is_password + '"' ls_cmd += ' -f "' + This.is_from + '"' // log ls_cmd += ' -log "' + This.is_log + '"' // paramètres du message If This.is_subject <> '' Then ls_cmd += ' -subject "' + This.is_subject + '"' If This.is_to <> '' Then ls_cmd += ' -to "' + This.is_to + '"' If This.is_cc <> '' Then ls_cmd += ' -cc "' + This.is_cc + '"' If This.is_bcc <> '' Then ls_cmd += ' -bcc "' + This.is_bcc + '"' If This.is_attacht <> '' Then ls_cmd += ' -attach "' + This.is_attacht + '"' // assignation commande This.is_cmd = ls_cmd Return ls_cmd end function public function long of_send ();// envoi du message Long ll_return // 1. génération ligne de commande This.of_compute_cmd( ) // 2. envoi du message ll_return = SendBlat( This.is_cmd ) Return ll_return end function on n_mail.create call super::create TriggerEvent( this, "constructor" ) end on on n_mail.destroy TriggerEvent( this, "destructor" ) call super::destroy end on
3) Utilisation dans un script :
Long ll_return n_mail lnv_mail // instanciation de l'objet lnv_mail = Create n_mail // assignation des paramètres serveur // (il est possible de sauvegarder ces paramètres dans la base de registre, BLAT les chargera automatiquement) lnv_mail.is_smtp = 'smtp.mail.server' lnv_mail.is_port = 25 lnv_mail.is_user = 'nom_utilsateur_messagerie' lnv_mail.is_password = 'mdp_utilsateur_messagerie' // assignation des paramètres du message lnv_mail.is_from = 'expediteur@xxx.com' lnv_mail.is_to = 'dest1@zzz.com,dest2@yyy.com' lnv_mail.is_cc = 'copy1@zzz.com,copy2@yyy.com' lnv_mail.is_bcc = 'blindcopy1@zzz.com,blindcopy2@yyy.com' lnv_mail.is_subject = 'sujet_message' lnv_mail.is_file = 'c:\chemin_du_fichier_texte.txt' lnv_mail.is_attacht = 'c:\chemin_attacht1.xls,c:\chemin_attacht2.doc' lnv_mail.is_log = 'c:\chemin_du_fichier.log' // envoi du message ll_return = lnv_mail.of_send( ) // notification MessageBox( String( ll_return ), lnv_mail.is_cmd ) // destruction de l'objet Destroy lnv_mail
J'ai implémenté des choses intéressantes à partir de cette base et cela fonctionne très bien.
Hope this helps.
Dernière modification par rsz (24-11-2006 08:43:09)
Hors ligne
Salut,
J'ai essayé la solution proposée, pas moyen de la faire fonctionner en utilisant la blat.dll et le code fourni mais bien en utilisant
un Run() de blat.exe avec lem^me contenu de variable dans is_cmd.
Je préfèrerais la dll car au moins on peux gérer les code de retour.
Une idée du pourquoi cela pourrait ne pas fonctionner chez moi (PB10.5.1) ?
Hors ligne
elbrizzio a écrit:
Salut,
J'ai essayé la solution proposée, pas moyen de la faire fonctionner en utilisant la blat.dll et le code fourni mais bien en utilisant
un Run() de blat.exe avec lem^me contenu de variable dans is_cmd.
quel est le code de retour lorsque tu lances SendBlat ? la DLL se trouve où ?
Hors ligne
le code de retour est toujours 2
et la dll se trouve dans c:\blat262\full
déclarée dans PB comme suit
function long sendblat( string scmd ) library 'c:\blat262\full\blat.dll' alias for 'Send'
[edit] [ code=pb ]
Hors ligne
code = 2 :
* The server actively denied our connection.
* The mail server doesn't like the sender name.
ça te donne quoi un :
ping ton.serveur.stmp #et telnet ton.serveur.stmp 25
Pour info, ça marche très bien sous Citrix
Un petit conseil au passage, mets une copie de la dll dans le dossier de pbl principale et une dans le dossier de l'exécutable (avec pbvm.dll & cie) et déclare la fonction sans chemin :
function long sendblat( string scmd ) library 'blat.dll' alias for 'Send'
Ainsi ça marchera en mode dev et en mode exécutable qq soit le PC et tu ne sera pas obligé de maintenir le chemin dans tes sources.
Hors ligne
Le ping fonctionne correctement.
Le telnet se plante.
Mais le Run() de blat.exe avec la même string de paramètre fonctionne correctement
Hors ligne
elbrizzio a écrit:
Le ping fonctionne correctement.
Le telnet se plante.
Mais le Run() de blat.exe avec la même string de paramètre fonctionne correctement
c'est sur le port 25 ? c'est quoi le serveur de messagerie ?
tu as quoi dans ls_cmd
de SendBlat( ls_cmd )
?
Hors ligne
petit tip au passage : il n'aime pas trop les espaces dans le subject... (je les remplace systématiquement par des underscores)
Hors ligne
voilà this.is_cmd : c:\mail.txt -server "POMEROL" -f "f.debode@be.spie.com" -subject "Test_mail_SMTP" -to "f.debode@be.spie.com"
Run("c:\blat262\full\blat " + this.is_cmd,Minimized!) passe correctment
le port est bien le 25 (d'ailleurs il le prend avec l'exe)
Hors ligne
Salut, qq pistes possibles :
* essayer avec des guillemets autour de chaque valeur
* ajouter explicitement le port
* ajouter un log (pour debug)
* le nom POMEROL c'est le nom windows de la machine ? il ne fait pas partie d'un domaine ? pomerol.domaine.fr ?
Essaye de remplacer le nom du serveur par son adresse IP
"c:\mail.txt" -server "12.25.1.10" -port "25" -f "f.debode@be.spie.com" -subject "Test_mail_SMTP" -to "f.debode@be.spie.com" -log "c:\mail.log"
Pour info : as-tu utilisé le registre pour y stocker les paramètres par défaut ?
Hors ligne
Bonjour,
Le port 25 ne serait-il pas bloqué dans ta société par l'anti virus. C'est le cas chez nous pour les utilisateurs lambda ??
Hors ligne
J'ai essayé avec l'adresse IP, le port 25, les guillemets , le log file (qu'il ne créée pas d'ailleurs ) ... rien ne va
Pour le registre, je crois mais que oui mais à l'installation de l'exe de blat362. Mais j'ai depuis supprimé la clé de registre.
Et je ne crois pas que le port 25 soit bloqué puisqu'avec le run de l'exe cela passe.
La dll doit -ell être enregistré avec regsvr32 ?
Car si oui, c'est là que j'ai peut-être un problème, je reçois un message :
c:\blat\blat.dll was loaded but the DllRegisterServer Entry point was not found. The file can not be registred.
Hors ligne
ici pour l'install de Blat
effectivement cela doit se mettre dans la base de REgistre
Hors ligne
Bonjour,
Nous avons besoin d'envoyer des mails avec certificats dans le cadre de notre développement... est-ce possible de le faire avec Blat ?
Je n'ai pas trouvé de référence à la gestion des certificats sur leur site...
En fait je me demande s'il est possible d'envoyer des mails avec certificats sans passer par une messagerie classique type Outlook... quelqu'un a-t-il déjà implémenté ça ?
Hors ligne
Aloneg a écrit:
Bonjour,
Nous avons besoin d'envoyer des mails avec certificats dans le cadre de notre développement... est-ce possible de le faire avec Blat ?
Je n'ai pas trouvé de référence à la gestion des certificats sur leur site...
En fait je me demande s'il est possible d'envoyer des mails avec certificats sans passer par une messagerie classique type Outlook... quelqu'un a-t-il déjà implémenté ça ?
Bonjour,
Nous n'utilisons pas Blat, mais Aspemail, et cela fonctionne très bien voir Ici
Hors ligne
Bonjour,
J'ai essayé d'enregistrer la dll version 3.0.7 en version 32 et 64 sur un w7, rien a faire.
C'est possible de l'enregistrer avec regsvr32 ?
Cordialement
Yann dulondel
Hors ligne
ydl a écrit:
Bonjour,
J'ai essayé d'enregistrer la dll version 3.0.7 en version 32 et 64 sur un w7, rien a faire.
C'est possible de l'enregistrer avec regsvr32 ?
Cordialement
Yann dulondel
Bonjour, il n'y a pas besoin d'enregistrer la DLL.
Hors ligne
Bonjour,
Merci pour le partage !
Est-ce que la dll gère l'envoi de mail au format HTML ?
Merci
Hors ligne
attention si c'est pour envoyer des emails en Français Blat gère assez mal les caractères accentués...
Hors ligne
Ben53 a écrit:
Est-ce que la dll gère l'envoi de mail au format HTML ?
Je n'ai jamais essayé : à tester.
rincevent a écrit:
attention si c'est pour envoyer des emails en Français Blat gère assez mal les caractères accentués...
Et en utilisant les caractères spéciaux ?
Hors ligne
j'ai fait certains tests, je n'ai pas réussi à faire passer les "é" ou les "è" correctement. y a peut être moyen mais je ne sais pas comment.
Hors ligne
Via du quoted-printable ? (jamais joué avec blat)
Hors ligne
Via remplacer les "é" par un code du genre "=E9"
Hors ligne
Je viens de faire le test d'accents : ça passe correctement aussi bien dans le sujet du message que dans le corps...
Hors ligne
Pages: 1 2