h1

Envoyez un email via SAS

février 11, 2008

Envoyer un email via SAS

Lorsque vous écrivez un programme devant être exécuté de manière régulière, disons une routine pour faire un transfert de base de données, vous pouvez communiquer par email à votre collègue, en charge de la base, toute incohérence détectée. Je vous invite à essayer l’exemple détaillé plus loin, qui fait appel au jeu de données CLASS, disponible dans la bibliothèque SASHELP de SAS. Avec lui, un email est envoyé si un élève répertorié a 15 ans. Mais auparavant, je vous propose de comprendre le mécanisme pour envoyer un email.

1. Ecrire son message : vous écrivez via un DATA _NULL_ et des instructions (statement) PUT votre message.

2. Préciser la destination du message : puis vous indiquez vers quelle la destination votre message doit être envoyé, via le FILE statement. Si aucune incohérence n‘est détectée, vous ferez une sortie classique vers le listing (file print;). Sinon vous l’adresserez vers une référence extérieure, qu’on appellera dans notre exemple MEMO (file memo;), définie dans le FILENAME statement.

3. Créer un data set de référence : pour savoir si une incohérence existe, vous vous référerez à un data set, qui contiendra la liste des incohérences, via l’instruction SET. Lorsqu’il est vide, aucun message ne sera envoyé.

4. Alternez entre vos deux sorties via une macro variable : par défaut, il n’y aura pas d’email envoyé (file print;). Pour alterner entre les deux sorties possibles du message, on utilisera une macro variable définie dans un premier temps égal à PRINT (%let email_out=print;). Puis on changera cette valeur si besoin dans une procédure SQL avec INTO :.

5. Définir l’entête de votre email via deux mots-clés : le FILENAME statement contiendra un nom de référence. J’ai choisi MEMO ici. Puis l’email du destinataire après le mot-clé EMAIL sera listé entre guillemets. Et enfin, on ajoutera l’objet du mail via SUBJECT=’ ‘.

%let email_out=print ; 

proc sql noprint;
   create table incoherences as
      select *, 'memo' as outp
      from sashelp.class
      where age=15
      order by name;
   select distinct outp into :ema_out
      from incoherence;
quit; 

filename memo email 'veronique.bourcier@sasreference.fr'
              subject = 'Exemple de programme '; 

data _null_ ;
   set incoherences ;
   file &email_out. ;
   if _N_=1 then
      do;
         put 'Dear Administrator ';
         put // 'The SASHELP.CLASS table has ages equal to 15.';
         put // 'Records are listed below. ';
         put // 'Kind Regards, ';
         put /;
      end;
  put / NAME=;
run;

8 commentaires

  1. Merci encore pour vos tutoriels!!
    Je voulais juste signaler une miniscule erreur dans votre code. Dans la Proc SQL vous créez la table « incohérence » alors que dans l’tape data pour faire appel à cette même table vous faite un set « incohérenceS ». Il y a un « S » en trop (ou en moins).
    Merci encore


  2. Merci pour le feedback. Je viens de faire la correction. En prime j’ai ajouté les couleurs au programme.
    Véronique


  3. le code ci-dessous permet juste d’avopir un message dans le output …
    mais envoyer par mail …
    y a t-il besoin d’une connexion au serveur de la boite mail …
    comment procède t-on pour recvoir le message dans sa boite mail ??


  4. Voici le lien proposé par Ikram :
    http://www.commentcamarche.net/forum/affich-9984745-envoi-de-plusieurs-emails-via-sas


  5. Merci pour votre blog !
    Pouvez vous m’indiquer comment envoyer un mail en copie ou copie cachée ?


  6. Je viens de réussir d’envoyer un mail en remplaçant la ligne :
    file &email_out. ; par file memo;
    Il me semble que la première ligne envoie le résultat dans l’ouput ce qui est utile pour les tests, et que la deuxième ligne envoie réellement le mail.


  7. Bonjour,
    Je voue prie de bien.vouloir m’indiquer un code pour envoyer un fichier html ou Excel par mail a une date donnée.
    Je fais une relance chaque jour et comme on me demande de relancer également le samedi je veux l’automatiser dans la semaine pour qu’elle soit lancée le samedi et envoyer la donnée de sortie.
    Je vous remercie par avance


  8. Bonjour, connaitriez-vous l’option qui permet de voir les mails envoyés dans la boite des éléments envoyés ? Pas de trace des mails, alors ma parade c’est de mettre l’adresse d’envoi en copie cachée (bcc=), pas terrible… Merci d’avance pour votre aide.



Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :