1 #ifndef LWIP_HDR_APPS_SMTP_H 2 #define LWIP_HDR_APPS_SMTP_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #include "lwip/apps/smtp_opts.h" 9 #include "lwip/err.h" 10 #include "lwip/prot/iana.h" 11 12 /** The default TCP port used for SMTP */ 13 #define SMTP_DEFAULT_PORT LWIP_IANA_PORT_SMTP 14 /** The default TCP port used for SMTPS */ 15 #define SMTPS_DEFAULT_PORT LWIP_IANA_PORT_SMTPS 16 17 /** Email successfully sent */ 18 #define SMTP_RESULT_OK 0 19 /** Unknown error */ 20 #define SMTP_RESULT_ERR_UNKNOWN 1 21 /** Connection to server failed */ 22 #define SMTP_RESULT_ERR_CONNECT 2 23 /** Failed to resolve server hostname */ 24 #define SMTP_RESULT_ERR_HOSTNAME 3 25 /** Connection unexpectedly closed by remote server */ 26 #define SMTP_RESULT_ERR_CLOSED 4 27 /** Connection timed out (server didn't respond in time) */ 28 #define SMTP_RESULT_ERR_TIMEOUT 5 29 /** Server responded with an unknown response code */ 30 #define SMTP_RESULT_ERR_SVR_RESP 6 31 /** Out of resources locally */ 32 #define SMTP_RESULT_ERR_MEM 7 33 34 /** Prototype of an smtp callback function 35 * 36 * @param arg argument specified when initiating the email 37 * @param smtp_result result of the mail transfer (see defines SMTP_RESULT_*) 38 * @param srv_err if aborted by the server, this contains the error code received 39 * @param err an error returned by internal lwip functions, can help to specify 40 * the source of the error but must not necessarily be != ERR_OK 41 */ 42 typedef void (*smtp_result_fn)(void *arg, u8_t smtp_result, u16_t srv_err, err_t err); 43 44 /** This structure is used as argument for smtp_send_mail_int(), 45 * which in turn can be used with tcpip_callback() to send mail 46 * from interrupt context, e.g. like this: 47 * struct smtp_send_request *req; (to be filled) 48 * tcpip_try_callback(smtp_send_mail_int, (void*)req); 49 * 50 * For member description, see parameter description of smtp_send_mail(). 51 * When using with tcpip_callback, this structure has to stay allocated 52 * (e.g. using mem_malloc/mem_free) until its 'callback_fn' is called. 53 */ 54 struct smtp_send_request { 55 const char *from; 56 const char* to; 57 const char* subject; 58 const char* body; 59 smtp_result_fn callback_fn; 60 void* callback_arg; 61 /** If this is != 0, data is *not* copied into an extra buffer 62 * but used from the pointers supplied in this struct. 63 * This means less memory usage, but data must stay untouched until 64 * the callback function is called. */ 65 u8_t static_data; 66 }; 67 68 69 #if SMTP_BODYDH 70 71 #ifndef SMTP_BODYDH_BUFFER_SIZE 72 #define SMTP_BODYDH_BUFFER_SIZE 256 73 #endif /* SMTP_BODYDH_BUFFER_SIZE */ 74 75 struct smtp_bodydh { 76 u16_t state; 77 u16_t length; /* Length of content in buffer */ 78 char buffer[SMTP_BODYDH_BUFFER_SIZE]; /* buffer for generated content */ 79 #ifdef SMTP_BODYDH_USER_SIZE 80 u8_t user[SMTP_BODYDH_USER_SIZE]; 81 #endif /* SMTP_BODYDH_USER_SIZE */ 82 }; 83 84 enum bdh_retvals_e { 85 BDH_DONE = 0, 86 BDH_WORKING 87 }; 88 89 /** Prototype of an smtp body callback function 90 * It receives a struct smtp_bodydh, and a buffer to write data, 91 * must return BDH_WORKING to be called again and BDH_DONE when 92 * it has finished processing. This one tries to fill one TCP buffer with 93 * data, your function will be repeatedly called until that happens; so if you 94 * know you'll be taking too long to serve your request, pause once in a while 95 * by writing length=0 to avoid hogging system resources 96 * 97 * @param arg argument specified when initiating the email 98 * @param smtp_bodydh state handling + buffer structure 99 */ 100 typedef int (*smtp_bodycback_fn)(void *arg, struct smtp_bodydh *bodydh); 101 102 err_t smtp_send_mail_bodycback(const char *from, const char* to, const char* subject, 103 smtp_bodycback_fn bodycback_fn, smtp_result_fn callback_fn, void* callback_arg); 104 105 #endif /* SMTP_BODYDH */ 106 107 108 err_t smtp_set_server_addr(const char* server); 109 void smtp_set_server_port(u16_t port); 110 #if LWIP_ALTCP && LWIP_ALTCP_TLS 111 struct altcp_tls_config; 112 void smtp_set_tls_config(struct altcp_tls_config *tls_config); 113 #endif 114 err_t smtp_set_auth(const char* username, const char* pass); 115 err_t smtp_send_mail(const char *from, const char* to, const char* subject, const char* body, 116 smtp_result_fn callback_fn, void* callback_arg); 117 err_t smtp_send_mail_static(const char *from, const char* to, const char* subject, const char* body, 118 smtp_result_fn callback_fn, void* callback_arg); 119 void smtp_send_mail_int(void *arg); 120 #ifdef LWIP_DEBUG 121 const char* smtp_result_str(u8_t smtp_result); 122 #endif 123 124 #ifdef __cplusplus 125 } 126 #endif 127 128 #endif /* LWIP_HDR_APPS_SMTP_H */ 129