gchar *errstr = NULL;
gchar *tmsgid = NULL;
MainWindow *mainwin = mainwindow_get_mainwindow();
+ gboolean queued_removed = FALSE;
if (prefs_common.send_dialog_mode != SEND_DIALOG_ALWAYS
|| compose->batch == TRUE)
}
if (msgpath == NULL) {
msgpath = folder_item_fetch_msg(folder, msgnum);
- val = procmsg_send_message_queue(msgpath, &errstr, folder, msgnum);
+ val = procmsg_send_message_queue(msgpath, &errstr, folder, msgnum, &queued_removed);
g_free(msgpath);
} else {
- val = procmsg_send_message_queue(msgpath, &errstr, folder, msgnum);
+ val = procmsg_send_message_queue(msgpath, &errstr, folder, msgnum, &queued_removed);
g_unlink(msgpath);
g_free(msgpath);
}
compose->sending = FALSE;
compose_allow_user_actions (compose, TRUE);
if (val != 0) {
- folder_item_remove_msg(folder, msgnum);
+ if (!queued_removed)
+ folder_item_remove_msg(folder, msgnum);
folder_item_scan(folder);
if (tmsgid) {
/* make sure we delete that */
}
if (val == 0) {
- folder_item_remove_msg(folder, msgnum);
+ if (!queued_removed)
+ folder_item_remove_msg(folder, msgnum);
folder_item_scan(folder);
if (tmsgid) {
/* make sure we delete that */
gchar *addr;
gchar *addrp;
gchar *foo = NULL;
+ gboolean queued_removed = FALSE;
+
if (!msginfo->extradata)
return -1;
if (!msginfo->extradata->returnreceiptto &&
/* send it */
path = folder_item_fetch_msg(queue, num);
- ok = procmsg_send_message_queue(path, &foo, queue, num);
+ ok = procmsg_send_message_queue(path, &foo, queue, num, &queued_removed);
g_free(path);
g_free(foo);
- folder_item_remove_msg(queue, num);
+ if (ok == 0 && !queued_removed)
+ folder_item_remove_msg(queue, num);
return ok;
}
#include "inc.h"
static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr,
- FolderItem *queue, gint msgnum);
+ FolderItem *queue, gint msgnum, gboolean *queued_removed);
enum
{
if (!MSG_IS_LOCKED(msginfo->flags)) {
file = folder_item_fetch_msg(queue, msginfo->msgnum);
if (file) {
+ gboolean queued_removed = FALSE;
if (procmsg_send_message_queue_full(file,
!procmsg_is_last_for_account(queue, msginfo, elem),
- errstr, queue, msginfo->msgnum) < 0) {
+ errstr, queue, msginfo->msgnum, &queued_removed) < 0) {
g_warning("Sending queued message %d failed.\n",
msginfo->msgnum);
err++;
} else {
sent++;
- folder_item_remove_msg(queue, msginfo->msgnum);
+ if (!queued_removed)
+ folder_item_remove_msg(queue, msginfo->msgnum);
}
g_free(file);
}
}
static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr,
- FolderItem *queue, gint msgnum)
+ FolderItem *queue, gint msgnum, gboolean *queued_removed)
{
static HeaderEntry qentry[] = {{"S:", NULL, FALSE},
{"SSV:", NULL, FALSE},
if (save_clear_text || tmp_enc_file == NULL) {
gboolean saved = FALSE;
+ *queued_removed = FALSE;
if (queue && msgnum > 0) {
MsgInfo *queued_mail = folder_item_get_msginfo(queue, msgnum);
- if (folder_item_copy_msg(outbox, queued_mail) >= 0)
+ if (folder_item_move_msg(outbox, queued_mail) >= 0) {
+ debug_print("moved queued mail %d to sent folder\n", msgnum);
saved = TRUE;
+ *queued_removed = TRUE;
+ } else if (folder_item_copy_msg(outbox, queued_mail) >= 0) {
+ debug_print("copied queued mail %d to sent folder\n", msgnum);
+ saved = TRUE;
+ }
procmsg_msginfo_free(queued_mail);
}
- if (!saved)
+ if (!saved) {
+ debug_print("resaving clear text queued mail to sent folder\n");
procmsg_save_to_outbox(outbox, file, TRUE);
+ }
} else {
+ debug_print("saving encrpyted queued mail to sent folder\n");
procmsg_save_to_outbox(outbox, tmp_enc_file, FALSE);
}
}
return (newsval != 0 ? newsval : mailval);
}
-gint procmsg_send_message_queue(const gchar *file, gchar **errstr, FolderItem *queue, gint msgnum)
+gint procmsg_send_message_queue(const gchar *file, gchar **errstr, FolderItem *queue, gint msgnum, gboolean *queued_removed)
{
- gint result = procmsg_send_message_queue_full(file, FALSE, errstr, queue, msgnum);
+ gint result = procmsg_send_message_queue_full(file, FALSE, errstr, queue, msgnum, queued_removed);
toolbar_main_set_sensitive(mainwindow_get_mainwindow());
return result;
}