[LibO] Envoyer des courriels en Basic pour les Nuls

Les dernières nouvelles du front du libre, débats et autres informations générales sur nos suites bureautiques préférées ou sur ce site, en évitant de provoquer toute polémique (troll).
Aucun support assuré ici : posez votre question dans la section appropriée.

Modérateur : Vilains modOOs

psilocybe
Membre hOOnoraire
Membre hOOnoraire
Messages : 135
Inscription : 21 mai 2012 19:40

[LibO] Envoyer des courriels en Basic pour les Nuls

Message par psilocybe »


La modération vous a écrit: Titre modifié pour plus de clarté

Bonjour à Tous,

Juste ce petit message pour vous dire qu'il est désormais possible d'envoyer des emails en utilisant quelques lignes en Basic :

Code : Tout sélectionner

Sub Main

    Rem Ask the user for a sender email address.
    sSender = InputBox("Please enter the sender email address")
    Rem User clicked Cancel.
    if sSender = "" then
        exit sub
    endif

    Rem Ask the user for recipient's email address.
    sRecipient = InputBox("Please enter the recipient's email address")
    Rem User clicked Cancel.
    if sRecipient = "" then
        exit sub
    endif

    Rem Ask the user for subject's email.
    sSubject = InputBox("Please enter the subject's email")
    Rem User clicked Cancel.
    if sSubject = "" then
        exit sub
    endif

    Rem Ask the user for content's email.
    sBody = InputBox("Please enter the content's email")
    Rem User clicked Cancel.
    if sBody = "" then
        exit sub
    endif

    Rem Ok now we have everything, we start sending an email.

    Rem We will use 4 UNO services which are:
    Rem - com.sun.star.mail.MailUser: This is the service which will ensure the correct configuration
    Rem   of SMTP and IMAP servers (we can thank Mozilla for the ISPBD database that I use).
    Rem - com.sun.star.mail.MailServiceProvider: This is the service that allows you to use SMTP and
    Rem   IMAP servers. We will use this service with the help of the previous service.
    Rem - com.sun.star.datatransfer.TransferableFactory: This service is a forge for the creation of
    Rem   Transferable which are the basis of the body of the email as well as these attached files.
    Rem - com.sun.star.mail.MailMessage: This is the service that implements the email message.
    Rem Now that everything is clear we can begin.


    Rem First we create the email.

    Rem This is our Transferable forge, it greatly simplifies the LibreOffice mail API...
    oTransferable = createUnoService("com.sun.star.datatransfer.TransferableFactory")

    Rem oBody is the body of the email. It is created here from a String but could also
    Rem have been created from an InputStream, a file Url (file://...) or a sequence of bytes.
    oBody = oTransferable.getByString(sBody)

    Rem oMail is the email message. It is created from the com.sun.star.mail.MailMessage service.
    Rem It can be created with an attachment with the createWithAttachment() method.
    oMail = com.sun.star.mail.MailMessage.create(sRecipient, sSender, sSubject, oBody)

    Rem Ask the user for the URLs of the attached files.
    oDialog = createUnoService("com.sun.star.ui.dialogs.FilePicker")
    oDialog.setMultiSelectionMode(true)
    if oDialog.execute() = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
        oFiles() = oDialog.getSelectedFiles()
        Rem These two services are simply used to get a suitable file name.
        oUrlTransformer = createUnoService("com.sun.star.util.URLTransformer")
        oUriFactory = createUnoService("com.sun.star.uri.UriReferenceFactory")
        for i = lbound(oFiles()) To ubound(oFiles())
            oUri = getUri(oUrlTransformer, oUriFactory, oFiles(i))
            oAttachment = createUnoStruct("com.sun.star.mail.MailAttachment")
            Rem ReadableName must be entered. This is the name of the attached file
            Rem as it appears in the email. Here we get the file name.
            oAttachment.ReadableName = oUri.getPathSegment(oUri.getPathSegmentCount() - 1)
            Rem The attachment is retrieved from an Url but same as for oBody
            Rem it can be retrieved from a String, an InputStream or a sequence of bytes.
            oAttachment.Data = oTransferable.getByUrl(oUri.getUriReference())
            oMail.addAttachment(oAttachment)
            next i
    endif
    Rem End of creating the email.


    Rem Now we need to send the email.

    Rem First we create a MailUser from the sender address. This is not necessary the
    Rem sender address but it must follow the rfc822 (ie: my surname <myname@myisp.com>).
    Rem The IspDB Wizard will automatically be launched if this user has never been configured.
    oUser = com.sun.star.mail.MailUser.create(sSender)
    Rem User canceled IspDB Wizard.
    if isNull(oUser) then
        exit sub
    endif

    Rem Now that we have the user we can check if they want to use a Reply-To address.
    if oUser.useReplyTo() then
        oMail.ReplyToAddress = oUser.getReplyToAddress()
    endif
    Rem In the same way I can test if the user has an IMAP configuration with oUser.supportIMAP()
    Rem and then create an email thread if necessary. In this case you must:
    Rem - Construct an email message thread (as done previously for oMail).
    Rem - Create and connect to an IMAP server (as we will do for SMTP).
    Rem - Upload this email to the IMAP server with: oServer.uploadMessage(oServer.getSentFolder(), oMail).
    Rem - Once it has been uploaded, retrieve the MessageId with the oMail.MessageId property.
    Rem - Set the oMail.ThreadId property to MessageId for all subsequent emails.
    Rem Great you have successfully grouped the sending of emails into a thread.

    Rem To send the email we need to create an SMTP server. Here's how to do it:
    SMTP = com.sun.star.mail.MailServiceType.SMTP
    oServer = createUnoService("com.sun.star.mail.MailServiceProvider").create(SMTP)
    Rem Now we connect using the SMTP user's configuration.
    oServer.connect(oUser.getConnectionContext(SMTP), oUser.getAuthenticator(SMTP))
    Rem Well, that's it, we are connected, all we have to do is send the email.
    oServer.sendMailMessage(oMail)
    Rem Don't forget to close the connection.
    oServer.disconnect()
    MsgBox "The email has been sent successfully." & chr(13) & "Its MessageId is: " & oMail.MessageId
    Rem Et voilà le tour est joué...

    Rem Ok all done, this took 40 lines of code so enjoy...
    Rem On the other hand, this is only an example of popularization,
    Rem and all the necessary error checks are not in place...

End Sub


Function getUri(oUrlTransformer As Variant, oUriFactory As Variant, sUrl As String) As Variant
    oUrl = createUnoStruct("com.sun.star.util.URL")
    oUrl.Complete = sUrl
    oUrlTransformer.parseStrict(oUrl)
    oUri = oUriFactory.parse(oUrlTransformer.getPresentation(oUrl, false))
    getUri = oUri
End Function

Il faut bien sur installer la dernière version de eMailerOOo...
Et si vous allez dans: Outils -> Macros -> Éditer les Macros... -> eMailerOOo -> SendEmail vous pourrez vous amuser avec cette macro.

Ah oui pour les fainéant qui ne prend pas la peine de lire les documentations:
- eMailerOOo ne fonctionne plus sous OpenOffice et sous Windows il faut la version 7 minimum de LibreOffice.
- Il faut aussi un JRE Java 11 minimum quelque soit l'installation.
- La macro SendEmail ne fonctionne pas si aucun document n'est ouvert dans LibreOffice (je ne sais pas pourquoi...)

Voilà...
Dernière modification par psilocybe le 07 nov. 2023 19:29, modifié 6 fois.
LibreOffice 7.3.7.2 - Lubuntu 22.04 - Python 3.10 - Java 11 OpenJDK amd64
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9366
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: Envoyer des courriels en Basic

Message par tintin »

Bonjour,
psilocybe a écrit : 02 nov. 2023 21:52 Ah oui pour les fainéant qui ne prend pas la peine de lire les documentations:
- eMailerOOo ne fonctionne plus sous OpenOffice et sous Windows il faut la version 7 minimum de LibreOffice.
- Il faut aussi un JRE Java 11 minimum quelque soit l'installation.
- La macro SendEmail ne fonctionne pas si aucun document n'est ouvert dans LibreOffice (je ne sais pas pourquoi...)
En général les avertissements et prérequis viennent avant le reste. Quant aux fainéants, ils apprécieront.
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_412 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [LibO] Envoyer des courriels en Basic

Message par Dude »

Salut,
psilocybe a écrit : 02 nov. 2023 21:52 eMailerOOo ne fonctionne plus sous OpenOffice
Pour OpenOffice, il y a ce suprême de code et pas besoin d'extension.
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
Messages : 1274
Inscription : 10 nov. 2006 15:04
Localisation : F-Oise

Re: [LibO] Envoyer des courriels en Basic

Message par OOo - Ekel »

Bonjour,

Moi, j'apprécie surtout :
psilocybe a écrit :Ah oui pour les fainéant qui
alors qu'il existe des outils pour corriger les fautes.

Cordialement.
Ekel

KUbuntu Jammy Jellyfish (22.04) : LibreOffice 24.2.0.3 Officielle
AMD Ryzen 5 5600G
AMD Radeon RX 6650 XT
22" + 22"
16 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
psilocybe
Membre hOOnoraire
Membre hOOnoraire
Messages : 135
Inscription : 21 mai 2012 19:40

Re: [LibO] Envoyer des courriels en Basic

Message par psilocybe »

@Dude essaie d'envoyer un mail avec un compte Google, ou alors essaie de créer des threads de courriels, ou alors essaie de créer le corps du message et ces fichiers attachés, à partir d'un texte ou d'une séquence binaire ou d'une Url ou d'un flux de données, en une ligne de code, ou alors..., ou alors...
Comment croire qu'un code vieux de plus de 10 ans fonctionne toujours? Je pense que cela fait très longtemps que tu n'as pas envoyé quoi que ce soit avec OpenOffice... Je pense que je peux attendre un bon moment...
Pour les autres: fainéant

Sinon merci pour la modification du titre... je ne suis pas bon avec les balises...
LibreOffice 7.3.7.2 - Lubuntu 22.04 - Python 3.10 - Java 11 OpenJDK amd64
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 951
Inscription : 19 août 2018 05:20

Re: [LibO] Envoyer des courriels en Basic

Message par Dolev »

Bonjour,
psilocybe a écrit : 04 nov. 2023 17:23 Comment croire qu'un code vieux de plus de 10 ans fonctionne toujours? Je pense que cela fait très longtemps que tu n'as pas envoyé quoi que ce soit avec OpenOffice...
Pour le croire, il suffit de ne pas faire le fénéant et le tester. :)
com.sun.star.system.SystemMailProvider fonctionne très bien
Nous utilisons ce service pour envoyer nos publipostages. Mais nous avons notre propre SMTP pro parce que notre politique de sécurité nous interdit de faire transiter nos contenus par un provider américain.
Open Office 4.1.15 sous Windows 11
psilocybe
Membre hOOnoraire
Membre hOOnoraire
Messages : 135
Inscription : 21 mai 2012 19:40

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par psilocybe »

