/* %d */ static char * hdr_date (struct header_call_args *args, void *data) { char date[80]; mu_header_t hdr; mu_message_get_header (args->msg, &hdr); date[0] = 0; if (mailvar_get (NULL, "datefield", mailvar_type_boolean, 0) == 0 && mu_header_get_value (hdr, MU_HEADER_DATE, date, sizeof (date), NULL) == 0) { time_t t; if (mu_parse_date (date, &t, NULL) == 0) strftime (date, sizeof(date), "%a %b %e %H:%M", localtime (&t)); else date[0] = 0; } if (date[0] == 0) { const char *p; struct tm tm; mu_timezone tz; mu_envelope_t env; mu_message_get_envelope (args->msg, &env); if (mu_envelope_sget_date (env, &p) == 0 && mu_parse_ctime_date_time (&p, &tm, &tz) == 0) strftime (date, sizeof(date), "%a %b %e %H:%M", &tm); } return header_buf_string (args, date); }
/* There is no POP3 command to return message attributes, therefore we have to recurse to reading the "Status:" header. Unfortunately, some servers remove it when you dowload a message, and in this case a message will always look like new even if you already read it. There is also no way to set an attribute on remote mailbox via the POP server and many server once you do a RETR (and in some cases a TOP) will mark the message as read (Status: RO). Even worse, some servers may be configured to delete after the RETR, and some go as much as deleting after the TOP, since technicaly you can download a message via TOP without RETR'eiving it. */ static int pop_get_attribute (mu_attribute_t attr, int *pflags) { struct _pop3_message *mpm = mu_attribute_get_owner (attr); char hdr_status[64]; mu_header_t header = NULL; if (mpm == NULL || pflags == NULL) return EINVAL; if (!(mpm->flags & _POP3_MSG_ATTRSET)) { hdr_status[0] = '\0'; mu_message_get_header (mpm->message, &header); mu_header_get_value (header, MU_HEADER_STATUS, hdr_status, sizeof hdr_status, NULL); mu_string_to_flags (hdr_status, &mpm->attr_flags); } *pflags = mpm->attr_flags; return 0; }