Invio mail

From SageDev KB
Jump to navigation Jump to search

Per problemi con l'invio di mail, vedi Troubleshooting_mail

Per maggiori info cercare "meladx" nel file di help chm: il comando "meladx" va usato per l'invio da server, la chiamata "send" per l'invio da programma da client.

Invio tramite ENVOI_MAIL[edit]

fonte: https://matteo72.wordpress.com/2013/12/01/sage-x3-how-to-send-an-e-mail/

Subprog SEND_MAIL(PTO,PCC,PSUBJECT,PBODY,PJOINFIC)
Value Char PTO()(0..)
Value Char PCC()(0..)
Value Char PSUBJECT
Value Clbfile PBODY
Value Char PJOINFIC()
 
    #YTYPMES:  1 = use the global parameter GTYPMES, 2 = sent by server, 3 = sent by client
    Local Integer YTYPMES                : YTYPMES     = 1                             
    Local Integer YREQREC                : YREQREC     = 2                             
    Local Integer YREQIMP                : YREQIMP     = 2
    Local Char    YUSER                  : YUSER       = GUSER
    Local Char    YMAIL                  : YMAIL       = ""
    Local Char    YOBJJOI                : YOBJJOI     = ""
    Local Char    YCLEOBJ                : YCLEOBJ     = ""
    Local Char    YCHRONO                : YCHRONO     = ""
 
    # 1 = Write trace 
    Local Integer YERD                   : YERD        = 0                             
    Local Char    YUSR_EMAIL(250)(0..999) 
    Local Integer YUSR_ENVOI(0..999)      
    Local Integer YUSR_SUIVI(0..999)      
    Local Integer YUSR_NB                
    Local Clbfile YTEXCLB                : YTEXCLB     = PBODY
    Local Char    YTEXOBJ(250)           : YTEXOBJ     = PSUBJECT
    Local Char    YPCEJOI(250)(0..99)    
    Local Integer YNBJOI                 
    Local Char    YTYPJOI(250)           : YTYPJOI(0)  = ""
    Local Integer YCATJOI                : YCATJOI     = 0
    Local Char    YCONTXT(250)           : YCONTXT(0)  = ""
 
    #
    #Recipients
    #
     
    YUSR_NB = 0
     
    Local Integer I
    For I = 0 To dim(PTO) - 1
        If vireblc(PTO(I),2) <> "" Then
            YUSR_EMAIL(YUSR_NB) = vireblc(PTO(I),2)
            YUSR_ENVOI(YUSR_NB) = 2
            #YUSR_SUIVI(YUSR_NB) = 0
            YUSR_NB += 1
        Endif
    Next
 
    For I = 0 To dim(PCC) - 1
        If vireblc(PCC(I),2) <> "" Then
            YUSR_EMAIL(YUSR_NB) = vireblc(PCC(I),2)
            YUSR_ENVOI(YUSR_NB) = 3
            #YUSR_SUIVI(YUSR_NB) = 2
            YUSR_NB += 1
        Endif
    Next
 
 
 
    #
    #Attachments !! It works only with 1 attachement !! 
    #
    #YNBJOI = 0    
    #For I = 0 To dim(PJOINFIC) - 1
    #    If vireblc(PJOINFIC(I),2) <> "" Then
    #        YPCEJOI(YNBJOI) = vireblc(PJOINFIC(I),2)
    #        YNBJOI += 1
    #    Endif
    #Next
 
    YNBJOI      = 1
    YPCEJOI(0)  = vireblc(PJOINFIC(0),2)
 
    Call ENVOI_MAIL(YTYPMES,YREQREC,YREQIMP,YUSER,YMAIL,YOBJJOI,YCLEOBJ
&                 ,YCHRONO,YERD,YUSR_EMAIL,YUSR_ENVOI,YUSR_SUIVI,YUSR_NB
&                 ,YTEXCLB,YTEXOBJ
&                 ,YPCEJOI,YNBJOI,YTYPJOI,YCATJOI,YCONTXT) From AWRKMEL

End

Ecco come richiamare il metodo

Local Char XMSG(250)(8)
Local Char XSUJET(250)
Local Integer XXCONTA : XXCONTA = 0
 
XXCONTA += 1: XMSG(XXCONTA) = "Test email body, row1" + num$(XXCONTA)
XXCONTA += 1: XMSG(XXCONTA) = "row 2 " + num$(XXCONTA)
XSUJET = "E-mail subject"
 
Call SEND_MAIL("xxx.xxx@xxxxx.xxx","",XSUJET,XMSG,"")


Invio tramite meladx[edit]

Comando sistema: meladx -v -s mail.sagedev.it -r info@sagedev.it <C:\SAGE\SAGEX3V6\X3V6\Folders\SAGEDEV\file.txt

Contenuto file

From: info@sagedev.it
To: corsi@sagedev.it
Subject: Sagedev, Invio Documento

Gentile XXX,
 
con la presente inviamo ...
 
Cordiali saluti


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

Esempio (da verificare) con scrittura file via programma:

