SMTP over SSL (untested, feedback requested)
[claws.git] / src / prefs_account.c
index 8a3c6f390b4b02d979a7acdfe71e94d8743a6e19..e79d9a823d9b49c455df0c23ba07124bb9f8298e 100644 (file)
@@ -89,6 +89,9 @@ static struct Receive {
        GtkWidget *getall_chkbtn;
        GtkWidget *recvatgetall_chkbtn;
        GtkWidget *filter_on_recv_chkbtn;
+
+       GtkWidget *imap_frame;
+       GtkWidget *imapdir_entry;
 } receive;
 
 static struct Send {
@@ -124,10 +127,22 @@ static struct Privacy {
 static struct Advanced {
        GtkWidget *smtpport_chkbtn;
        GtkWidget *smtpport_entry;
+       GtkWidget *popport_hbox;
        GtkWidget *popport_chkbtn;
        GtkWidget *popport_entry;
+       GtkWidget *imapport_hbox;
+       GtkWidget *imapport_chkbtn;
+       GtkWidget *imapport_entry;
+       GtkWidget *nntpport_hbox;
+       GtkWidget *nntpport_chkbtn;
+       GtkWidget *nntpport_entry;
        GtkWidget *domain_chkbtn;
        GtkWidget *domain_entry;
+#if USE_SSL
+       GtkWidget *smtpssl_chkbtn;
+       GtkWidget *popssl_chkbtn;
+       GtkWidget *imapssl_chkbtn;
+#endif
 } advanced;
 
 static void prefs_account_fix_size                     (void);
@@ -216,6 +231,9 @@ static PrefParam param[] = {
         &receive.filter_on_recv_chkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
 
+       {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING,
+        &receive.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
+
        /* Send */
        {"add_date", "TRUE", &tmp_ac_prefs.add_date, P_BOOL,
         &send.date_chkbtn,
@@ -294,6 +312,22 @@ static PrefParam param[] = {
         &advanced.popport_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
+       {"set_imapport", "FALSE", &tmp_ac_prefs.set_imapport, P_BOOL,
+        &advanced.imapport_chkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"imap_port", "143", &tmp_ac_prefs.imapport, P_USHORT,
+        &advanced.imapport_entry,
+        prefs_set_data_from_entry, prefs_set_entry},
+
+       {"set_nntpport", "FALSE", &tmp_ac_prefs.set_nntpport, P_BOOL,
+        &advanced.nntpport_chkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"nntp_port", "119", &tmp_ac_prefs.nntpport, P_USHORT,
+        &advanced.nntpport_entry,
+        prefs_set_data_from_entry, prefs_set_entry},
+
        {"set_domain", "FALSE", &tmp_ac_prefs.set_domain, P_BOOL,
         &advanced.domain_chkbtn,
         prefs_set_data_from_toggle, prefs_set_toggle},
@@ -302,6 +336,20 @@ static PrefParam param[] = {
         &advanced.domain_entry,
         prefs_set_data_from_entry, prefs_set_entry},
 
+#if USE_SSL
+       {"smtp_ssl", "FALSE", &tmp_ac_prefs.smtp_ssl, P_BOOL,
+        &advanced.smtpssl_chkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"pop_ssl", "FALSE", &tmp_ac_prefs.pop_ssl, P_BOOL,
+        &advanced.popssl_chkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+
+       {"imap_ssl", "FALSE", &tmp_ac_prefs.imap_ssl, P_BOOL,
+        &advanced.imapssl_chkbtn,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+#endif
+
        {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
 };
 
@@ -874,6 +922,10 @@ static void prefs_account_receive_create(void)
        GtkWidget *getall_chkbtn;
        GtkWidget *recvatgetall_chkbtn;
        GtkWidget *filter_on_recv_chkbtn;
+       GtkWidget *frame2;
+       GtkWidget *hbox1;
+       GtkWidget *imapdir_label;
+       GtkWidget *imapdir_entry;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
@@ -890,18 +942,40 @@ static void prefs_account_receive_create(void)
        PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
                           _("Remove messages on server when received"));
        PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
-                          _("Receive all messages on server"));
+                          _("Download all messages on server"));
        PACK_CHECK_BUTTON
                (vbox2, recvatgetall_chkbtn,
-                _("`Receive all' checks for new mail on this account"));
+                _("`Get all' checks for new mail on this account"));
        PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn,
                           _("Filter messages on receiving"));
 
+       PACK_FRAME (vbox1, frame2, _("IMAP4"));
+
+       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+       gtk_widget_show (vbox2);
+       gtk_container_add (GTK_CONTAINER (frame2), vbox2);
+       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+       hbox1 = gtk_hbox_new (FALSE, 8);
+       gtk_widget_show (hbox1);
+       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+       imapdir_label = gtk_label_new (_("IMAP server directory"));
+       gtk_widget_show (imapdir_label);
+       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
+
+       imapdir_entry = gtk_entry_new();
+       gtk_widget_show (imapdir_entry);
+       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0);
+
        receive.pop3_frame            = frame1;
        receive.rmmail_chkbtn         = rmmail_chkbtn;
        receive.getall_chkbtn         = getall_chkbtn;
        receive.recvatgetall_chkbtn   = recvatgetall_chkbtn;
        receive.filter_on_recv_chkbtn = filter_on_recv_chkbtn;
+
+       receive.imap_frame    = frame2;
+       receive.imapdir_entry = imapdir_entry;
 }
 
 static void prefs_account_send_create(void)
@@ -1147,12 +1221,37 @@ static void prefs_account_advanced_create(void)
        GtkWidget *hbox1;
        GtkWidget *checkbtn_smtpport;
        GtkWidget *entry_smtpport;
-       GtkWidget *hbox2;
+       GtkWidget *hbox_popport;
        GtkWidget *checkbtn_popport;
        GtkWidget *entry_popport;
-       GtkWidget *hbox3;
+       GtkWidget *hbox_imapport;
+       GtkWidget *checkbtn_imapport;
+       GtkWidget *entry_imapport;
+       GtkWidget *hbox_nntpport;
+       GtkWidget *checkbtn_nntpport;
+       GtkWidget *entry_nntpport;
        GtkWidget *checkbtn_domain;
        GtkWidget *entry_domain;
+#ifdef USE_SSL
+       GtkWidget *checkbtn_smtpssl;
+       GtkWidget *checkbtn_popssl;
+       GtkWidget *checkbtn_imapssl;
+#endif
+
+#define PACK_HBOX(hbox) \
+{ \
+       hbox = gtk_hbox_new (FALSE, 8); \
+       gtk_widget_show (hbox); \
+       gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); \
+}
+
+#define PACK_PORT_ENTRY(box, entry) \
+{ \
+       entry = gtk_entry_new_with_max_length (5); \
+       gtk_widget_show (entry); \
+       gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \
+       gtk_widget_set_usize (entry, 64, -1); \
+}
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
@@ -1163,45 +1262,68 @@ static void prefs_account_advanced_create(void)
        gtk_widget_show (vbox2);
        gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
 
