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
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.
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]
Ultimo aggiornamento: 5 Ottobre 2020