gchar buf[BUFFSIZE];
gint ret = 0;
gboolean was_inited = FALSE;
+ MsgInfo *tmp_msginfo = NULL;
+ MsgFlags flags = {0, 0};
+ long fp_pos = 0;
+ gchar spec_from[BUFFSIZE];
g_return_val_if_fail(ac_prefs != NULL, -1);
g_return_val_if_fail(ac_prefs->address != NULL, -1);
g_return_val_if_fail(to_list != NULL, -1);
g_return_val_if_fail(fp != NULL, -1);
+ /* get the From address used, not necessarily the ac_prefs',
+ * because it's editable. */
+
+ fp_pos = ftell(fp);
+ tmp_msginfo = procheader_parse_stream(fp, flags, FALSE, FALSE);
+ fseek(fp, fp_pos, SEEK_SET);
+
+ if (tmp_msginfo && tmp_msginfo->from) {
+ strncpy2(spec_from, tmp_msginfo->from, BUFFSIZE-1);
+ extract_address(spec_from);
+ } else {
+ strncpy2(spec_from, ac_prefs->address, BUFFSIZE-1);
+ }
+ if (tmp_msginfo) {
+ procmsg_msginfo_free(tmp_msginfo);
+ }
+
if (!ac_prefs->session) {
/* we can't reuse a previously initialised session */
session = smtp_session_new();
(session, send_send_data_progressive, dialog);
session_set_send_data_notify(session, send_send_data_finished, dialog);
- ac_prefs->session = SMTP_SESSION(session);
} else {
/* everything is ready to start at MAIL FROM:, just
* reinit useful variables.
*/
session = SESSION(ac_prefs->session);
+ ac_prefs->session = NULL;
smtp_session = SMTP_SESSION(session);
smtp_session->state = SMTP_HELO;
dialog = (SendProgressDialog *)smtp_session->dialog;
}
/* This has to be initialised for every mail sent */
- smtp_session->from = g_strdup(ac_prefs->address);
+ smtp_session->from = g_strdup(spec_from);
smtp_session->to_list = to_list;
smtp_session->cur_to = to_list;
- smtp_session->send_data = get_outgoing_rfc2822_str(fp);
- smtp_session->send_data_len = strlen(smtp_session->send_data);
+ smtp_session->send_data = (guchar *)get_outgoing_rfc2822_str(fp);
+ smtp_session->send_data_len = strlen((gchar *)smtp_session->send_data);
+ session_set_timeout(session,
+ prefs_common.io_timeout_secs * 1000);
/* connect if necessary */
if (!was_inited && session_connect(session, ac_prefs->smtp_server, port) < 0) {
session_destroy(session);
g_free(smtp_session->send_data);
g_free(smtp_session->error_msg);
}
+ if (keep_session && ret == 0 && ac_prefs->session == NULL)
+ ac_prefs->session = SMTP_SESSION(session);
+
statusbar_pop_all();
statusbar_verbosity_set(FALSE);
if (log_msg)
log_warning("%s\n", log_msg);
if (err_msg) {
- alertpanel_error_log("%s", err_msg);
+ log_error("%s", err_msg);
g_free(err_msg);
}
}