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 {
35 typedef struct _stmp_out_msg {
46 struct ares_mx_reply *AllMX;
47 struct ares_mx_reply *CurrMX;
50 const char *LookupHostname;
54 DNSQueryParts MxLookup;
55 DNSQueryParts HostLookup;
56 struct hostent *OneMX;
60 ParsedURL *pCurrRelay;
63 const char *envelope_from;
74 typedef eNextState (*SMTPReadHandler)(SmtpOutMsg *Msg);
75 typedef eNextState (*SMTPSendHandler)(SmtpOutMsg *Msg);
77 SMTPReadHandler ReadHandlers[eMaxSMTPC];
78 SMTPSendHandler SendHandlers[eMaxSMTPC];
79 const ConstStr ReadErrors[eMaxSMTPC+1];
80 const double SMTP_C_ReadTimeouts[eMaxSMTPC];
81 const double SMTP_C_SendTimeouts[eMaxSMTPC];
82 const double SMTP_C_ConnTimeout;
84 #define F_RELAY (1<<0) /* we have a Relay host configuration */
85 #define F_HAVE_FALLBACK (1<<1) /* we have a fallback host configuration */
86 #define F_FALLBACK (1<<2)
87 #define F_HAVE_MX (1<<3) /* we have a list of mx records to go through.*/
88 #define F_DIRECT (1<<4) /* no mx record found, trying direct connect. */
90 extern int SMTPClientDebugEnabled;
92 int smtp_resolve_recipients(SmtpOutMsg *SendMsg);
94 #define QID ((SmtpOutMsg*)IO->Data)->MyQItem->MessageID
95 #define N ((SmtpOutMsg*)IO->Data)->n
96 #define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (SMTPClientDebugEnabled != 0))
98 #define EVS_syslog(LEVEL, FORMAT, ...) \
99 DBGLOG(LEVEL) syslog(LEVEL, \
100 "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
101 IO->ID, CCID, QID, N, __VA_ARGS__)
103 #define EVSM_syslog(LEVEL, FORMAT) \
104 DBGLOG(LEVEL) syslog(LEVEL, \
105 "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
106 IO->ID, CCID, QID, N)
108 #define EVNCS_syslog(LEVEL, FORMAT, ...) \
109 DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
110 IO->ID, QID, N, __VA_ARGS__)
112 #define EVNCSM_syslog(LEVEL, FORMAT) \
113 DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
116 #define SMTPC_syslog(LEVEL, FORMAT, ...) \
117 DBGLOG(LEVEL) syslog(LEVEL, \
121 #define SMTPCM_syslog(LEVEL, FORMAT) \
122 DBGLOG(LEVEL) syslog(LEVEL, \
127 typedef enum __smtpstate {
142 void SetSMTPState(AsyncIO *IO, smtpstate State);