-       hbox1 = gtk_hbox_new (FALSE, 8);
-       gtk_widget_show (hbox1);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
-
+       PACK_HBOX (hbox1);
        PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port"));
+       PACK_PORT_ENTRY (hbox1, entry_smtpport);
+       SET_TOGGLE_SENSITIVITY (checkbtn_smtpport, entry_smtpport);
 
-       entry_smtpport = gtk_entry_new_with_max_length (5);
-       gtk_widget_show (entry_smtpport);
-       gtk_box_pack_start (GTK_BOX (hbox1), entry_smtpport, FALSE, FALSE, 0);
-       gtk_widget_set_usize (entry_smtpport, 64, -1);
-       SET_TOGGLE_SENSITIVITY(checkbtn_smtpport, entry_smtpport);
+#ifdef USE_SSL
+       PACK_CHECK_BUTTON (vbox2, checkbtn_smtpssl, _("Use SSL to connect to SMTP server"));
+#endif
+
+       PACK_HBOX (hbox_popport);
+       PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport,
+                          _("Specify POP3 port"));
+       PACK_PORT_ENTRY (hbox_popport, entry_popport);
+       SET_TOGGLE_SENSITIVITY (checkbtn_popport, entry_popport);
 
-       hbox2 = gtk_hbox_new (FALSE, 8);
-       gtk_widget_show (hbox2);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
+#ifdef USE_SSL
+       PACK_CHECK_BUTTON (vbox2, checkbtn_popssl, _("Use SSL to connect to POP server"));
+#endif
 
