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