meillo@367: /* meillo@367: ** smtp_out.h meillo@367: ** Copyright (C) Oliver Kurth, meillo@367: ** meillo@367: ** This program is free software; you can redistribute it and/or modify meillo@367: ** it under the terms of the GNU General Public License as published by meillo@367: ** the Free Software Foundation; either version 2 of the License, or meillo@367: ** (at your option) any later version. meillo@367: ** meillo@367: ** This program is distributed in the hope that it will be useful, meillo@367: ** but WITHOUT ANY WARRANTY; without even the implied warranty of meillo@367: ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the meillo@367: ** GNU General Public License for more details. meillo@367: ** meillo@367: ** You should have received a copy of the GNU General Public License meillo@367: ** along with this program; if not, write to the Free Software meillo@367: ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. meillo@367: */ meillo@0: meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: meillo@0: #define SMTP_BUF_LEN 1024 meillo@119: #define SMTP_SIZE_ADD 1024 /* add to the size of a message */ meillo@0: meillo@0: #define SMTP_INITIAL_TIMEOUT 5*60 meillo@0: #define SMTP_CMD_TIMEOUT 5*60 meillo@0: #define SMTP_DATA_TIMEOUT 5*60 meillo@0: #define SMTP_FINAL_TIMEOUT 10*60 meillo@0: meillo@10: typedef enum _smtp_error { meillo@10: smtp_ok = 0, /* mail was delivered to at least one recpient */ meillo@10: smtp_trylater, /* server responded with 4xx */ meillo@10: smtp_fail, /* server responded with 5xx */ meillo@10: smtp_timeout, /* connection timed out */ meillo@10: smtp_eof, /* got unexpected EOF */ meillo@10: smtp_syntax, /* unexpected response */ meillo@10: smtp_cancel /* we gave up (eg. size) */ meillo@0: } smtp_error; meillo@0: meillo@0: meillo@10: typedef struct _smtp_base { meillo@10: FILE *in; meillo@10: FILE *out; meillo@0: meillo@10: gint sock; meillo@10: gint dup_sock; meillo@0: meillo@10: gchar *remote_host; meillo@10: gchar *helo_name; meillo@0: meillo@10: gchar *buffer; meillo@10: gint last_code; meillo@0: meillo@10: gboolean use_size; meillo@10: gboolean use_pipelining; meillo@10: gboolean use_auth; meillo@0: meillo@10: gint max_size; meillo@0: meillo@10: gchar **auth_names; meillo@0: meillo@10: gchar *auth_name; meillo@10: gchar *auth_login; meillo@10: gchar *auth_secret; meillo@10: meillo@10: smtp_error error; meillo@0: meillo@0: } smtp_base; meillo@0: meillo@366: gchar *set_heloname(smtp_base *psb, gchar *default_name, gboolean do_correct); meillo@366: gboolean set_auth(smtp_base *psb, gchar *name, gchar *login, gchar *secret); meillo@366: void destroy_smtpbase(smtp_base *psb); meillo@366: smtp_base *smtp_out_open(gchar *host, gint port, GList *resolve_list); meillo@372: smtp_base *smtp_out_open_child(gchar *cmd); meillo@366: gboolean smtp_out_rset(smtp_base *psb); meillo@366: gboolean smtp_out_init(smtp_base *psb, gboolean instant_helo); meillo@366: gint smtp_out_msg(smtp_base *psb, message *msg, address *return_path, GList *rcpt_list, GList *hdr_list); meillo@366: gboolean smtp_out_quit(smtp_base *psb); meillo@377: void smtp_out_mark_rcpts(smtp_base *psb, GList *rcpt_list); meillo@0: meillo@366: gint smtp_deliver(gchar *host, gint port, GList *resolve_list, message *msg, address *return_path, GList *rcpt_list);