diff options
Diffstat (limited to 'camel/providers/smtp')
-rw-r--r-- | camel/providers/smtp/camel-smtp-transport.c | 69 |
1 files changed, 16 insertions, 53 deletions
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c index 8ccdcec9b3..02a0198f2f 100644 --- a/camel/providers/smtp/camel-smtp-transport.c +++ b/camel/providers/smtp/camel-smtp-transport.c @@ -69,8 +69,6 @@ static GList *query_auth_types_generic (CamelService *service, CamelException *e static void free_auth_types (CamelService *service, GList *authtypes); static char *get_name (CamelService *service, gboolean brief); -static gchar *smtp_get_email_addr_from_text (gchar *text); - static gboolean smtp_helo (CamelSmtpTransport *transport, CamelException *ex); static gboolean smtp_mail (CamelSmtpTransport *transport, const char *sender, CamelException *ex); static gboolean smtp_rcpt (CamelSmtpTransport *transport, const char *recipient, CamelException *ex); @@ -349,21 +347,31 @@ _send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex) { CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (transport); - char *recipient, *s, *sender; + CamelInternetAddress *cia; + char *recipient, *sender; + const char *addr; GList *r; - s = g_strdup (camel_mime_message_get_from (CAMEL_MIME_MESSAGE (message))); - if (!s) { + sender = g_strdup (camel_mime_message_get_from (CAMEL_MIME_MESSAGE (message))); + if (!sender) { camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, "Cannot send message: " "sender address not defined."); return FALSE; } - sender = smtp_get_email_addr_from_text (s); - smtp_mail (smtp_transport, sender, ex); + cia = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (cia), sender); g_free (sender); - g_free (s); + + if (!camel_internet_address_get (cia, 0, NULL, &addr)) { + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + "Cannot send message: " + "sender address not valid."); + return FALSE; + } + + smtp_mail (smtp_transport, addr, ex); if (!recipients) { camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, @@ -431,51 +439,6 @@ _send (CamelTransport *transport, CamelMedium *message, CamelException *ex) return _send_to (transport, message, recipients, ex); } -/* FIXME: this is unreliable, use Camel's address parser */ -static gchar * -smtp_get_email_addr_from_text (gchar *text) -{ - /* get the actual email address from the string passed and place it in addr - * we can assume the address will be in one of the following forms: - * 1) The Name <person@host.com> - * 2) <person@host.com> - * 3) person@host.com - * 4) person@host.com (The Name) - */ - - gchar *addr; - gchar *addr_strt; - gchar *addr_end; - - g_return_val_if_fail (text != NULL, NULL); - - /* scan the string for an open brace */ - for (addr_strt = text; *addr_strt; addr_strt++) - if (*addr_strt == '<') - break; - - if (*addr_strt == '<') { - /* we found an open brace, let's look for it's counterpart */ - addr_strt++; - for (addr_end = addr_strt; *addr_end; addr_end++) - if (*addr_end == '>') - break; - } else { - /* no open brace...assume type 3 or 4? */ - - /* trim leading space */ - for (addr_strt = text; *addr_strt && isspace (*addr_strt); addr_strt++); - - /* find the end of the email addr/string */ - for (addr_end = addr_strt; *addr_end && !isspace (*addr_end); addr_end++); - } - - /* copy the string into addr */ - addr = g_strndup (addr_strt, (gint) (addr_end - addr_strt)); - - return addr; -} - static gboolean smtp_helo (CamelSmtpTransport *transport, CamelException *ex) { |