imap-envelope.c revision 470d47a15c02471da1e3799fac5e263d0e377bf2
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina/* Copyright (C) 2002 Timo Sirainen */
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinastatic Rfc822Address *parse_address(Pool pool, const char *value,
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina ret = rfc822_address_parse(pool, t_strndup(value, value_len));
488b455f6b7881ec108a127840b1c1f1523d937fMichal Židekvoid imap_envelope_parse_header(Pool pool, MessagePartEnvelopeData **data,
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina *data = p_new(pool, MessagePartEnvelopeData, 1);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina if (strcasecmp(name, "Date") == 0 && (*data)->date == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->date = imap_quote_value(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Subject") == 0 && (*data)->subject == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->subject = imap_quote_value(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "From") == 0 && (*data)->from == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->from = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Sender") == 0 && (*data)->sender == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->sender = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Reply-To") == 0 && (*data)->reply_to == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->reply_to = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "To") == 0 && (*data)->to == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->to = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Cc") == 0 && (*data)->cc == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->cc = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Bcc") == 0 && (*data)->bcc == NULL)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->bcc = parse_address(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "In-Reply-To") == 0 &&
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->in_reply_to = imap_quote_value(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (strcasecmp(name, "Message-Id") == 0 &&
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina (*data)->message_id = imap_quote_value(pool, value, value_len);
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinastatic void imap_write_address(TempString *str, Rfc822Address *addr)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, imap_quote_str_nil(addr->name));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, imap_quote_str_nil(addr->route));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, imap_quote_str_nil(addr->mailbox));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, imap_quote_str_nil(addr->domain));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinavoid imap_envelope_write_part_data(MessagePartEnvelopeData *data,
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, NVL(data->subject, "NIL"));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina imap_write_address(str, NVL(data->sender, data->from));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina imap_write_address(str, NVL(data->reply_to, data->from));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, NVL(data->in_reply_to, "NIL"));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina t_string_append(str, NVL(data->message_id, "NIL"));
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinaconst char *imap_envelope_get_part_data(MessagePartEnvelopeData *data)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinastatic int imap_address_arg_append(ImapArg *arg, TempString *str, int *in_group)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina /* we require 4 arguments, strings or NILs */
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina for (i = 0; i < 4; i++) {
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina else if (list->args[i].type == IMAP_ARG_STRING)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina /* end of group */
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina /* beginning of group */
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina /* name <@route:mailbox@domain> */
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březinastatic const char *imap_envelope_parse_address(ImapArg *arg)
e157b9f6cb370e1b94bcac2044d26ad66d640fbaPavel Březina if (!imap_address_arg_append(&list->args[i], str, &in_group))
const char *envelope)
const char *value;
return value;
const char *value;
int ret;
return value;