Ah oui c'est vrai, j'oubliais que vous étiez tous de super cadors, des super-héros ici...
Que tes super pouvoirs te permettaient de parler de quelque chose sans même le connaître...
Combien de posts faut-il pour atteindre ce niveau?
LibreOffice 7.3.7.2 - Lubuntu 22.04 - Python 3.10 - Java 11 OpenJDK amd64
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9366
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par tintin »

Là, mon cher, vous frisez l'insolence et la modification du titre de ce sujet en atteste.
Si ce forum ne vous plaît pas, rien ne vous oblige à le fréquenter.
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_412 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
psilocybe
Membre hOOnoraire
Membre hOOnoraire
Messages : 135
Inscription : 21 mai 2012 19:40

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par psilocybe »

Si ce forum ne vous plaît pas, rien ne vous oblige à le fréquenter.
J'ai bien compris que c'est ce que vous souhaiteriez et ce n'est pas la première fois que vous postez une telle réponse. Je ne sais pas quel est votre age, mais vous commencez à radoter...

Par contre je pense qu'il va falloir me supporter encore un bon moment, parce que si je poste ici c'est pour apporter aux utilisateurs des outils facile d'emploi (quelques clics) et accessible (pas besoin de réfléchir), des outils que ma mère serait capable d'utiliser et c'est une pioche, bref des outils pour les nuls.
Pour les supers cadors rien n'est prévu et je préfère m'adresser aux gens normaux...
Dernière modification par psilocybe le 05 nov. 2023 15:41, modifié 1 fois.
LibreOffice 7.3.7.2 - Lubuntu 22.04 - Python 3.10 - Java 11 OpenJDK amd64
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
Messages : 1274
Inscription : 10 nov. 2006 15:04
Localisation : F-Oise

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par OOo - Ekel »

