view src/smtp_out.h @ 434:f2a7271746d1 default tip

Removes Freshmeat.net from the docs The site, which was later renamed to freecode.com, is no longer maintained (contains only a static copy).
author markus schnalke <meillo@marmaro.de>
date Sat, 07 Feb 2015 11:45:07 +0100
parents 9bc3e47b0222
children
line wrap: on
line source

/*
**  smtp_out.h
**  Copyright (C) Oliver Kurth,
**
**  This program is free software; you can redistribute it and/or modify
**  it under the terms of the GNU General Public License as published by
**  the Free Software Foundation; either version 2 of the License, or
**  (at your option) any later version.
**
**  This program is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**  GNU General Public License for more details.
**
**  You should have received a copy of the GNU General Public License
**  along with this program; if not, write to the Free Software
**  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>

#define SMTP_BUF_LEN 1024
#define SMTP_SIZE_ADD 1024  /* add to the size of a message */

#define SMTP_INITIAL_TIMEOUT 5*60
#define SMTP_CMD_TIMEOUT 5*60
#define SMTP_DATA_TIMEOUT 5*60
#define SMTP_FINAL_TIMEOUT 10*60

typedef enum _smtp_error {
	smtp_ok = 0,  /* mail was delivered to at least one recpient */
	smtp_trylater,  /* server responded with 4xx */
	smtp_fail,  /* server responded with 5xx */
	smtp_timeout,  /* connection timed out */
	smtp_eof,  /* got unexpected EOF */
	smtp_syntax,  /* unexpected response */
	smtp_cancel  /* we gave up (eg. size) */
} smtp_error;


typedef struct _smtp_base {
	FILE *in;
	FILE *out;

	gint sock;
	gint dup_sock;

	gchar *remote_host;
	gchar *helo_name;

	gchar *buffer;
	gint last_code;

	gboolean use_size;
	gboolean use_pipelining;
	gboolean use_auth;

	gint max_size;

	gchar **auth_names;

	gchar *auth_name;
	gchar *auth_login;
	gchar *auth_secret;

	smtp_error error;

} smtp_base;

gchar *set_heloname(smtp_base *psb, gchar *default_name, gboolean do_correct);
gboolean set_auth(smtp_base *psb, gchar *name, gchar *login, gchar *secret);
void destroy_smtpbase(smtp_base *psb);
smtp_base *smtp_out_open(gchar *host, gint port, GList *resolve_list);
smtp_base *smtp_out_open_child(gchar *cmd);
gboolean smtp_out_rset(smtp_base *psb);
gboolean smtp_out_init(smtp_base *psb, gboolean instant_helo);
gint smtp_out_msg(smtp_base *psb, message *msg, address *return_path, GList *rcpt_list, GList *hdr_list);
gboolean smtp_out_quit(smtp_base *psb);
void smtp_out_mark_rcpts(smtp_base *psb, GList *rcpt_list);

gint smtp_deliver(gchar *host, gint port, GList *resolve_list, message *msg, address *return_path, GList *rcpt_list);