EMailSend, sends an eMail

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Gestione networking / EMailSend, sends an eMail

Questo blocco funzione esegue l'invio di una eMail, non viene gestita la crittografia, quindi non può connettersi a servers SMTP che richiedono crittografia SSL o TLS, per aggirare il problema occorre affidarsi ad un mail relay.

Per inviare tramite l'FB eMail a qualsiasi server SMTP, compreso GMail consiglio di utilizzare un servizio di mail relay installato su di un PC all'interno della propria rete. In questo modo il FB invierà la mail non crittografata al mail relay che ne eseguirà il reinvio crittografandola al server esterno SMP configurato. Esistono molti programmi di mail relay free come ad esempio questo, leggere questa nota per la configurazione.

In SMTPServer ed SMTPPort specificare l'URL o l'indirizzo IP e la porta del server SMTP da utilizzare per l'invio, in Domain, Username e Password definirne le credenziali di accesso.

Attivando il comando Send viene eseguito l'invio di una email all'indirizzo definito in Recipient, con l'oggetto definito in Subject e con il testo definito in Data, il testo della mail può contenere solo stringhe ascii.

Terminata l'esecuzione si attiva l'uscita Done che rimane attiva sino alla disabilitazione di Send, in questo modo è possibile gestire i FB in cascata. L'uscita Sent si attiva per un loop se l'invio della eMail è andato a buon fine. In caso di errore si attiva per un loop l'uscita Fault.

Function block
CODESYS: Non disponibile
LogicLab: eLLabNetworkLib

Send (BOOL) Comando invio eMail.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).

Timeout (REAL) Tempo limite di esecuzione FB (S).

SMTPServer (@STRING) Puntatore stringa definizione server SMTP.

SMTPPort (UINT) Porta a cui connettersi sul server SMTP.

Domain (@STRING) Puntatore stringa definizione dominio invio eMail.

Username (@STRING) Puntatore stringa definizione nome utente accesso server SMTP.

Password (@STRING) Puntatore stringa definizione password accesso server SMTP.

Sender (@STRING) Puntatore stringa definizione indirizzo email mittente.

Recipient (@STRING) Puntatore stringa definizione indirizzo email destinatario.

Subject (@STRING) Puntatore stringa definizione oggetto eMail.

Body (@STRING) Puntatore stringa contenuto eMail.

Done (BOOL) Si attiva al termine della esecuzione comando. Disabilitare Send per disattivarla.

Sent (BOOL) Attivo per un loop se l'invio della eMail è riuscito.

Fault (BOOL) Attivo per un loop se errore esecuzione comando.

Trigger di spy

Se SpyOn attivo è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.

ST_EMailSend: Attivando Send da debug viene inviata una eMail all'indirizzo indicato in Recipient. Per l'invio viene utilizzato un Relay che è in esecuzione su di un PC windows nella stessa rete del sistema SlimLine.

ST_SendFileByEMail: Attivando Send da debug viene inviato per eMail il contenuto del file di log di sistema C:/System/Logs.txt all'indirizzo indicato in Recipient. Il contenuto del file è appoggiato in un buffer  di memoria rilocabile (RMalloc) allocata allo scopo, dimensionarla per contenere il file da inviare facendo attenzione a non superare la dimensione massima disponibile. Per l'invio viene utilizzato un Relay che è in esecuzione su di un PC windows nella stessa rete del sistema SlimLine.

LogicLab (Ptp119)
PROGRAM ST_EMailSend
VAR
    Send : BOOL; (* Send mail command *)
    i : INT; (* Auxiliary counter *)
    SendNr : UINT; (* Send number *)
    SendErrors : UINT; (* Send errors *)
    Subject : STRING[ 32 ]; (* eMail subject *)
    Body : STRING[ 64 ]; (* eMail body *)
    Mailer : EMailSend; (* EMailSend FB *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_EMailSend"
// *****************************************************************************
// Setting by debug the "Send" variable a email is sent.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Initialize the mailer.

    IF (SysFirstLoop) THEN
        Mailer.SpyOn:=TRUE; //Spy On
        Mailer.Timeout:=5.0; //Timeout (S)

        Mailer.SMTPServer:=ADR('192.168.1.22'); //SMTP server
        Mailer.SMTPPort:=25; //SMTP port
        Mailer.Domain:=ADR('gmail.com'); //Domain address
        Mailer.Username:=ADR('username'); //Access user name
        Mailer.Password:=ADR('password'); //Access password

        Mailer.Sender:=ADR('[email protected]'); //Sender address
        Mailer.Recipient:=ADR('[email protected]'); //Recipient address
        Mailer.Subject:=ADR(Subject); //eMail subject
        Mailer.Body:=ADR(Body); //eMail data
    END_IF;

    // Manage the mailer.

    Mailer(); //EMailSend FB
    Mailer.Send:=FALSE; //Send EMail
    IF (Mailer.Fault) THEN SendErrors:=SendErrors+1; END_IF;

    // -------------------------------------------------------------------------
    // EMAIL SENDING
    // -------------------------------------------------------------------------
    // If the send command is set the email is sent.

    IF NOT(Send) THEN RETURN; END_IF;
    Send:=FALSE; //Send mail command
    SendNr:=SendNr+1; //Send number

    // eMail subject.

    i:=TO_UINT(SysVsnprintf(ADR(Subject), SIZEOF(Subject), ADR('eMail test send Nr:%d'), UINT_TYPE, ADR(SendNr)));

    // eMail body.

    i:=TO_UINT(SysVsnprintf(ADR(Body), SIZEOF(Body), ADR('This is eMail Nr:%d$r$n'), UINT_TYPE, ADR(SendNr)));
    i:=TO_UINT(SysCVsnprintf(ADR(Body), SIZEOF(Body), ADR('Till now we have experienced %d error(s)'), UINT_TYPE, ADR(SendErrors)));
    Mailer.Send:=TRUE; //Send eMail

// [End of file]
LogicLab (Ptp119)

Ti è stato utile questo articolo ?