Táto služba realizuje posielanie emailov cez SMTP protokol. Služba sa štartuje z adresára D2000_EXE/bin64/smtp.exe (alebo v prípade Linuxu: D2000_EXE/bin64/opt/d2000/bin/smtp).
Parametre príkazového riadku
...
| Blok kódu | ||||
|---|---|---|---|---|
| ||||
IMPLEMENTATION I.SMTP_Client_v1
INT _hCnt, _hTC, _nextMailId
BOOL _hasTC
; Po nadviazaní spojenia so SMTP serverom sa pokúsi odoslať všetky doteraz neodoslané maily
IMPLEMENTATION RPC PROCEDURE [_hTC, TC_C] I.SMTP_Client_v1^OnConnectionOpened
RECORD NOALIAS (SD.MailData) _mail
INT _count, _i
_hasTC := @TRUE
CNT_CNVTOARRAY _hCnt
CNT_GETNR _hCnt, _count
FOR _i = 1 TO _count DO_LOOP
CNT_GETITEM _hCnt, _i, _mail
CALL Internal_SendMail(_mail)
END_LOOP
END OnConnectionOpened
IMPLEMENTATION RPC PROCEDURE [_hTC, TC_E] I.SMTP_Client_v1^OnConnectionClosed(IN BOOL _closedWithError, IN TEXT _errorMessage, IN TEXT _errorDetail)
IF _closedWithError THEN
LOGEX _errorMessage
ENDIF
CALL [_hTC] I.SMTP_Service_v1^CloseConnection
_hasTC := @FALSE
END OnConnectionClosed
; Pri úspešnom odoslaní mailu ho vymaže z kontajneru
IMPLEMENTATION RPC PROCEDURE [_hTC, TC_C] I.SMTP_Client_v1^OnMailSent(IN INT _mailId)
CNT_DELETE _hCnt, _mailId
END OnMailSent
; Pri neúspešnom odoslaní mailu zaloguje chybu
IMPLEMENTATION RPC PROCEDURE [_hTC, TC_C] I.SMTP_Client_v1^OnMailSendingFailed(IN INT _mailId, IN TEXT _errorMessage, IN TEXT _errorDetail)
LOGEX _errorMessage
END OnMailSendingFailed
RPC PROCEDURE [_hTC, ERROR] OnConversationAborted
_hasTC := @FALSE
END OnConversationAborted
; Nadviazanie spojenia so SMTP serverom, ak už neexistuje
PROCEDURE Internal_InitConnection
IF !_hasTC THEN
CALL [(0)] I.SMTP_Service_v1^OpenConnection("mail.example.com", 25, "", @FALSE, "user", "secret", @FALSE, "") ASYNC ON SELF.EMS TC_B _hTC
ENDIF
END Internal_InitConnection
PROCEDURE Internal_SendMail(IN RECORD NOALIAS (SD.MailData) _mail)
TEXT _from
_from := "no-reply@ipesoft.com"
CALL [_hTC] I.SMTP_Service_v1^SendMail(_mail[1]^id, _from, _mail[1]^to, "", "", _mail[1]^subject, _mail[1]^message) ASYNC TC_C
END Internal_SendMail
; RPC volaná "z vonku"
RPC PROCEDURE SendMail(IN TEXT _to, IN TEXT _subject, IN TEXT _message)
RECORD NOALIAS (SD.MailData) _mail
_mail[1]^id := _nextMailId
_mail[1]^to := _to
_mail[1]^subject := _subject
_mail[1]^message := _message
CNT_INSERT _hCnt, _mail[1]^id, _mail
_nextMailId := _nextMailId + 1
CALL Internal_InitConnection
IF _hasTC THEN
CALL Internal_SendMail(_mail)
ENDIF
END SendMail
; Inicializačná časť - vytvorenie kontajnera a konverzácie
BEGIN
CNT_CREATE _hCnt
_hasTC := @FALSE
_nextMailId := 1
CALL Internal_InitConnection
END |