$APERTURA_MAIL
Openo filpath("TMP",'crmordini'+num$(adxpid),"TXT"),0 Using [XOUT]
Wrseq 'From: crmordiniduplicati' Using [XOUT]
 
Wrseq 'to: XXX@ZZZ.it' Using [XOUT]
Wrseq 'cc: YYY@ZZZ.it' Using [XOUT]
 
Wrseq 'Subject: Sagedev, Invio Documento '  Using [XOUT]
 
Char NOMEFILE (23)
Wrseq  '' Using [XOUT]
 
If YERRSOLFAT = 2 and YERR < 1
    Wrseq  'NESSUNA RIGA INSERITA PER SOLO FATTURATO TRACCIA YORDCRM' Using [XOUT]
ELSE
    Wrseq  'ci deve essere qualche dato duplicato sugli ordini del crm controllare TRACCIA YORDCRM' Using [XOUT]
Endif
 
Local Integer XSTAT
Openo Using [XOUT]
XMAIL = "meladx"-"-s"-"outlook.unidom.local"-"-r"-"KKK@ZZZ.it"+' -v <'- filpath("TMP",'crmordini'+num$(adxpid),"TXT")
Call SYSTEME(adxmac(0),XMAIL ,"",XSTAT) From ORDSYS
Return

Invio tramite Workflow[edit]

(Soluzione A.Zampieri)

Passi d'esempio:

  1. creare l'evento YYY nella tabella 908 con descrizione "Chiamata a programma" e descr. breve "Da pgm" (è meglio utilizzare un codice evento nuovo per evitare di intersecare altri utilizzi)
  2. creare il workflow YMAIL
    • con codice evento YYY
    • Tipo evento "Altro",
    • nel riquadro "Gestione" della scheda "Generale" mettere la spunta in "Attivazione Mail"
    • nella scheda "Destinatari" inserire una riga con Tipo "Utente" e Destinatari "GYUSRTMP" (è una variabile globale che va definita nel programma), Invio mail "Si" , il resto "No"
    • nella scheda "Messaggio"
      1. nell'oggetto scrivere GYOBJTMP
      2. nel testo scrivere |GYBODYTMP| (va messo in mezzo a due pipeline per far capire che, all'interno del testo, è una variabile globale)
  3. crea regola
  4. richiamare il codice seguente per inviare una mail
Global Char GYUSRTMP(20),GYOBJTMP(20),GYBODYTMP(50)
GYUSRTMP = "info@sagedev.it"
GYOBJTMP = "PROVA INVIO MAIL"
GYBODYTMP = "MAIL MANDATA DAL MIO PROGRAMMA"
Call WORKFLOW (1,"YYY","",GUSER) From AWRK
Kill    GYUSRTMP
Kill    GYOBJTMP
Kill    GYBODYTMP

"YYY" è il codice evento

Le chiamate Kill servono per cancellare le variabili globali temporanee.

NB: nel campo dove va inserito il nome dell'allegato, per allegare due file scrivere i file separati da punto e virgola:

"nomefile1.txt;nomefile2.txt"

GFILPATH+";"+GYFILE2


Invio tramite ASYRMAIL.ASEND_MAIL[edit]

Local Integer  STA
Local Integer  TRACE     # valori possibili CST_AYES (si) o CST_ANO (no)
Local Char     FIC_TRACE(250)
Local Char     ISSUERMAIL(250)
Local Char     A_USER(250)(1..)
Local Char     CC_USER(250)(1..)
Local Char     OGGETTO(250)
Local Clbfile  BODY(0)
Local Char     ATTACHMENTS(250)(1..)  #allegati

A_USER(1)="corsi@sagedev.it"

CC_USER(1)="xxx@sagedev.it"
CC_USER(2)="yyyyy@sagedev.it"

OGGETTO="Test invio mail"
ISSUERMAIL="info@sagedev.it"
TRACE = 2

ATTACHMENTS(1) = 'S:\Sage\SAGEX3\folders\SAGEDEV\menuita'
ATTACHMENTS(2) = "[ATT]/test.txt"

Append BODY , 'Prima riga della mail'+chr$(10)
Append BODY , 'Ciao ciao'+chr$(10)
 
STA =func ASYRMAIL.ASEND_MAIL(GACTX, ISSUERMAIL, A_USER, CC_USER, OGGETTO, BODY, ATTACHMENTS, TRACE)
If STA <> [V]CST_AOK Then
  Infbox( mess(1163,196,1))
Else
  Infbox( "Mail spedita!")
Endif

Valore di ritorno:

  • [V]CST_AOK: tutto OK
  • [V]CST_AINFO: uno o più allegati non sono disponibili
  • [V]CST_AERROR: Errore durante il processo di invio

Se viene impostato con la traccia, per ogni mail inviata nella cartella TMP del dossier troverai due file di log, uno con i comandi SMTP, l'altro con il log di connessione.

Questo il link relativo per l'help Sage V7: /help/en-US/V7DEV/api-guide_send-mail.html

Altra fonte