3 modi per inviare una mail da programma in Sage X3, anche con più allegati

In questo articolo vedremo come inviare una mail da codice adonix in Sage X3.
Questi i punti che affronteremo:

1) Introduzione meladx/Send
2) Invio tramite meladx (per me il migliore: alla fine basta una semplice riga per inviare una mail!)
3) Invio tramite Workflow
4) Invio tramite ENVOI_MAIL(…) From AWRKMEL

Inviare mail da programma in Sage X3: Send e meladx a confronto

Sage x3 ha sostanzialmente due modi nativi per inviare mail.
Il primo è l’eseguibile meladx, che si trova dentro la cartella runtime\bin.
Il secondo è l’istruzione Send, che veniva usata per inviare mail attraverso un applicativo della postazione client (per maggiori informazioni su “Send GSERMES” vai qui).

L’eseguibile Meladx

Meladx invia i messaggi tramite protocolli SMTP/POP3 attraverso il server di posta specificato nel comando.
Quando l’invio avviene tramite workflow o altri sistemi predisposti da Sage X3 (per esempio via batch)
il server utilizzato è quello impostato nella variabile SERMES del capitolo supervisore (funzione ADPVAL).

L’istruzione Send

L’istruzione Send invia i messaggi di posta con il protocollo MAPI attraverso la postazione client che esegue Sage X3.
Non è utilizzabile da web. Serve per l’invio da programma da client.
È necessario che la postazione abbia un client di posta elettronica MAPI, e che sia in esecuzione.
Presenta il limite di 500 byte per messaggio (allegati esclusi; per meladz il limite è 64kb).

È presente anche la funzione Seldest  che permetteva di far inserire all’utente finale i destinatari e altre informazioni.
In questo post non tratteremo queste chiamate client.

Invio di una mail tramite comando meladx

Il comando meladx è un comando nativo del sistema Sage x3; utilizza i protocolli SMTP/POP3
e in pratica necessita di un file strutturato con i dati necessari all’invio della mail.

Ecco un esempio di comando che si può lanciare sia da prompt dos che attraverso una call SYSTEME.

meladx -v -s mail.server.com -r from@test.com < C:\file.txt

Il contenuto file potrebbe essere per esempio:

From: from@test.com
To: destinatario@esempio.net
Subject: Titolo mail

Messaggio mail inviata da programma 
Cordiali saluti

Capito il funzionamento è facile scrivere una funzione che scrive al volo il file direttamente da programma:

Subprog INVIOMAIL(NAMEFROM, ADRFROM, ADRTO, ADRCC, SUBJECT, TEXT, SERVER)
# sagedev.it
Value Char NAMEFROM()     #nome del mittente
Value Char ADRFROM()      #indirizzo mittente
Value Char ADRTO()        #indirizzo mail destinatario (se multipli separare con ";")
Value Char ADRCC()        #indirizzo in copia
Value Char SUBJECT()      #titolo della mail
Value Char TEXT()         #testo della mail
Value Char SERVER()       #server di posta: per esempio mail.dominio.com

  Local Char NAMEFILE(30)
  Local Char PATH(255)
  Local Char EXTENSION(5)
  NAMEFILE = "mail_text_"+num$(adxpid)
  PATH = "YSAGEDEV\TMP"
  EXTENSION="TXT"

  NAMEFROM= vireblc(NAMEFROM,2)
  If NAMEFROM=""
    NAMEFROM=ADRFROM
  Endif

  Openo filpath(PATH,NAMEFILE,EXTENSION),0 Using [XOUT]
  Wrseq "From: "+ NAMEFROM Using [XOUT]
  Wrseq "to: "+ADRTO Using [XOUT]
  Wrseq "cc: "+ADRCC Using [XOUT]
  Wrseq "Subject: "+ SUBJECT  Using [XOUT]
  Wrseq  "" Using [XOUT]
  Wrseq  TEXT Using [XOUT]

  Local Integer XSTAT
  Openo Using [XOUT]
  XMAIL = "meladx"-"-s"-SERVER-"-r"-ADRFROM+" -v <"- filpath(PATH, NAMEFILE, EXTENSION)
  Call SYSTEME(adxmac(0),XMAIL ,"",XSTAT) From ORDSYS
End

Basterà richiamarla in questo modo:

Call INVIOMAIL("Ufficio vendite", "vendite@sagedev.it", "caio@test.com;tizio@blabla.it", "test@esempio.net", "TITOLO mail", "Messaggio mail da programma", "mail.sagedev.it")

In effetti, una volta inserita questa funzione in una nostra libreria, con una semplice chiamata facciamo tutto!

meladx e allegati

Per inviare allegati tramite meladx, basta aggiungere alla fine del file delle righe come le seguenti:

# Application/others ; name="TEST1.pdf"[TEST1.pdf] "C:\temp\TEST1.pdf" 
# Application/others ; name="TEST2.doc"[TEST2.doc] "C:\temp\TEST2.doc"