-       PACK_CHECK_BUTTON (hbox2, checkbtn_popport, _("Specify POP3 port"));
+       PACK_HBOX (hbox_imapport);
+       PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport,
+                          _("Specify IMAP4 port"));
+       PACK_PORT_ENTRY (hbox_imapport, entry_imapport);
+       SET_TOGGLE_SENSITIVITY (checkbtn_imapport, entry_imapport);
 
-       entry_popport = gtk_entry_new_with_max_length (5);
-       gtk_widget_show (entry_popport);
-       gtk_box_pack_start (GTK_BOX (hbox2), entry_popport, FALSE, FALSE, 0);
-       gtk_widget_set_usize (entry_popport, 64, -1);
-       SET_TOGGLE_SENSITIVITY(checkbtn_popport, entry_popport);
+#ifdef USE_SSL
+       PACK_CHECK_BUTTON (vbox2, checkbtn_imapssl, _("Use SSL to connect to IMAP server"));
+#endif
 
-       hbox3 = gtk_hbox_new (FALSE, 8);
-       gtk_widget_show (hbox3);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox3, FALSE, FALSE, 0);
+       PACK_HBOX (hbox_nntpport);
+       PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport,
+                          _("Specify NNTP port"));
+       PACK_PORT_ENTRY (hbox_nntpport, entry_nntpport);
+       SET_TOGGLE_SENSITIVITY (checkbtn_nntpport, entry_nntpport);
 
-       PACK_CHECK_BUTTON (hbox3, checkbtn_domain, _("Specify domain name"));
+       PACK_HBOX (hbox1);
+       PACK_CHECK_BUTTON (hbox1, checkbtn_domain, _("Specify domain name"));
 
        entry_domain = gtk_entry_new ();
        gtk_widget_show (entry_domain);
-       gtk_box_pack_start (GTK_BOX (hbox3), entry_domain, TRUE, TRUE, 0);
-       SET_TOGGLE_SENSITIVITY(checkbtn_domain, entry_domain);
+       gtk_box_pack_start (GTK_BOX (hbox1), entry_domain, TRUE, TRUE, 0);
+       SET_TOGGLE_SENSITIVITY (checkbtn_domain, entry_domain);
+
+#undef PACK_HBOX
+#undef PACK_PORT_ENTRY
 
        advanced.smtpport_chkbtn        = checkbtn_smtpport;
        advanced.smtpport_entry         = entry_smtpport;
+       advanced.popport_hbox           = hbox_popport;
        advanced.popport_chkbtn         = checkbtn_popport;
        advanced.popport_entry          = entry_popport;
+#ifdef USE_SSL
+       advanced.smtpssl_chkbtn          = checkbtn_smtpssl;
+       advanced.popssl_chkbtn           = checkbtn_popssl;
+       advanced.imapssl_chkbtn          = checkbtn_imapssl;
+#endif
+       advanced.imapport_hbox          = hbox_imapport;
+       advanced.imapport_chkbtn        = checkbtn_imapport;
+       advanced.imapport_entry         = entry_imapport;
+       advanced.nntpport_hbox          = hbox_nntpport;
+       advanced.nntpport_chkbtn        = checkbtn_nntpport;
+       advanced.nntpport_entry         = entry_nntpport;
        advanced.domain_chkbtn          = checkbtn_domain;
        advanced.domain_entry           = entry_domain;
 }
@@ -1377,6 +1499,7 @@ static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
                break;
                */
        default:
+               break;
        }
 
        menu = gtk_option_menu_get_menu(optmenu);
