} privacy;
#endif /* USE_GPGME */
+#if USE_SSL
+static struct SSLPrefs {
+ GtkWidget *pop_chkbtn;
+ GtkWidget *imap_chkbtn;
+
+ GtkWidget *smtp_nossl_radiobtn;
+ GtkWidget *smtp_ssltunnel_radiobtn;
+ GtkWidget *smtp_sslstarttls_radiobtn;
+} ssl;
+#endif /* USE_SSL */
+
static struct Advanced {
GtkWidget *smtpport_chkbtn;
GtkWidget *smtpport_entry;
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);
static void prefs_account_protocol_set_optmenu (PrefParam *pparam);
static void prefs_account_protocol_activated (GtkMenuItem *menuitem);
#if USE_GPGME
-static void prefs_account_sign_key_set_data_from_radiobtn (PrefParam *pparam);
-static void prefs_account_sign_key_set_radiobtn (PrefParam *pparam);
+static void prefs_account_enum_set_data_from_radiobtn (PrefParam *pparam);
+static void prefs_account_enum_set_radiobtn (PrefParam *pparam);
#endif /* USE_GPGME */
static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
/* Privacy */
{"sign_key", NULL, &tmp_ac_prefs.sign_key, P_ENUM,
&privacy.defaultkey_radiobtn,
- prefs_account_sign_key_set_data_from_radiobtn,
- prefs_account_sign_key_set_radiobtn},
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
{"sign_key_id", NULL, &tmp_ac_prefs.sign_key_id, P_STRING,
&privacy.customkey_entry,
prefs_set_data_from_entry, prefs_set_entry},
#endif /* USE_GPGME */
+#if USE_SSL
+ /* SSL Config */
+ {"ssl_smtp", "FALSE", &tmp_ac_prefs.ssl_smtp, P_ENUM,
+ &ssl.smtp_nossl_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+
+ {"ssl_pop", "FALSE", &tmp_ac_prefs.ssl_pop, P_BOOL,
+ &ssl.pop_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"ssl_imap", "FALSE", &tmp_ac_prefs.ssl_imap, P_BOOL,
+ &ssl.imap_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+#endif /* USE_SSL */
+
/* Advanced */
{"set_smtpport", "FALSE", &tmp_ac_prefs.set_smtpport, P_BOOL,
&advanced.smtpport_chkbtn,
&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}
};
#if USE_GPGME
static void prefs_account_privacy_create (void);
#endif /* USE_GPGME */
+#if USE_SSL
+static void prefs_account_ssl_create (void);
+#endif /* USE_SSL */
static void prefs_account_advanced_create (void);
static void prefs_account_edit_custom_header (void);
#if USE_GPGME
prefs_account_privacy_create();
SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
+#endif /* USE_GPGME */
+#if USE_SSL
+ prefs_account_ssl_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("SSL"), page++);
#endif /* USE_GPGME */
prefs_account_advanced_create();
SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++);
}
#endif /* USE_GPGME */
+#if USE_SSL
+static void prefs_account_ssl_create(void)
+{
+ GtkWidget *vbox1;
+
+ GtkWidget *receive_frame;
+ GtkWidget *vbox2;
+ GtkWidget *pop_chkbtn;
+ GtkWidget *imap_chkbtn;
+
+ GtkWidget *send_frame;
+ GtkWidget *vbox3;
+ GtkWidget *smtp_nossl_radiobtn;
+ GtkWidget *smtp_ssltunnel_radiobtn;
+ GtkWidget *smtp_sslstarttls_radiobtn;
+
+ /* Vertial Box */
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER);
+
+ /* Receive Options */
+ PACK_FRAME (vbox1, receive_frame, _("Receive"));
+
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (receive_frame), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON (vbox2, pop_chkbtn, _("Use SSL tunnel to connect to POP server"));
+ PACK_CHECK_BUTTON (vbox2, imap_chkbtn, _("Use SSL tunnel to connect to IMAP server"));
+
+ /* Send Options */
+ PACK_FRAME (vbox1, send_frame, _("Send"));
+
+ vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox3);
+ gtk_container_add (GTK_CONTAINER (send_frame), vbox3);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
+ smtp_nossl_radiobtn = gtk_radio_button_new_with_label
+ (NULL, _("No SSL for SMTP"));
+ gtk_widget_show (smtp_nossl_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox3), smtp_nossl_radiobtn,
+ FALSE, FALSE, 0);
+ gtk_object_set_user_data (GTK_OBJECT (smtp_nossl_radiobtn),
+ GINT_TO_POINTER (SSL_SMTP_NONE));
+
+ smtp_ssltunnel_radiobtn = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (smtp_nossl_radiobtn),
+ _("Use SSL tunnel to connect to SMTP server"));
+ gtk_widget_show (smtp_ssltunnel_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox3), smtp_ssltunnel_radiobtn,
+ FALSE, FALSE, 0);
+ gtk_object_set_user_data (GTK_OBJECT (smtp_ssltunnel_radiobtn),
+ GINT_TO_POINTER (SSL_SMTP_TUNNEL));
+
+ smtp_sslstarttls_radiobtn = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (smtp_nossl_radiobtn),
+ _("Use STARTTLS command to start SMTP SSL session"));
+ gtk_widget_show (smtp_sslstarttls_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox3), smtp_sslstarttls_radiobtn,
+ FALSE, FALSE, 0);
+ gtk_object_set_user_data (GTK_OBJECT (smtp_sslstarttls_radiobtn),
+ GINT_TO_POINTER (SSL_SMTP_STARTTLS));
+
+ ssl.pop_chkbtn = pop_chkbtn;
+ ssl.imap_chkbtn = imap_chkbtn;
+ ssl.smtp_nossl_radiobtn = smtp_nossl_radiobtn;
+ ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn;
+ ssl.smtp_sslstarttls_radiobtn = smtp_sslstarttls_radiobtn;
+}
+#endif /* USE_SSL */
+
static void prefs_account_advanced_create(void)
{
GtkWidget *vbox1;
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) \
{ \
PACK_PORT_ENTRY (hbox1, entry_smtpport);
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);
-#ifdef USE_SSL
- PACK_CHECK_BUTTON (vbox2, checkbtn_popssl, _("Use SSL to connect to POP server"));
-#endif
-
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);
-#ifdef USE_SSL
- PACK_CHECK_BUTTON (vbox2, checkbtn_imapssl, _("Use SSL to connect to IMAP server"));
-#endif
-
PACK_HBOX (hbox_nntpport);
PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport,
_("Specify NNTP port"));
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;
}
#if USE_GPGME
-static void prefs_account_sign_key_set_data_from_radiobtn(PrefParam *pparam)
+static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam)
{
GtkRadioButton *radiobtn;
GSList *group;
while (group != NULL) {
GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data);
if (gtk_toggle_button_get_active (btn)) {
- *((SignKeyType *)pparam->data) = GPOINTER_TO_INT
+ *((gint *)pparam->data) = GPOINTER_TO_INT
(gtk_object_get_user_data (GTK_OBJECT (btn)));
break;
}
}
}
-static void prefs_account_sign_key_set_radiobtn(PrefParam *pparam)
+static void prefs_account_enum_set_radiobtn(PrefParam *pparam)
{
GtkRadioButton *radiobtn;
GSList *group;
gpointer data;
- data = GINT_TO_POINTER (*((RecvProtocol *)pparam->data));
+ data = GINT_TO_POINTER (*((gint *)pparam->data));
radiobtn = GTK_RADIO_BUTTON (*pparam->widget);
group = gtk_radio_button_group (radiobtn);
while (group != NULL) {
gtk_widget_show(advanced.nntpport_hbox);
#if USE_SSL
- gtk_widget_hide(advanced.popssl_chkbtn);
- gtk_widget_hide(advanced.imapssl_chkbtn);
+ gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE);
+ gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE);
#endif
break;
case A_LOCAL:
(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn), NULL);
#if USE_SSL
- gtk_widget_hide(advanced.popssl_chkbtn);
- gtk_widget_hide(advanced.imapssl_chkbtn);
+ gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE);
+ gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE);
#endif
break;
case A_IMAP4:
gtk_widget_hide(advanced.nntpport_hbox);
#if USE_SSL
- gtk_widget_hide(advanced.popssl_chkbtn);
- gtk_widget_show(advanced.imapssl_chkbtn);
+ gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE);
+ gtk_widget_set_sensitive(ssl.imap_chkbtn, TRUE);
#endif
break;
case A_POP3:
gtk_widget_hide(advanced.nntpport_hbox);
#if USE_SSL
- gtk_widget_show(advanced.popssl_chkbtn);
- gtk_widget_hide(advanced.imapssl_chkbtn);
+ gtk_widget_set_sensitive(ssl.pop_chkbtn, TRUE);
+ gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE);
#endif
break;
}
const gchar *server, gushort port,
const gchar *domain, const gchar *userid,
const gchar *passwd, gboolean use_smtp_auth,
- FILE *fp, gboolean use_ssl);
+ FILE *fp, SSLSMTPType ssl);
static SockInfo *send_smtp_open (const gchar *server, gushort port,
- const gchar *domain, gboolean use_smtp_auth, gboolean use_ssl);
+ const gchar *domain, gboolean use_smtp_auth, SSLSMTPType ssl);
#endif
static SendProgressDialog *send_progress_dialog_create(void);
ac_prefs->mail_command,
fp);
} else {
-#if USE_SSL
- port = ac_prefs->set_smtpport ? ac_prefs->smtpport : (ac_prefs->smtp_ssl ? SSMTP_PORT : SMTP_PORT);
-#else
+#if !USE_SSL
port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT;
+#else
+ port = ac_prefs->set_smtpport ? ac_prefs->smtpport :
+ (ac_prefs->ssl_smtp == SSL_SMTP_TUNNEL ? SSMTP_PORT : SMTP_PORT);
#endif
domain = ac_prefs->set_domain ? ac_prefs->domain : NULL;
+#if !USE_SSL
val = send_message_smtp(to_list, ac_prefs->address,
ac_prefs->smtp_server, port, domain,
ac_prefs->userid, ac_prefs->passwd,
- ac_prefs->use_smtp_auth, fp
-#if USE_SSL
- , ac_prefs->smtp_ssl
+ ac_prefs->use_smtp_auth, fp);
+#else
+ val = send_message_smtp(to_list, ac_prefs->address,
+ ac_prefs->smtp_server, port, domain,
+ ac_prefs->userid, ac_prefs->passwd,
+ ac_prefs->use_smtp_auth, fp,
+ ac_prefs->ssl_smtp);
#endif
- );
}
fclose(fp);
#if !USE_SSL
port = ac->set_smtpport ? ac->smtpport : SMTP_PORT;
#else
- port = ac->set_smtpport ? ac->smtpport : (ac->smtp_ssl ? SSMTP_PORT : SMTP_PORT);
+ port = ac->set_smtpport ? ac->smtpport : (ac->ssl_smtp == SSL_SMTP_TUNNEL ? SSMTP_PORT : SMTP_PORT);
#endif
domain = ac->set_domain ? ac->domain : NULL;
#if !USE_SSL
#else
val = send_message_smtp
(to_list, from, server, port, domain,
- ac->userid, ac->passwd, ac->use_smtp_auth, fp, ac->smtp_ssl);
+ ac->userid, ac->passwd, ac->use_smtp_auth, fp, ac->ssl_smtp);
#endif
} else {
g_warning(_("Account not found.\n"));
const gchar *server, gushort port,
const gchar *domain, const gchar *userid,
const gchar *passwd, gboolean use_smtp_auth,
- FILE *fp, gboolean use_ssl)
+ FILE *fp, SSLSMTPType ssl)
#endif
{
SockInfo *smtp_sock = NULL;
"connecting to server");
#else
SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open
- (server, port, domain, use_smtp_auth, use_ssl)),
+ (server, port, domain, use_smtp_auth, ssl)),
"connecting to server");
#endif
const gchar *domain, gboolean use_smtp_auth)
#else
static SockInfo *send_smtp_open(const gchar *server, gushort port,
- const gchar *domain, gboolean use_smtp_auth, gboolean use_ssl)
+ const gchar *domain, gboolean use_smtp_auth, SSLSMTPType ssl)
#endif
{
SockInfo *sock;
}
#if USE_SSL
- if(use_ssl && !ssl_init_socket(sock)) {
+ if((ssl == SSL_SMTP_TUNNEL) && !ssl_init_socket(sock)) {
log_warning(_("SSL connection failed"));
sock_close(sock);
return NULL;
if (smtp_ok(sock) == SM_OK) {
val = smtp_helo(sock, domain ? domain : get_domain_name(),
use_smtp_auth);
- if (val == SM_OK) return sock;
+ if (val != SM_OK) {
+ log_warning(_("Error occurred while sending HELO\n"));
+ sock_close(sock);
+ return NULL;
+ }
}
- log_warning(_("Error occurred while sending HELO\n"));
- sock_close(sock);
+#if USE_SSL
+ if(ssl == SSL_SMTP_STARTTLS) {
+ val = smtp_starttls(sock, domain ? domain : get_domain_name(),
+ use_smtp_auth);
+ if (val != SM_OK) {
+ log_warning(_("Error occurred while sending STARTTLS\n"));
+ sock_close(sock);
+ return NULL;
+ }
+ }
+#endif
- return NULL;
+ return sock;
}