[Basic] Envoi de courriel Aoo4 et LibO4

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Basic] Envoi de courriel Aoo4 et LibO4

Messagepar luky-luke » 25 Août 2013 15:22

Bonjour,

Pour faire suite à ce fil [Python]envoi de courriel, la nouvelle branche 4.0 d'ApacheOpenOffice apporte une nouveauté. Il est possible (enfin) de rédiger entièrement un courriel avec corps de texte et pièce jointe.
Un point sur les services utilisés.

Pour un envoi qui demande une confirmation d'envoi (ouverture de la fenêtre message)

  • Seulement pour Aoo4 Windows/GNU-Linux -
    com.sun.star.system.SystemMailProvider

    Ce nouveau Service autorise l'envoi d'un corps de texte, ce qui n'est pas possible avec l'ancienne méthode.
    Code : Tout sélectionner   AgrandirRéduire
    Sub NewMethode
    Dim Messagerie As Object, Client As Object, Courrier As Object
       Messagerie = CreateUnoService("com.sun.star.system.SystemMailProvider")'Version Windows/Linux Aoo4
       Client = Messagerie.queryMailClient()
       Courrier = Client.createMailMessage()   
          Courrier.Subject = "Test LibO4 et SystemMailProvider"'Sujet   
          Courrier.Recipient = "Leochopoto@wanadoo.fr"'Adresse
          Courrier.CcRecipient = ""'Copie A
          Courrier.BccRecipient = ""'Copie Caché
          Courrier.Attachement = ""'Piece Jointe()
          Courrier.body = "ceci est un test"'Texte
          Client.sendMailMessage(Courrier,0)'Flag inopérant
    End Sub
  • pour Aoo3 LibO3 & 4 Windows -
    com.sun.star.system.SimpleSystemMail
  • pourAoo3 Libo3 & 4 GNU-Linux -
    com.sun.star.system.SimpleCommandMail

    Donc avec ces services pas de corps de Texte
    Code : Tout sélectionner   AgrandirRéduire
    Sub OldMethode
    Dim Messagerie As Object, Client As Object, Courrier As Object
       If GetGUIType = 1 Then
          Messagerie = CreateUnoService("com.sun.star.system.SimpleSystemMail")'version Windows Aoo3/Libo3 & LibO4
       Else
          Messagerie = CreateUnoService("com.sun.star.system.SimpleCommandMail")'Version Linux Aoo3/LibO3 & LibO4
          Client = Messagerie.querySimpleMailClient()
          Courrier = Client.createSimpleMailMessage()
       
          Courrier.Subject = "Test LibO4 et SystemMailProvider"'Sujet   
          Courrier.Recipient = "Leochopoto@wanadoo.fr"'Adresse
          Courrier.CcRecipient = Array("EtienneDuParc@LesAccacia.fr")'CopieA
          Courrier.BccRecipient = Array("MaxLaMenace@Tapedur.fr")'CopieA
          Courrier.Attachement = Array("")'PcsJt()
          Client.sendSimpleMailMessage(Courrier,0)
       End if
    End sub


Pour un envoi qui ne demande pas une confirmation d'envoi (ouverture de la fenêtre message)

c'est beaucoup plus simple ou presque. :lol:
Quelque soit la suite utilisée (Aoo ou LibO version 3 et 4) et quelque soit le système d'exploitation (OS). Un seul service
com.sun.star.mail.MailServiceProvider


Un fichier test fonctionnel est accessible ici sur le site Apache . Il comporte néanmoins un petit HIC ! Les destinataires en copie et copie cachée ne fonctionne pas. Encore un problème Python :lol:
On retrouve l'auteur sur le forum anglais http://www.oooforum.org/forum/viewtopic.phtml?p=462063#462063) . Allez jusqu'à la fin du fil.

