Hi, all, SmtpUrl is a great feature, thank you all.
But it is inconvenience sometimes. I can't determine whether mail is sent or not, if I don't notice the 'Mail Sent' message. Because this message will not be shown for a long time, especially when the smtp server is a slow server, and I may press more keys when sending in process. The following is a patch to write the sending status to a log file '~/.mutt_smtp_log', including some envelope headers. Cheers. diff -paNur mutt-1.5.19/protos.h mutt-1.5.19.new/protos.h --- mutt-1.5.19/protos.h 2009-01-06 03:20:53.000000000 +0800 +++ mutt-1.5.19.new/protos.h 2009-11-10 01:36:53.000000000 +0800 @@ -356,6 +356,7 @@ int _mutt_save_message (HEADER *, CONTEX int mutt_save_message (HEADER *, int, int, int, int *); int mutt_search_command (int, int); #ifdef USE_SMTP +void mutt_smtp_log(ENVELOPE *, int); int mutt_smtp_send (const ADDRESS *, const ADDRESS *, const ADDRESS *, const ADDRESS *, const char *, int); #endif diff -paNur mutt-1.5.19/send.c mutt-1.5.19.new/send.c --- mutt-1.5.19/send.c 2009-01-06 03:20:53.000000000 +0800 +++ mutt-1.5.19.new/send.c 2009-11-10 01:33:08.000000000 +0800 @@ -1016,9 +1016,13 @@ static int send_message (HEADER *msg) #if USE_SMTP if (SmtpUrl) - return mutt_smtp_send (msg->env->from, msg->env->to, msg->env->cc, + { + i = mutt_smtp_send (msg->env->from, msg->env->to, msg->env->cc, msg->env->bcc, tempfile, (msg->content->encoding == ENC8BIT)); + mutt_smtp_log(msg->env, i); + return (i); + } #endif /* USE_SMTP */ i = mutt_invoke_sendmail (msg->env->from, msg->env->to, msg->env->cc, diff -paNur mutt-1.5.19/smtp.c mutt-1.5.19.new/smtp.c --- mutt-1.5.19/smtp.c 2009-01-06 03:20:53.000000000 +0800 +++ mutt-1.5.19.new/smtp.c 2009-11-10 01:44:56.000000000 +0800 @@ -207,6 +207,115 @@ smtp_data (CONNECTION * conn, const char return 0; } +void +mutt_smtp_log(ENVELOPE *env, int error) +{ + FILE *fp; + char buffer[LONG_STRING]; + time_t now; + struct tm *pt, t; + char *from; + char *to; + + if (!env || !(env->from) || !(env->to)) + return; + + if (EnvFrom) + from = EnvFrom->mailbox; + else + from = env->from->mailbox; + + to = env->to->mailbox; + + snprintf(buffer, sizeof(buffer), "%s/.mutt_smtp_log", NONULL(Homedir)); + if ((fp = safe_fopen(buffer, "a")) == NULL) + return; + + now = time(NULL); + pt = localtime_r(&now, &t); + if (pt == NULL) + goto out_fclose; + + fprintf(fp, "%04d-%02d-%02d, %02d:%02d:%02d, from=<%s>, to=<%s>, stat=%s\n", + pt->tm_year+1900, pt->tm_mon+1, pt->tm_mday, pt->tm_hour, pt->tm_min, pt->tm_sec, + NONULL(from), NONULL(to), (error==0)?"Sent":"Failed"); + fprintf(fp, "------------------------------------------------------------\n"); + + if (env->from) + { + buffer[0] = 0; + rfc822_write_address (buffer, sizeof (buffer), env->from, 0); + fprintf (fp, "From: %s\n", buffer); + } + + if (env->sender) + { + buffer[0] = 0; + rfc822_write_address (buffer, sizeof (buffer), env->sender, 0); + fprintf (fp, "Sender: %s\n", buffer); + } + + if (env->to) + { + fputs ("To: ", fp); + mutt_write_address_list (env->to, fp, 4, 0); + } + else + fputs ("To: \n", fp); + + if (env->cc) + { + fputs ("Cc: ", fp); + mutt_write_address_list (env->cc, fp, 4, 0); + } + else + fputs ("Cc: \n", fp); + + if (env->bcc) + { + fputs ("Bcc: ", fp); + mutt_write_address_list (env->bcc, fp, 5, 0); + } + else + fputs ("Bcc: \n", fp); + + if (env->subject) + mutt_write_one_header (fp, "Subject", env->subject, NULL, 0); + else + fputs ("Subject: \n", fp); + + /* save message id if the user has set it */ + if (env->message_id) + fprintf (fp, "Message-ID: %s\n", env->message_id); + + if (env->reply_to) + { + fputs ("Reply-To: ", fp); + mutt_write_address_list (env->reply_to, fp, 10, 0); + } + else + fputs ("Reply-To: \n", fp); + + if (env->references) + { + fputs ("References:", fp); + mutt_write_references (env->references, fp, 10); + fputc('\n', fp); + } + + if (env->in_reply_to) + { + fputs ("In-Reply-To:", fp); + mutt_write_references (env->in_reply_to, fp, 1); + fputc ('\n', fp); + } + + fprintf(fp, "------------------------------------------------------------\n\n"); + +out_fclose: + fclose(fp); +} + int mutt_smtp_send (const ADDRESS* from, const ADDRESS* to, const ADDRESS* cc, const ADDRESS* bcc, const char *msgfile, int eightbit)