/* * Created by PyramIDE. * User: フランスのトトロ * Date: 16/05/2015 * Time: 22:50 * © Calexium */ read system/string.anubis read system/data_io.anubis read tools/basis.anubis read calexium_lib/mail/smtp_client.anubis public type Send_Status: ready, //ready to send finished, //the mail is delivered correctly timeout, //the mail was not sent in enough time, this is a permanent error general_error, error(Int code, String enhanced_status, String text), //this is SMTP permanent error 5xx, we can't deliver the mail warning(Int code, String enhanced_status, String text), //this is SMTP temporary error 4xx, we can retry with same mail later in_progress. //We are in sending process, it's like a lock public define String to_String ( Send_Status snd_st )= if snd_st is { ready then "READY", finished then "FINISHED", timeout then "TIMEOUT", general_error then "GENERAL_ERROR", error(_,_,_) then "ERROR", warning(_,_,_)then "WARNING", in_progress then "IN_PROGRESS" }. public define (String, List((SQLite3Bind))) to_SQL_query_binds ( Send_Status snd_st )= with sql_query = "send_status = :status ", sql_query_ext = ", smtp_r_code = :smtp_r_code, smtp_r_enhanced_code = :smtp_r_enhanced_code, smtp_r_code_text = :smtp_r_code_text", binds = (List(SQLite3Bind)) [ bind_String(":status", to_String(snd_st))], if snd_st is { ready then (sql_query, binds), finished then (sql_query, binds), timeout then (sql_query, binds), general_error then (sql_query, binds), error(code,enhanced,text) then (sql_query + sql_query_ext, binds + [ bind_Int(":smtp_r_code", code), bind_String(":smtp_r_enhanced_code", enhanced), bind_String(":smtp_r_code_text", text)]), warning(code,enhanced,text) then (sql_query + sql_query_ext, binds + [ bind_Int(":smtp_r_code", code), bind_String(":smtp_r_enhanced_code", enhanced), bind_String(":smtp_r_code_text", text)]), in_progress then (sql_query, binds) }. bind_Int(":smtp_r_code", code), bind_String(":smtp_r_enhanced_code", enhanced), binf_String(":smtp_r_code_text", text), ], public define Send_Status to_Send_Status ( String status, Int code, String enhanced_status, String message, )= if status = "READY" then ready else if status = "FINISHED" then finished else if status = "TIMEOUT" then timeout else if status = "GENERAL_ERROR" then general_error else if status = "ERROR" then error(code, enhanced_status, message) else if status = "WARNING" then warning(code, enhanced_status, message) else if status = "IN_PROGRESS" then in_progress else ready. public define String to_image ( Send_Status status, )= if status is { ready then "/icons/16x16/status_ready.png", finished then "/icons/16x16/status_valid.png", timeout then "/icons/16x16/status_sandglass.png", general_error then "/icons/16x16/status_error.png", error(_,_,_) then "/icons/16x16/status_error.png", warning(_,_,_) then "/icons/16x16/status_warning.png", in_progress then "/icons/16x16/status_processing_16x16.gif" }. public define Send_Status to_Send_Status ( Result(SmtpClientResult, One) result )= if result is { error(smtp_result) then if smtp_result is { error then warning(440, "", "Communication error"), timeout then warning(441, "", "Communication timeout"), no_auth_method then error(500, "", "Can't find any suitable authentication method"), bad_reply then error(500, "", "Bad reply from server"), reply(code, enhanced_st, lines) then with join_lines = join(implode([13,10]),lines), if code >= 400 & code < 500 then warning(code, enhanced_st, join_lines) else error(code, enhanced_st, join_lines) }, ok(_) then finished }.