Le code en pièce jointe MailServiceProvider_EnvoiAuto est assez simple à adapter. Il suffit de collecter les bon Arguments pour la fonction SendMail dans le module du même nom.
Pensez à écrire les paramètres de connexion dans la macro et des adresses valide dans la feuille1 pour un test.
Le clic sur le bouton provoque l'ouverture d'une boite de dialogue. La multiple sélection de destinataire est possible et l'envoi de pièces jointes n'est pas limité en taille.

Les deux fichiers on été testé sur différente configuration et semble ne plus comporté de bogues...hum ! j'espère...

 Ajout : 6 novembre 2015 

Pour faire suite à ce fil Envoi de courriel : objet non défini, un nouveau fichier ( MailserviceProvider_EnvoiAuto_2.ods ) vient de remplacer le précédent, ajout d'une gestion d'erreur dans la fonction AddAttachments et unification du nom de la variable des URL des fichiers joints.
Le fichier est testé pour les versions AOO 4.1.1 et LibO 4.3.6.2 (officiel) avec Thunderbird par défaut, c'est glop !. Par contre avec LibO 4.4.2.2 (officiel), une erreur sur l'authentification, stop l'envoi, pas glop !

Pour LibO 4.4.2.2, J'ai pas trouvé, mais je vais encore chercher :fou:


Cordialement
Luke
Pièces jointes
MailserviceProvider_EnvoiAuto_2.ods
(18.59 Kio) Téléchargé 319 fois
BoiteCourriel_WIndows_Linux_NoAuto.ods
Envoi avec ouverture du courrielleur par défault
(19.21 Kio) Téléchargé 362 fois
Dernière édition par luky-luke le 06 Nov 2015 19:04, édité 3 fois.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 873
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Basic] Envoi de courriel Aoo4 et LibO4

Messagepar steph A » 28 Sep 2014 09:18

Bonjour lucky-luke et un grand merci pour ces codes! :super:

Surtout celui de MailServiceProvider_EnvoiAuto dont j'aime le fonctionnement "autonome" et qui va, je le sens,
encore me faire passer des nuits blanches pour l'adapter ("adapter" veut dire "compredre" chez moi :-) ) !!!
Ça a d'ailleurs commencé puisque je questionne déjà le forum ici. :lol:

Je voulais te signaler qu'une petite erreur (un oubli plutôt) s'est glissée dans la macro "Destinataire" du module "Ref_courriel"
du fichier MailServiceProvider_EnvoiAuto :
il y a la déclaration d'une feuille qui n'existe pas et qui ne sert pas dans la macro :
...
Sub Destinataire
Dim Feuille As Object, Dest As Object, Sel() As String
Feuille = ThisComponent.sheets.GetByName("Courrier_Variable")
...

Du coup je l'ai enlevée (la déclaration et sa valeur, pas la macro !!! :lol: )

Je joins donc, sous ton contrôle, une version "corrigée" à ce message.
Si tu as l'occasion et le temps d'y jeter un œil pour validation...

Encore merci lucky-luke!

À plus.

Stéphane
Pièces jointes
MailserviceProvider_EnvoiAuto_Correction1.ods
Envoi de mail via une boîte de dialogue.
(29.94 Kio) Téléchargé 288 fois
LibreOffice Version 4.2.6.3 + win XP SP3 ou Win 7 home 64 bits
steph A
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 55
Inscrit le : 09 Mars 2012 15:34

Re: [Basic] Envoi d'un PDF par courriel

Messagepar luky-luke » 28 Nov 2015 12:22

Bonjour

Un nouveau fichier pour enregistrer une sélection au format PDF et envoyer par courriel le fichier PDF créé en pièce jointe.
L'adresse d'envoi, l'objet et le corps de texte sont écris sur la feuille1 et récupérés par la macro. Les coordonnées sont modifiables dans le module1, Sub Destinataire, Object, CorpsDeTexte.
Une boite de dialogue s'ouvre et demande quelle feuille doit être exportée.
La zone d’impression est définie par macro et facilement modifiable. Cette même zone est supprimée en fin de routine.
Dans le module Utils la macro Zone_impress () défini une zone d'impréssion et la macro Delete_impresse la supprime.
Si un zone d’impression est déjà définie dans la feuilles, la définition dans les macros peut être supprimée et l'appel Delete_Impress dans la macro main doit être supprimer également.
Ne pas oublier de configurer les paramètres de messagerie dans le module SendMail.

L'envoi de courrier utilise le service com.sun.star.mail.MailServiceProvider, et fonctionne chez moi sous Aoo et LibO 4.3.x.x mais pas avec LibO 4.4.2.2 qui provoque une erreur d'authentification (pas Glop !)
 Ajout : 2 décembre 2015
après un peu de ménage sur mon disque dur et l'installation de LibO 4.4.6 officiel le fichier ci-dessous fonctionne avec.
J'ai fais du ménage dans le module SendMail en supprimant des fonctions et en regroupant les listeners dans la même macro. C'est un peu plus lisible :fou:. Les inconvénients sont qu'il n'y a plus qu'un seul destinataire, une seule pièce jointe et que le nom de l'expéditeur n’apparaît plus chez le destinataire.
Courriel_envoi_simple.ods
(12.73 Kio) Téléchargé 266 fois
 


Cordialement
Luke
Pièces jointes
Courriel_Export_Selection.ods
(15.43 Kio) Téléchargé 213 fois
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 873
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Basic] Envoi d'une selection dans le corps de texte

Messagepar luky-luke » 23 Déc 2015 18:56

Bonjour

Suite à une bonne idée de Dude dans ce fil Selection de données et envoi par mail
Pour un fichier Calc

Envoyer une sélection faite par l'utilisateur, dans le corps de texte du message et au format HTML
Envoi_TableauHTML_CorpsDeTexte.ods
(10.65 Kio) Téléchargé 114 fois

Code : Tout sélectionner   AgrandirRéduire
Option Explicit

REM =====================
'Configuration des parametres compte courrier
Const smtpPassword$ = "Mon_Mot_De_Passe"
Const UserName$ = "Mon_Nom_D'utilisateur" ' Nom d'utilisateur
Const Useradress$ = "MonAdresse@moi.fr" ' L'adresse de l'expediteur
Const ServerName$ = "smtp.moi.fr" ' Le serveur SMTP
Const ServerPort = 25        'le cas le plus général
Const ServerSecure$ = "SSL"  '"Insecure" 'ou  "STARTTLS"
REM =====================

Sub EnvoiCourriel
Dim oMSP As Object, oDisp As Object, oDude As object, oCont As Object, oAuth As Object   
Dim oPrepa As Object, oMel As Object, oSMTP As Object
Dim oDoc As Object, oCC As Object, oCadre As Object, oSel As Object
Dim oCorps As Object

oMSP = CreateUNOService("com.sun.star.mail.MailServiceProvider")
oDisp = CreateUNOService("com.sun.star.frame.DispatchHelper")
oDude = CreateUNOService("com.sun.star.datatransfer.clipboard.SystemClipboard")
oCont = CreateUNOListener("Context_","com.sun.star.uno.XCurrentContext")
oAuth = CreateUNOListener("Authent_","com.sun.star.mail.XAuthenticator")

'Utilisation du presse-papier pour le corps du message
'avec copie de la plage concernée
   oDoc = ThisComponent
   oCC = oDoc.CurrentController
   oCadre = oCC.Frame
REM Selection definie
'   oFeuille = oDoc.Sheets.getByIndex(0) '2e feuille
'   oPlage = oFeuille.getCellRangeByPosition(0,0,3,3) 'A1 à D4
'   oCC.Select(oPlage)
REM  Selection faite par l'utilisateur
   oSel = oDoc.CurrentSelection
   oDisp.executeDispatch(oCadre, ".uno:Copy", "", 0, Array())
   sCorps = oDude.getContents()

   oPrepa = com.sun.star.mail.MailMessage
