Envoyer ses résultats par mail.
Article mis en ligne le 13 novembre 2021

par Philippe MICHEL

Dans le passé pour envoyer mes résultats à tous par mail j’ai utilisé du PHP, du Python mais au final autant rester dans R.
Pour envoyer des mails il faut un serveur SMTP (ça fait peur !) & un script capable de gérer une boucle qui va générer les mails & les passer au serveur. Comme souvent mon exemple tourne sur une boucle en for ce qui n’est probablement pas le plus rapide. Un petit coup de sapply serait plus élégant. J’y travaille.

Créer un serveur mail

Ce paragraphe n’est valable que pour Linux. Tant pis pour les autres. Créer un serveur SMTP sous Linux est très complexe :

  • Installer postfix avec le système de gestion des paquets de votre distribution. En exemple pour Debian taper (en root) :
    apt-get install postfix
  • Lors de l’installation une fenêtre vous demandera la configuration type du serveur de messagerie : choisir "Site Internet". Voilà c’est fait. Si vous voulez fignoler un bon tuto.

Envoyer un mail personnalisé

Nous allons envoyer un mail commun à tous mais avec une pièce jointe différente pour chacun. Les données (adresse mail, nom de la pièce jointe etc.) sont stockés dans une dataframe nommée groupe, habituellement issue d’un fichier csv avec au moins deux colonnes :

  • fichier : adresse du fichier sur l’ordinateur
  • email : adresse mail du destinataire
  • La variable smtp de la fonction sendmail sera configurée avec les mêmes valeurs que celles que vous utilisez tous les jours dans votre logiciel de mail & qui vont été fournies par votre fournisseur d’accès internet ou autre.
     
    1.  ff <- "<moi@machin.com>" # Adresse de l'expéditeur
    2. ll <- length(groupe$fichier) #
    3. for (i in 1:ll){
    4. too <- groupe$email[i]
    5. att <- groupe$fichier[i] #
    6. sendmail(
    7.                    from <- ff ,
    8.                    to <- too,
    9.                   encoding = "utf-8",
    10.                  subject <- "titre du mail",
    11.                  body <- list(
    12.                                        "Bonjour, bla bla... Bien cordialement, Jean MACHIN",mime_part(att)), # corps du texte avec la pièce jointe
    13.                                        smtp = list(
    14.                                                              host.name = "smpt.jean.machin",
    15.                                                              port = 465,
    16.                                                              user.name = "jeannot",  
    17.                                                              passwd = "xxxxxx",
    18.                                                             ssl = TRUE),
    19.                                        authenticate = TRUE,  
    20.                                       send = TRUE ) }

    Télécharger

Il n’y a plus qu’à faire tourner.