3 * Copyright (c) 1998-2012 by the citadel.org team
5 * This program is open source software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 typedef enum _eSMTP_C_States {
37 typedef struct _stmp_out_msg {
48 struct ares_mx_reply *AllMX;
49 struct ares_mx_reply *CurrMX;
52 const char *LookupHostname;
56 DNSQueryParts MxLookup;
57 DNSQueryParts HostLookup;
58 struct hostent *OneMX;
62 ParsedURL *pCurrRelay;
65 const char *envelope_from;
76 typedef eNextState (*SMTPReadHandler)(SmtpOutMsg *Msg);
77 typedef eNextState (*SMTPSendHandler)(SmtpOutMsg *Msg);
79 SMTPReadHandler ReadHandlers[eMaxSMTPC];
80 SMTPSendHandler SendHandlers[eMaxSMTPC];
81 const ConstStr ReadErrors[eMaxSMTPC+1];
82 const double SMTP_C_ReadTimeouts[eMaxSMTPC];
83 const double SMTP_C_SendTimeouts[eMaxSMTPC];
84 const double SMTP_C_ConnTimeout;
86 #define F_RELAY (1<<0) /* we have a Relay host configuration */
87 #define F_HAVE_FALLBACK (1<<1) /* we have a fallback host configuration */
88 #define F_FALLBACK (1<<2)
89 #define F_HAVE_MX (1<<3) /* we have a list of mx records to go through.*/
90 #define F_DIRECT (1<<4) /* no mx record found, trying direct connect. */
92 extern int SMTPClientDebugEnabled;
94 int smtp_resolve_recipients(SmtpOutMsg *SendMsg);
96 #define QID ((SmtpOutMsg*)IO->Data)->MyQItem->MessageID
97 #define N ((SmtpOutMsg*)IO->Data)->n
98 #define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (SMTPClientDebugEnabled != 0))
100 #define EVS_syslog(LEVEL, FORMAT, ...) \
101 DBGLOG(LEVEL) syslog(LEVEL, \
102 "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
103 IO->ID, CCID, QID, N, __VA_ARGS__)
105 #define EVSM_syslog(LEVEL, FORMAT) \
106 DBGLOG(LEVEL) syslog(LEVEL, \
107 "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
108 IO->ID, CCID, QID, N)
110 #define EVNCS_syslog(LEVEL, FORMAT, ...) \
111 DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
112 IO->ID, QID, N, __VA_ARGS__)
114 #define EVNCSM_syslog(LEVEL, FORMAT) \
115 DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
118 #define SMTPC_syslog(LEVEL, FORMAT, ...) \
119 DBGLOG(LEVEL) syslog(LEVEL, \
123 #define SMTPCM_syslog(LEVEL, FORMAT) \
124 DBGLOG(LEVEL) syslog(LEVEL, \
129 typedef enum __smtpstate {
144 void SetSMTPState(AsyncIO *IO, smtpstate State);