'Paramètres : destinataire, expéditeur, sujet, corps
   oMel = oPrepa.create( "LeDestinatire@Elysee.fr", _
   Useradress, _
   "Eh Dude, voici un tableau !", sCorps )
   
   oSMTP = oMSP.Create("com.sun.star.mail.SMTP")
   oSMTP.Connect(oCont, oAuth)
       if oSMTP.isConnected then oSMTP.SendMailMessage(oMel)
          oSMTP.Disconnect()
End Sub

Function Context_GetValueByName(oEve) as Any
   Select Case oEve
       Case "ServerName"
         Context_GetValueByName = ServerName   'SMPTP.moi.fr
       Case "Port"
         Context_GetValueByName = ServerPort   '25
       Case "ConnectionType"
         Context_GetValueByName = ServerSecure 'SSL, Insecure ou STARTTSL
   End Select
End Function

Function Authent_GetUserName() as Any
   Authent_GetUserName = UserName ' "identifiant"
End Function

Function Authent_GetPassword() as Any
   Authent_GetPassword = smtpPassword ' "motDePasse"
End Function 


Et pour un fichier Writer

Envoyer une sélection faite par l'utilisateur, dans le corps de texte du message, au format HTML
Envoi_Selection_Texte_CorpsDeTexte_HTML.odt
(12.25 Kio) Téléchargé 191 fois

Code : Tout sélectionner   AgrandirRéduire
Sub EnvoiCourriel
oMSP = CreateUNOService("com.sun.star.mail.MailServiceProvider")
oDisp = CreateUNOService("com.sun.star.frame.DispatchHelper")
oDude = CreateUNOService("com.sun.star.datatransfer.clipboard.SystemClipboard")
oCont = CreateUNOListener("Context_","com.sun.star.uno.XCurrentContext")
oAuth = CreateUNOListener("Authent_","com.sun.star.mail.XAuthenticator")

'Utilisation du presse-papier pour le corps du message
'avec copie de la plage concernée
   oDoc = thisComponent
   oCC = oDoc.CurrentController
   oCadre = oCC.Frame
   oTexte = oDoc.CurrentSelection
   oMonTexte = oTexte(0).Text
   oMonCurseur = oMonTexte.CreateTextCursorByRange(oTexte(0))
   oDisp.executeDispatch(oCadre, ".uno:Copy", "", 0, Array())
   sCorps = oDude.getContents()

   oPrepa = com.sun.star.mail.MailMessage
'Paramètres : destinataire, expéditeur, sujet, corps
   oMel = oPrepa.create( "LeonBlum@Elysee.fr", _
   "JeanJaures@Pantheon.fr", _
   "Un texte au format HTML !", sCorps )
   
   oSMTP = oMSP.Create("com.sun.star.mail.SMTP")
   oSMTP.Connect(oCont, oAuth)
       if oSMTP.isConnected then oSMTP.SendMailMessage(oMel)
          oSMTP.Disconnect()
End Sub

Function Context_GetValueByName(oEve) as Any
   Select Case oEve
       Case "ServerName"
         Context_GetValueByName = "smtp.Elysee.fr"
       Case "Port"
         Context_GetValueByName = 25
       Case "ConnectionType"
         'SSL, Insecure ou STARTTSL
         Context_GetValueByName = "STARTTSL"
   End Select
End Function

Function Authent_GetUserName() as Any
   Authent_GetUserName = "Leonblum" ' "identifiant"
End Function

Function Authent_GetPassword() as Any
   Authent_GetPassword = "congespaye" ' "motDePasse"
End Function 


Dude a écrit:Il n'en reste qu'il faut quand même que le destinataire accepte les courriels dans ce format.


Les paramètres de configuration du compte courrier sont, soit définis en début de macro (Calc), soit à l'intérieur même du Sub(Writer). A vous de choisir ce qui vous parait le plus simple :wink:

Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 873
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité