#include "gtkutils.h"
#define SMTP_PORT 25
+#if USE_SSL
+#define SSMTP_PORT 465
+#endif
typedef struct _SendProgressDialog SendProgressDialog;
gboolean cancelled;
};
+#if !USE_SSL
static gint send_message_smtp (GSList *to_list, const gchar *from,
const gchar *server, gushort port,
const gchar *domain, const gchar *userid,
const gchar *passwd, gboolean use_smtp_auth,
FILE *fp);
+
static SockInfo *send_smtp_open (const gchar *server, gushort port,
const gchar *domain, gboolean use_smtp_auth);
+#else
+static gint send_message_smtp (GSList *to_list, const gchar *from,
+ const gchar *server, gushort port,
+ const gchar *domain, const gchar *userid,
+ const gchar *passwd, gboolean use_smtp_auth,
+ FILE *fp, gboolean use_ssl);
+
+static SockInfo *send_smtp_open (const gchar *server, gushort port,
+ const gchar *domain, gboolean use_smtp_auth, gboolean use_ssl);
+#endif
static SendProgressDialog *send_progress_dialog_create(void);
static void send_progress_dialog_destroy(SendProgressDialog *dialog);
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
port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT;
+#endif
domain = ac_prefs->set_domain ? ac_prefs->domain : NULL;
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->use_smtp_auth, fp
+#if USE_SSL
+ , ac_prefs->smtp_ssl
+#endif
+ );
}
fclose(fp);
}
if (ac) {
+#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);
+#endif
domain = ac->set_domain ? ac->domain : NULL;
+#if !USE_SSL
val = send_message_smtp
(to_list, from, server, port, domain,
ac->userid, ac->passwd, ac->use_smtp_auth, fp);
+#else
+ val = send_message_smtp
+ (to_list, from, server, port, domain,
+ ac->userid, ac->passwd, ac->use_smtp_auth, fp, ac->smtp_ssl);
+#endif
} else {
g_warning(_("Account not found.\n"));
+#if !USE_SSL
val = send_message_smtp
(to_list, from, server, SMTP_PORT, NULL,
NULL, NULL, FALSE, fp);
+#else
+ val = send_message_smtp
+ (to_list, from, server, SMTP_PORT, NULL,
+ NULL, NULL, FALSE, fp, FALSE);
+#endif
}
}
} \
}
+#if !USE_SSL
static gint send_message_smtp(GSList *to_list, const gchar *from,
const gchar *server, gushort port,
const gchar *domain, const gchar *userid,
const gchar *passwd, gboolean use_smtp_auth,
FILE *fp)
+#else
+static gint send_message_smtp(GSList *to_list, const gchar *from,
+ const gchar *server, gushort port,
+ const gchar *domain, const gchar *userid,
+ const gchar *passwd, gboolean use_smtp_auth,
+ FILE *fp, gboolean use_ssl)
+#endif
{
SockInfo *smtp_sock = NULL;
SendProgressDialog *dialog;
gtk_clist_set_text(clist, 0, 2, _("Connecting"));
GTK_EVENTS_FLUSH();
+#if !USE_SSL
SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open
(server, port, domain, use_smtp_auth)),
"connecting to server");
+#else
+ SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open
+ (server, port, domain, use_smtp_auth, use_ssl)),
+ "connecting to server");
+#endif
progress_dialog_set_label(dialog->dialog, _("Sending MAIL FROM..."));
gtk_clist_set_text(clist, 0, 2, _("Sending"));
SEND_EXIT_IF_NOTOK(smtp_eom(smtp_sock), "terminating data");
SEND_EXIT_IF_NOTOK(smtp_quit(smtp_sock), "sending QUIT");
+#if USE_SSL
+ ssl_done_socket(smtp_sock);
+#endif
+
sock_close(smtp_sock);
send_progress_dialog_destroy(dialog);
return 0;
}
+#if !USE_SSL
static SockInfo *send_smtp_open(const gchar *server, gushort port,
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)
+#endif
{
SockInfo *sock;
gint val;
return NULL;
}
+#if USE_SSL
+ if(use_ssl && !ssl_init_socket(sock)) {
+ log_warning(_("SSL connection failed"));
+ sock_close(sock);
+ return NULL;
+ }
+#endif
+
if (smtp_ok(sock) == SM_OK) {
val = smtp_helo(sock, domain ? domain : get_domain_name(),
use_smtp_auth);