Invio tramite Workflow

Ecco i passi per implementarne un semplice esempio:

  1. creare l’evento YMA nella tabella diversa 908 (funzione GESADI); come descrizione possiamo mettere “Invio mail da programma”;
    è sempre meglio utilizzare un codice evento nuovo per evitare di interferire con altri utilizzi preesistenti;
    (notare che non si può mettere il codice attività sulla singola voce, pertanto è una di quelle attività da segnarsi e controllare in caso di aggiornamento di Sage X3)

    Sage v9 GESADI Tabella Diversa 908 Tipo Eventi Workflow

    Sage v9 GESADI Tabella Diversa 908 Tipo Eventi Workflow

     

  2. creare il workflow YMAIL (funzione GESAWA)
    • con codice evento YMA
    • Tipo evento “Altro”,
    • nel riquadro “Gestione” della scheda “Generale” mettere la spunta in “Attivazione Mail

      Sage v9 - GESAWA Workflow per invio mail

      Sage v9 – GESAWA Workflow per invio mail

    • nella scheda “Destinatari” inserire una riga con Tipo “Utente” e Destinatari “GYDESTINATARIO” (è una variabile globale che va definita nel programma), Invio mail “Si” , il resto “No”

      Sage v9 - Tab Destinatari Workflow

      Sage v9 – Tab Destinatari Workflow

    • nella scheda “Messaggio”
      1. nell’oggetto scrivere GYOGGETTO
      2. nel testo scrivere |GYTESTOMAIL| (va messo in mezzo a due pipeline per far capire al sistema che, all’interno del testo, c’è una variabile)

        Sage v9 Tab Messaggio per Workflow invio stampa tramite mail

        Sage v9 Tab Messaggio per Workflow invio stampa tramite mail

  3. crea regola

Per inviare una mail basterà richiamare il codice seguente

Global Char GYDESTINATARIO(20),GYOBJTMP(20),GYBODYTMP(50)
GYDESTINATARIO = "from@esempio.net"
GYOGGETTO = "PROVA INVIO MAIL"
GYTESTOMAIL = "Testo messaggio di esempio"
Call WORKFLOW (1,"YMA","",GUSER) From AWRK
Kill    GYDESTINATARIO
Kill    GYOGGETTO
Kill    GYTESTOMAIL

Le chiamate Kill servono per cancellare le variabili globali temporanee.

Workflow e allegati

L’invio mail tramite workflow permette diverse opzioni per allegare un file.

Campo “Documento da allegare

La prima opzione è inserire nel campo “Documento da allegare” della scheda “Messaggio” del workflow il percorso assoluto del file da allegare.

Volendo si può anche inserire il nome di una variabile globale opportunamente alimentate in fase di programma.

Per inserire più allegati basterà separare i loro percorsi con un “;” (punto e virgola); ecco degli esempi:

"nomefile1.txt;nomefile2.txt"

GFILPATH+";"+GYFILE2

Allegare i file allegati agli oggetti

Come si può notare nelle normali finestre di gestione di Sage X3 (per esempio nelle fatture o negli ordini),
nel menù a destra c’è un’icona che permette di allegare dei file all’oggetto in gestione.

Il persorso di questi file viene associato ad un tipo e ad una categoria.

Icona degli allegati nella gestione ad oggetto

Icona degli allegati nella gestione ad oggetto

Questi file allegati ad un oggetto possono essere allegati anche all’eventuale mail inviata tramite un workflow con Tipo evento “Oggetto”.
Sempre nella scheda  “Messaggio” di configurazione del workflow è possibile poi indicare:

  1. se allegare alla mail gli allegati dell’oggetto (flag “Allegato”)
  2. se allegare tutti i tipi di allegato (flag “Tutti i tipi”) o quali tipi allegare
  3. se allegare tutte le categorie di allegato e quali categorie (flag “Tutte le categorie”)

Configurazione dell'invio degli allegati in un workflow con invio mail

Questi allegati si vanno ad aggiungere a quelli indicati nel campo “Documento da allegare“.

 

Invio tramite ENVOI_MAIL(…) From AWRKMEL

Un terzo modo è quello di richiamare direttamente la funzione di invio mail utilizzata dai workflow.
Ne troviamo l’esempio nel blog dell’esperto Matteo Carminati,
a cui vi rimando e dove potrete trovare molte altre cose utili: vai al blog di Matteo Carminati

 

Alla prossima! E ricordati di iscriverti alla newsletter!

Potrebbero interessarti anche...

4 risposte

  1. marino ha detto:

    Se vi interessa ho fatto realizzare una azione che permette di intercettare la stampa di un qualunque documento sage. Stamparlo, archiviarlo e inviarlo per email recuperando i destinatari dal soggetto intestatario del documento stampato. Ovviamente tutto parametrizzato tramite un nuovo oggetto standard x3

Lascia un commento

Scopri di più da SageDev

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading