Mandare una mail da un programma CL

Accedi per salvare

Serve avvisare qualcuno quando un batch finisce. La via più breve è SNDSMTPEMM, che è un comando CL normale e non richiede nulla di installato.

DCL VAR(&ORA) TYPE(*CHAR) LEN(6)
RTVSYSVAL SYSVAL(QTIME) VAR(&ORA)

SNDSMTPEMM RCP((operatori@azienda.it))                  +
           SUBJECT('Chiusura mensile conclusa')         +
           NOTE('Elaborazione terminata alle ' *CAT &ORA)

L'ora si prende con RTVSYSVAL da QTIME, che è un carattere di sei posizioni nella forma HHMMSS.

Per allegare un file dell'IFS si aggiunge ATTACH:

SNDSMTPEMM RCP((operatori@azienda.it))       +
           SUBJECT('Report di chiusura')      +
           NOTE('In allegato il riepilogo.')  +
           ATTACH(('/home/batch/chiusura.csv'))

Esempio: il batch che racconta com'è andata

Una mail che parte solo quando tutto è filato liscio non serve a niente: nessuno si accorge della mail che non è arrivata. Quella utile è la mail che distingue i due esiti.

PGM

  DCL VAR(&ORA) TYPE(*CHAR) LEN(6)

  CALL PGM(PRODLIB/CHIUSURA)
  MONMSG MSGID(CPF0000) EXEC(DO)
    RTVSYSVAL SYSVAL(QTIME) VAR(&ORA)
    SNDSMTPEMM RCP((operatori@azienda.it))                        +
               SUBJECT('CHIUSURA INTERROTTA')                     +
               NOTE('Interrotta alle ' *CAT &ORA *CAT             +
                    '. Job log da controllare.')
    RETURN
  ENDDO

  RTVSYSVAL SYSVAL(QTIME) VAR(&ORA)
  SNDSMTPEMM RCP((operatori@azienda.it))              +
             SUBJECT('Chiusura conclusa')             +
             NOTE('Terminata alle ' *CAT &ORA)

ENDPGM

Il RETURN dentro il DO è quello che impedisce alla mail di successo di partire subito dopo quella di errore. Senza, arrivano tutte e due, e la seconda cancella la prima nella testa di chi legge.

Vale la pena mettere l'esito nell'oggetto e non nel corpo: chi guarda la posta dal telefono vede solo quello.

Attenzione

il comando fallisce senza spiegare quale prerequisito manchi, e i prerequisiti sono due. Il server SMTP dev'essere avviato: dopo STRTCPSVR SERVER(*SMTP) si controlla che i lavori siano davvero partiti con WRKACTJOB SBS(QSYSWRK), cercando QTSMTPCLTD e QTSMTPSRVD. Il profilo dev'essere censito: serve una voce nella directory di sistema (WRKDIRE) e un nome SMTP associato (WRKNAMSMTP).

Suggerimento

quando la mail parte ma non arriva, il prerequisito non c'entra. Il punto da guardare è il mailhub di inoltro, che si legge con CHGSMTPA: senza un inoltro valido il sistema accetta il messaggio e non lo consegna a nessuno.

Nota

il testo di NOTE è limitato. Per messaggi lunghi conviene scrivere il contenuto in un file sull'IFS e allegarlo, invece di comporre il corpo nel programma.


Rilasci. SNDSMTPEMM è presente su tutti i rilasci ancora supportati. Il vincolo vero non è la versione ma la configurazione: server SMTP avviato e profilo presente nella directory di sistema. Si verificano con WRKDIRE, WRKNAMSMTP e WRKACTJOB SBS(QSYSWRK).

Fonti

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati