# HG changeset patch # User Aron Griffis <[email protected]> # Date 1240931851 14400 # Branch HEAD # Node ID a1d30c5275203ead2b0addf53c2e47d892f6207f # Parent 4119b23942284de13976e824c7231af8cb149e0e Add support for sendbox (primary send path)
This patch adds support for Courier IMAP's Outbox feature. It adds the setting "sendbox" which specifies a mailbox to which sent messages should be saved, overriding the sendmail and smtp_url settings. This patch only affects the primary send path, bounce is handled in a follow-on patch. Signed-off-by: Aron Griffis <[email protected]> diff -r 4119b2394228 -r a1d30c527520 configure.ac --- a/configure.ac Tue Apr 28 11:17:31 2009 -0400 +++ b/configure.ac Tue Apr 28 11:17:31 2009 -0400 @@ -648,6 +648,11 @@ dnl -- end imap dependencies -- +AC_ARG_ENABLE(sendbox, AC_HELP_STRING([--enable-sendbox], [Enable support for Courier-style Outbox]), + [if test $enableval = yes; then + AC_DEFINE(USE_SENDBOX, 1, [Define if you want support for Courier-style Outbox]) + fi]) + AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl@<:@=PFX@:>@], [Compile in SSL support for POP/IMAP/SMTP using OpenSSL]), [ if test "$with_ssl" != "no" then diff -r 4119b2394228 -r a1d30c527520 globals.h --- a/globals.h Tue Apr 28 11:17:31 2009 -0400 +++ b/globals.h Tue Apr 28 11:17:31 2009 -0400 @@ -113,6 +113,9 @@ WHERE char *QueryCmd; WHERE char *QueryFormat; WHERE char *Realname; +#ifdef USE_SENDBOX +WHERE char *Sendbox; +#endif WHERE char *SendCharset; WHERE char *Sendmail; WHERE char *Shell; diff -r 4119b2394228 -r a1d30c527520 init.h --- a/init.h Tue Apr 28 11:17:31 2009 -0400 +++ b/init.h Tue Apr 28 11:17:31 2009 -0400 @@ -2427,6 +2427,18 @@ ** In case the text cannot be converted into one of these exactly, ** mutt uses $$charset as a fallback. */ +#ifdef USE_SENDBOX + { "sendbox", DT_PATH, R_NONE, UL &Sendbox, 0 }, + /* + ** .pp + ** Specifies a special mailbox that will + ** \fBsend\fP mail when written. When \fIset\fP, this variable overrides + ** \fIsmtp_url\fP and \fIsendmail\fP. + ** To make use of this, you probably want a Courier IMAP server configured for + ** sending, see + ** http://www.inter7.com/courierimap/INSTALL.html#imapsend + */ +#endif { "sendmail", DT_PATH, R_NONE, UL &Sendmail, UL SENDMAIL " -oem -oi" }, /* ** .pp diff -r 4119b2394228 -r a1d30c527520 protos.h --- a/protos.h Tue Apr 28 11:17:31 2009 -0400 +++ b/protos.h Tue Apr 28 11:17:31 2009 -0400 @@ -355,6 +355,9 @@ int _mutt_save_message (HEADER *, CONTEXT *, int, int, int); int mutt_save_message (HEADER *, int, int, int, int *); int mutt_search_command (int, int); +#ifdef USE_SENDBOX +int mutt_sendbox_send (HEADER *); +#endif #ifdef USE_SMTP int mutt_smtp_send (const ADDRESS *, const ADDRESS *, const ADDRESS *, const ADDRESS *, const char *, int); diff -r 4119b2394228 -r a1d30c527520 send.c --- a/send.c Tue Apr 28 11:17:31 2009 -0400 +++ b/send.c Tue Apr 28 11:17:31 2009 -0400 @@ -972,6 +972,15 @@ short old_write_bcc; #endif +#ifdef USE_SENDBOX + /* Some imap servers can send mail by saving to a special folder. + * In this case, there's no need for the intermediate tempfile because + * we'll write directly to the folder. + */ + if (Sendbox) + return mutt_sendbox_send (msg); +#endif + /* Write out the message in MIME form. */ mutt_mktemp (tempfile); if ((tempfp = safe_fopen (tempfile, "w")) == NULL) diff -r 4119b2394228 -r a1d30c527520 sendlib.c --- a/sendlib.c Tue Apr 28 11:17:31 2009 -0400 +++ b/sendlib.c Tue Apr 28 11:17:31 2009 -0400 @@ -2743,3 +2743,30 @@ set_noconv_flags (hdr->content, 0); return ret; } + +#ifdef USE_SENDBOX +int mutt_sendbox_send (HEADER *hdr) +{ + struct mutt_message_handle *mh; + CONTEXT ctx; + MESSAGE *msg; + short old_write_bcc; + + hdr->read = 0; /* make sure to put it in the `new' directory (maildir) */ + + mh = mutt_start_message (Sendbox, hdr, &ctx, &msg, 0); + if (!mh) + return -1; + + /* need to write the bcc in the headers */ + old_write_bcc = option (OPTWRITEBCC); + set_option (OPTWRITEBCC); + + mutt_write_rfc822_header (msg->fp, hdr->env, hdr->content, 0, 0); + + if (!old_write_bcc) + unset_option (OPTWRITEBCC); + + return mutt_finish_message (mh, Sendbox, hdr, &ctx, &msg, 1); +} +#endif