@@ -1388,6 +1511,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
 {
        RecvProtocol protocol;
        gboolean active;
+       gint auth;
 
        protocol = GPOINTER_TO_INT
                (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
@@ -1425,16 +1549,29 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                                           5, 0);
                gtk_widget_show(basic.uid_label);
                gtk_widget_show(basic.pass_label);
+               gtk_widget_show(basic.uid_entry);
+               gtk_widget_show(basic.pass_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           7, VSPACING_NARROW);
 
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
+               gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
+               gtk_widget_set_sensitive(basic.pass_entry, TRUE);
 
                /* update userid/passwd sensitive state */
                prefs_account_nntpauth_toggled
                        (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn), NULL);
                gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
+               gtk_widget_set_sensitive(receive.imap_frame, FALSE);
+               gtk_widget_hide(advanced.popport_hbox);
+               gtk_widget_hide(advanced.imapport_hbox);
+               gtk_widget_show(advanced.nntpport_hbox);
+
+#if USE_SSL
+               gtk_widget_hide(advanced.popssl_chkbtn);
+               gtk_widget_hide(advanced.imapssl_chkbtn);
+#endif
                break;
        case A_LOCAL:
                gtk_widget_set_sensitive(basic.inbox_label, TRUE);
@@ -1468,14 +1605,27 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                                           5, VSPACING_NARROW);
                gtk_widget_hide(basic.uid_label);
                gtk_widget_hide(basic.pass_label);
+               gtk_widget_hide(basic.uid_entry);
+               gtk_widget_hide(basic.pass_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           7, 0);
 
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
+               gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
+               gtk_widget_set_sensitive(basic.pass_entry, TRUE);
                gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
+               gtk_widget_set_sensitive(receive.imap_frame, FALSE);
+               gtk_widget_hide(advanced.popport_hbox);
+               gtk_widget_hide(advanced.imapport_hbox);
+               gtk_widget_hide(advanced.nntpport_hbox);
                prefs_account_mailcmd_toggled
                        (GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn), NULL);
+
+#if USE_SSL
+               gtk_widget_hide(advanced.popssl_chkbtn);
+               gtk_widget_hide(advanced.imapssl_chkbtn);
+#endif
                break;
        case A_IMAP4:
                gtk_widget_set_sensitive(basic.inbox_label, FALSE);
@@ -1511,14 +1661,27 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                                           5, 0);
                gtk_widget_show(basic.uid_label);
                gtk_widget_show(basic.pass_label);
+               gtk_widget_show(basic.uid_entry);
+               gtk_widget_show(basic.pass_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           7, VSPACING_NARROW);
 
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
+               gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
+               gtk_widget_set_sensitive(basic.pass_entry, TRUE);
                gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
+               gtk_widget_set_sensitive(receive.imap_frame, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
+               gtk_widget_hide(advanced.popport_hbox);
+               gtk_widget_show(advanced.imapport_hbox);
+               gtk_widget_hide(advanced.nntpport_hbox);
+
+#if USE_SSL
+               gtk_widget_hide(advanced.popssl_chkbtn);
+               gtk_widget_show(advanced.imapssl_chkbtn);
+#endif
                break;
        case A_POP3:
        default:
@@ -1555,14 +1718,27 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                                           5, 0);
                gtk_widget_show(basic.uid_label);
                gtk_widget_show(basic.pass_label);
+               gtk_widget_show(basic.uid_entry);
+               gtk_widget_show(basic.pass_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
                                           7, VSPACING_NARROW);
 
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
+               gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
+               gtk_widget_set_sensitive(basic.pass_entry, TRUE);
                gtk_widget_set_sensitive(receive.pop3_frame, TRUE);
+               gtk_widget_set_sensitive(receive.imap_frame, FALSE);
                gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
                gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
+               gtk_widget_show(advanced.popport_hbox);
+               gtk_widget_hide(advanced.imapport_hbox);
+               gtk_widget_hide(advanced.nntpport_hbox);
+
+#if USE_SSL
+               gtk_widget_show(advanced.popssl_chkbtn);
+               gtk_widget_hide(advanced.imapssl_chkbtn);
+#endif
                break;
        }