* src/send_message.c
[claws.git] / src / send_message.c
index c091b9de7256f6001289762571a4612ef7199373..d4883cb42654952c9bfb0ebe07379dadea70233c 100644 (file)
@@ -305,6 +305,8 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
                ac_prefs->set_domain ? g_strdup(ac_prefs->domain) : NULL;
 
        if (ac_prefs->use_smtp_auth) {
+               smtp_session->forced_auth_type = ac_prefs->smtp_auth_type;
+
                if (ac_prefs->smtp_userid) {
                        smtp_session->user = g_strdup(ac_prefs->smtp_userid);
                        if (ac_prefs->smtp_passwd)
@@ -402,8 +404,15 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
               session->state != SESSION_ERROR)
                gtk_main_iteration();
 
-       if (session->state == SESSION_ERROR ||
-           SMTP_SESSION(session)->state == SMTP_ERROR)
+       if (SMTP_SESSION(session)->error_val == SM_AUTHFAIL) {
+               if (ac_prefs->smtp_userid && ac_prefs->tmp_smtp_pass) {
+                       g_free(ac_prefs->tmp_smtp_pass);
+                       ac_prefs->tmp_smtp_pass = NULL;
+               }
+               ret = -1;
+       } else if (session->state == SESSION_ERROR ||
+                  SMTP_SESSION(session)->state == SMTP_ERROR ||
+                  SMTP_SESSION(session)->error_val != SM_OK)
                ret = -1;
        else if (dialog->cancelled == TRUE)
                ret = -1;
@@ -417,10 +426,14 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
 
 static gint send_recv_message(Session *session, const gchar *msg, gpointer data)
 {
-       SMTPSession *smtp_session = SMTP_SESSION(session);
-       SendProgressDialog *dialog = (SendProgressDialog *)data;
+       SMTPSession *smtp_session;
+       SendProgressDialog *dialog
        gchar buf[BUFFSIZE];
-       gchar *state_str = NULL;
+       gchar *state_str;
+
+       dialog = (SendProgressDialog *) data;
+       state_str = NULL;
+       smtp_session = SMTP_SESSION(session);
 
        switch (smtp_session->state) {
        case SMTP_READY:
@@ -456,6 +469,7 @@ static gint send_recv_message(Session *session, const gchar *msg, gpointer data)
                state_str = _("Quitting");
                break;
        case SMTP_ERROR:
+       case SMTP_AUTH_FAILED:
                g_warning("send: error: %s\n", msg);
                return 0;
        default:
@@ -479,7 +493,6 @@ static gint send_send_data_progressive(Session *session, guint cur_len,
        progress_dialog_set_label(dialog->dialog, buf);
        progress_dialog_set_percentage
                (dialog->dialog, (gfloat)cur_len / (gfloat)total_len);
-
        return 0;
 }
 
@@ -487,12 +500,12 @@ static gint send_send_data_finished(Session *session, guint len, gpointer data)
 {
        SendProgressDialog *dialog = (SendProgressDialog *)data;
        gchar buf[BUFFSIZE];
-
+       
        g_snprintf(buf, sizeof(buf), _("Sending message (%d / %d bytes)"),
                   len, len);
        progress_dialog_set_label(dialog->dialog, buf);
-       progress_dialog_set_percentage(dialog->dialog, 1.0);
-
+       progress_dialog_set_percentage
+               (dialog->dialog, (gfloat)len / (gfloat)len);
        return 0;
 }