Bonjour,

Merci pour la définition du mot fainéant, je voulais juste préciser qu'au pluriel, il faut ajouter un s.

Mais peut-être était-ce trop difficile à comprendre ?!

Cordialement.
Ekel

KUbuntu Jammy Jellyfish (22.04) : LibreOffice 24.2.0.3 Officielle
AMD Ryzen 5 5600G
AMD Radeon RX 6650 XT
22" + 22"
16 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9366
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par tintin »

psilocybe a écrit : 05 nov. 2023 12:51 ... apporter aux utilisateurs [...] des outils pour les nuls. [...] je préfère m'adresser aux gens normaux...
Les gens normaux apprécieront. :mrgreen:
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_412 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
psilocybe
Membre hOOnoraire
Membre hOOnoraire
Messages : 135
Inscription : 21 mai 2012 19:40

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par psilocybe »

Hé les gars, si vous voulez, on peut parler philosophie?
Je ne sais pas comment vous arrivez à poster dans un fil qui propose une macro et à arriver à donner votre avis sans avoir essayé la macro? Vous êtes de super cadors...
A part du harcèlement, je ne vois pas ce qui vous motive... Dans tous les cas je vous demande d’arrêter. C'est pas pour moi, moi cela me fait rigoler, c'est pour ceux qui nous lise. Et puis là ça devient maladif, je n'arrive plus à tenir un fil propre... (11 ème message pour ne rien dire...)
LibreOffice 7.3.7.2 - Lubuntu 22.04 - Python 3.10 - Java 11 OpenJDK amd64
BERNES
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 15 juil. 2010 16:43

Re: [LibO] Envoyer des courriels en Basic pour les nuls

Message par BERNES »

Bonjour.
Ce serait tellement bien si le respect pouvait être bien compris et assimilé.
Ce serait tellement bien si la décence pouvait être respectée ici.
Ce serait tellement bien si de tels messages pouvaient ne plus avoir leur place ici.
Ce serait tellement bien si ... mais ... est-ce trop demander ?
Libre Office 7.6.6.3 (x64) sur Windows 11 23H2 x64 Edition familiale
AOO 4.1.15