$Log$
+Revision 655.9 2005/09/18 19:34:26 ajc
+* When submitting a message, harvest non-local addresses for potential
+ inclusion in a user's Collected Addresses book. Note: we don't actually
+ do anything with these addresses yet. That comes next.
+
Revision 655.8 2005/09/18 17:50:05 ajc
* serv_network.c: use a stat() call to determine the mtime of spoolin, and
skip the scan if it hasn't been touched since the last time we looked.
Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
* Initial CVS import
+
processed = 1;
}
+ else if (!strcasecmp(key, "CC")) {
+ if (msg->cm_fields['Y'] == NULL)
+ msg->cm_fields['Y'] = strdup(value);
+ processed = 1;
+ }
+
else if (!strcasecmp(key, "Message-ID")) {
if (msg->cm_fields['I'] != NULL) {
lprintf(CTDL_WARNING, "duplicate message id\n");
return(-1);
}
+
+
+/*
+ * Harvest any email addresses that someone might want to have in their
+ * "collected addresses" book.
+ */
+char *harvest_collected_addresses(struct CtdlMessage *msg) {
+ char *coll = NULL;
+ char addr[256];
+ char user[256], node[256], name[256];
+ int is_harvestable;
+ int i, j, h;
+ int field = 0;
+
+ if (msg == NULL) return(NULL);
+
+ is_harvestable = 1;
+ strcpy(addr, "");
+ if (msg->cm_fields['A'] != NULL) {
+ strcat(addr, msg->cm_fields['A']);
+ }
+ if (msg->cm_fields['F'] != NULL) {
+ strcat(addr, " <");
+ strcat(addr, msg->cm_fields['F']);
+ strcat(addr, ">");
+ if (IsDirectory(msg->cm_fields['F'])) {
+ is_harvestable = 0;
+ }
+ }
+
+ if (is_harvestable) {
+ coll = strdup(addr);
+ }
+ else {
+ coll = strdup("");
+ }
+
+ if (coll == NULL) return(NULL);
+
+ /* Scan both the R (To) and Y (CC) fields */
+ for (i = 0; i < 2; ++i) {
+ if (i == 0) field = 'R' ;
+ if (i == 1) field = 'Y' ;
+
+ if (msg->cm_fields[field] != NULL) {
+ for (j=0; j<num_tokens(msg->cm_fields[field], ','); ++j) {
+ extract_token(addr, msg->cm_fields[field], j, ',', sizeof addr);
+ process_rfc822_addr(addr, user, node, name);
+ h = CtdlHostAlias(node);
+ if ( (h != hostalias_localhost) && (h != hostalias_directory) ) {
+ coll = realloc(coll, strlen(coll) + strlen(addr) + 4);
+ if (coll == NULL) return(NULL);
+ if (strlen(coll) > 0) {
+ strcat(coll, ",");
+ }
+ striplt(addr);
+ strcat(coll, addr);
+ }
+ }
+ }
+ }
+
+ if (strlen(coll) == 0) {
+ free(coll);
+ return(NULL);
+ }
+ return(coll);
+}
int CtdlDirectoryLookup(char *target, char *internet_addr, size_t targbuflen);
struct CtdlMessage *convert_internet_message(char *rfc822);
int CtdlHostAlias(char *fqdn);
+char *harvest_collected_addresses(struct CtdlMessage *msg);
/*
* Values that can be returned by CtdlHostAlias()
cprintf(">%s", nl);
if (!is_room_aide() && (TheMessage->cm_anon_type == MES_ANONONLY)) {
- // cprintf("From: x@x.org (----)%s", nl);
cprintf("From: \"----\" <x@x.org>%s", nl);
}
else if (!is_room_aide() && (TheMessage->cm_anon_type == MES_ANONOPT)) {
- // cprintf("From: x@x.org (anonymous)%s", nl);
cprintf("From: \"anonymous\" <x@x.org>%s", nl);
}
else if (strlen(fuser) > 0) {
- // cprintf("From: %s (%s)%s", fuser, luser, nl);
cprintf("From: \"%s\" <%s>%s", luser, fuser, nl);
}
else {
- // cprintf("From: %s@%s (%s)%s", suser, snode, luser, nl);
cprintf("From: \"%s\" <%s@%s>%s", luser, suser, snode, nl);
}
-
-
-
/*
* Save a message to disk and submit it into the delivery system.
*/
char *instr;
struct ser_ret smr;
char *hold_R, *hold_D;
+ char *collected_addresses = NULL;
lprintf(CTDL_DEBUG, "CtdlSubmitMsg() called\n");
if (is_valid_message(msg) == 0) return(-1); /* self check */
CtdlFreeMessage(imsg);
}
+ /*
+ * Any addresses to collect? (FIXME do something with them!!)
+ */
+ collected_addresses = harvest_collected_addresses(msg);
+ if (collected_addresses != NULL) {
+ lprintf(CTDL_DEBUG, "FIXME collected addresses: %s\n", collected_addresses);
+ free(collected_addresses);
+ }
+
return(newmsgid);
}
#define USERCALENDARROOM "Calendar"
#define USERTASKSROOM "Tasks"
#define USERCONTACTSROOM "Contacts"
+#define USERCOLLECTEDROOM "Collected Addresses"
#define USERNOTESROOM "Notes"
#define PAGELOGROOM "Sent/Received Pages"
#define SYSCONFIGROOM "Local System Configuration"