Change the prototype for camel_address_get_type to return a CamelType
2001-12-20 Jeffrey Stedfast <fejj@ximian.com> * camel-address.h: Change the prototype for camel_address_get_type to return a CamelType (since internally this is what it returns and also in case we decide to write a replacement for the current CamelObject it'd be easier to drop in). * camel-internet-address.h: Same but for camel_internet_address_get_type() * providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to use a CamelAddress of recipients. (smtp_send): Since smtp_send_to now takes a CamelAddress recipients argument, our lives have been simplified and we can now just concat To/Cc/Bcc into a recipients addr and send away. * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to): Updated to use a CamelAddress of recipients. * camel-transport.c (camel_transport_send_to): Now takes a CamelAddress argument for the recipient list rather than a GList. svn path=/trunk/; revision=15197
This commit is contained in:

committed by
Jeffrey Stedfast

parent
e97bb59a94
commit
00903a7e0f
@ -1,3 +1,31 @@
|
||||
2001-12-20 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* camel-address.h: Change the prototype for camel_address_get_type
|
||||
to return a CamelType (since internally this is what it returns
|
||||
and also in case we decide to write a replacement for the current
|
||||
CamelObject it'd be easier to drop in).
|
||||
|
||||
* camel-internet-address.h: Same but for
|
||||
camel_internet_address_get_type()
|
||||
|
||||
* providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to
|
||||
use a CamelAddress of recipients.
|
||||
(smtp_send): Since smtp_send_to now takes a CamelAddress
|
||||
recipients argument, our lives have been simplified and we can now
|
||||
just concat To/Cc/Bcc into a recipients addr and send away.
|
||||
|
||||
* providers/sendmail/camel-sendmail-transport.c
|
||||
(sendmail_send_to): Updated to use a CamelAddress of recipients.
|
||||
|
||||
* camel-transport.c (camel_transport_send_to): Now takes a
|
||||
CamelAddress argument for the recipient list rather than a GList.
|
||||
|
||||
2001-12-19 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* providers/smtp/Makefile.am: Remove the providerdir variable.
|
||||
|
||||
* providers/sendmail/Makefile.am: Same.
|
||||
|
||||
2001-12-17 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* camel-charset-map.c (camel_charset_iso_to_windows): New function
|
||||
|
@ -52,7 +52,7 @@ struct _CamelAddressClass {
|
||||
void (*remove) (CamelAddress *, int index);
|
||||
};
|
||||
|
||||
guint camel_address_get_type (void);
|
||||
CamelType camel_address_get_type (void);
|
||||
CamelAddress *camel_address_new (void);
|
||||
CamelAddress *camel_address_new_clone (const CamelAddress *);
|
||||
int camel_address_length (CamelAddress *);
|
||||
|
@ -39,7 +39,7 @@ struct _CamelInternetAddressClass {
|
||||
CamelAddressClass parent_class;
|
||||
};
|
||||
|
||||
guint camel_internet_address_get_type (void);
|
||||
CamelType camel_internet_address_get_type (void);
|
||||
CamelInternetAddress *camel_internet_address_new (void);
|
||||
|
||||
int camel_internet_address_add (CamelInternetAddress *, const char *, const char *);
|
||||
|
@ -132,7 +132,7 @@ camel_transport_send (CamelTransport *transport, CamelMedium *message,
|
||||
**/
|
||||
gboolean
|
||||
camel_transport_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
CamelAddress *recipients, CamelException *ex)
|
||||
{
|
||||
gboolean sent;
|
||||
|
||||
|
@ -59,9 +59,8 @@ typedef struct {
|
||||
gboolean (*can_send) (CamelTransport *transport, CamelMedium *message);
|
||||
gboolean (*send) (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex);
|
||||
gboolean (*send_to) (CamelTransport *transport,
|
||||
CamelMedium *message, GList *recipients,
|
||||
CamelException *ex);
|
||||
gboolean (*send_to) (CamelTransport *transport, CamelMedium *message,
|
||||
CamelAddress *recipients, CamelException *ex);
|
||||
} CamelTransportClass;
|
||||
|
||||
|
||||
@ -76,7 +75,7 @@ gboolean camel_transport_send (CamelTransport *transport,
|
||||
/* FIXME: This should use a camel-address */
|
||||
gboolean camel_transport_send_to (CamelTransport *transport,
|
||||
CamelMedium *message,
|
||||
GList *recipients,
|
||||
CamelAddress *recipients,
|
||||
CamelException *ex);
|
||||
|
||||
/* Standard Camel function */
|
||||
|
@ -45,7 +45,7 @@ static gboolean sendmail_can_send (CamelTransport *transport, CamelMedium *messa
|
||||
static gboolean sendmail_send (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex);
|
||||
static gboolean sendmail_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex);
|
||||
CamelAddress *recipients, CamelException *ex);
|
||||
|
||||
|
||||
static void
|
||||
@ -198,37 +198,46 @@ get_from (CamelMedium *message, CamelException *ex)
|
||||
|
||||
static gboolean
|
||||
sendmail_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
CamelAddress *recipients, CamelException *ex)
|
||||
{
|
||||
GList *r;
|
||||
const char *from, **argv;
|
||||
int i, len;
|
||||
const char *from, *addr, **argv;
|
||||
gboolean status;
|
||||
|
||||
int i, len;
|
||||
|
||||
from = get_from (message, ex);
|
||||
if (!from)
|
||||
return FALSE;
|
||||
|
||||
len = g_list_length (recipients);
|
||||
|
||||
len = camel_address_length (recipients);
|
||||
argv = g_malloc ((len + 6) * sizeof (char *));
|
||||
argv[0] = "sendmail";
|
||||
argv[1] = "-i";
|
||||
argv[2] = "-f";
|
||||
argv[3] = from;
|
||||
argv[4] = "--";
|
||||
|
||||
for (i = 1, r = recipients; i <= len; i++, r = r->next)
|
||||
argv[i + 4] = r->data;
|
||||
argv[i + 4] = NULL;
|
||||
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (recipients), i, NULL, &addr)) {
|
||||
camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
|
||||
_("Could not parse recipient list"));
|
||||
g_free (argv);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
argv[i + 5] = addr;
|
||||
}
|
||||
|
||||
argv[i + 5] = NULL;
|
||||
|
||||
status = sendmail_send_internal (message, argv, ex);
|
||||
g_free (argv);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
sendmail_send (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex)
|
||||
CamelException *ex)
|
||||
{
|
||||
const char *argv[6] = { "sendmail", "-t", "-i", "-f", NULL, NULL };
|
||||
|
||||
|
@ -69,7 +69,8 @@
|
||||
/* camel smtp transport class prototypes */
|
||||
static gboolean smtp_can_send (CamelTransport *transport, CamelMedium *message);
|
||||
static gboolean smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
|
||||
static gboolean smtp_send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
|
||||
static gboolean smtp_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
CamelAddress *recipients, CamelException *ex);
|
||||
|
||||
/* support prototypes */
|
||||
static void smtp_construct (CamelService *service, CamelSession *session,
|
||||
@ -566,14 +567,13 @@ smtp_can_send (CamelTransport *transport, CamelMedium *message)
|
||||
|
||||
static gboolean
|
||||
smtp_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
CamelAddress *recipients, CamelException *ex)
|
||||
{
|
||||
CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (transport);
|
||||
const CamelInternetAddress *cia;
|
||||
char *recipient;
|
||||
const char *addr;
|
||||
gboolean has_8bit_parts;
|
||||
GList *r;
|
||||
const char *addr;
|
||||
int i, len;
|
||||
|
||||
cia = camel_mime_message_get_from (CAMEL_MIME_MESSAGE (message));
|
||||
if (!cia) {
|
||||
@ -603,18 +603,24 @@ smtp_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
|
||||
_("Cannot send message: "
|
||||
"no recipients defined."));
|
||||
camel_operation_end(NULL);
|
||||
camel_operation_end (NULL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (r = recipients; r; r = r->next) {
|
||||
recipient = (char *) r->data;
|
||||
if (!smtp_rcpt (smtp_transport, recipient, ex)) {
|
||||
g_free (recipient);
|
||||
len = camel_address_length (recipients);
|
||||
cia = CAMEL_INTERNET_ADDRESS (recipients);
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!camel_internet_address_get (cia, i, NULL, &addr)) {
|
||||
camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
|
||||
_("Cannot send message: one or more invalid recipients"));
|
||||
camel_operation_end (NULL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!smtp_rcpt (smtp_transport, addr, ex)) {
|
||||
camel_operation_end (NULL);
|
||||
return FALSE;
|
||||
}
|
||||
g_free (recipient);
|
||||
}
|
||||
|
||||
/* passing in has_8bit_parts saves time as we don't have to
|
||||
@ -637,41 +643,23 @@ static gboolean
|
||||
smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex)
|
||||
{
|
||||
const CamelInternetAddress *to, *cc, *bcc;
|
||||
GList *recipients = NULL;
|
||||
guint index, len;
|
||||
CamelInternetAddress *recipients = NULL;
|
||||
gboolean status;
|
||||
|
||||
to = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_TO);
|
||||
cc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_CC);
|
||||
bcc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_BCC);
|
||||
|
||||
/* get all of the To addresses into our recipient list */
|
||||
len = camel_address_length (CAMEL_ADDRESS (to));
|
||||
for (index = 0; index < len; index++) {
|
||||
const char *addr;
|
||||
|
||||
if (camel_internet_address_get (to, index, NULL, &addr))
|
||||
recipients = g_list_append (recipients, g_strdup (addr));
|
||||
}
|
||||
recipients = camel_internet_address_new ();
|
||||
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (to));
|
||||
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (cc));
|
||||
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (bcc));
|
||||
|
||||
/* get all of the Cc addresses into our recipient list */
|
||||
len = camel_address_length (CAMEL_ADDRESS (cc));
|
||||
for (index = 0; index < len; index++) {
|
||||
const char *addr;
|
||||
|
||||
if (camel_internet_address_get (cc, index, NULL, &addr))
|
||||
recipients = g_list_append (recipients, g_strdup (addr));
|
||||
}
|
||||
status = smtp_send_to (transport, message, CAMEL_ADDRESS (recipients), ex);
|
||||
|
||||
/* get all of the Bcc addresses into our recipient list */
|
||||
len = camel_address_length (CAMEL_ADDRESS (bcc));
|
||||
for (index = 0; index < len; index++) {
|
||||
const char *addr;
|
||||
|
||||
if (camel_internet_address_get (bcc, index, NULL, &addr))
|
||||
recipients = g_list_append (recipients, g_strdup (addr));
|
||||
}
|
||||
camel_object_unref (CAMEL_OBJECT (recipients));
|
||||
|
||||
return smtp_send_to (transport, message, recipients, ex);
|
||||
return status;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
Reference in New Issue
Block a user