Ejemplo n.º 1
0
int writeout(struct header *h, const char *datefmt, 
             unsigned char create_real_name)
{
  int rv = 0;
  ADDRESS *addr, *p;
  time_t timep;
  char timebuf[256];
  char *c;

  if(!h->value)
    return 0;
  
  addr = rfc822_parse_adrlist(NULL, h->value);
  time(&timep);

  rfc2047_decode_adrlist(addr);
  for(p = addr; p; p = p->next)
    {
      if(create_real_name == 1 
         && (!p->personal || !*p->personal)
         && p->mailbox)
        {
          if(p->personal)
            FREE(p->personal);
          p->personal = safe_strdup(p->mailbox);
          c=strchr(p->personal, '@');
          if (c)
            *c='\0';
        }
      if(!p->group && p->mailbox && *p->mailbox && p->personal)
        {
          if(p->personal && strlen(p->personal) > 30)
            strcpy(p->personal + 27, "...");

          if ((c=strchr(p->mailbox,'@')))
            for(c++; *c; c++)
              *c=tolower(*c);

          strftime(timebuf, sizeof(timebuf), datefmt, localtime(&timep));

          if(print_email_only == 1) {
            printf("%s\n", p->mailbox);
          } else {
            printf("%s,%s\n", p->mailbox,
                   p->personal && *p->personal ? p->personal : " ");
          }
          rv = 1;
        }
    }

  rfc822_free_address(&addr);

  return rv;
}
Ejemplo n.º 2
0
static int address_header_decode (char **h)
{
  char *s = *h;
  int l, rp = 0;

  ADDRESS *a = NULL;
  ADDRESS *cur = NULL;

  switch (tolower ((unsigned char) *s))
  {
    case 'r': 
    {
      if (ascii_strncasecmp (s, "return-path:", 12) == 0)
      {
	l = 12;
	rp = 1;
	break;
      }
      else if (ascii_strncasecmp (s, "reply-to:", 9) == 0)
      {
	l = 9;
	break;
      }
      return 0;
    }
    case 'f': 
    {
      if (ascii_strncasecmp (s, "from:", 5)) 
	return 0; 
      l = 5;
      break;
    }
    case 'c':
    {
      if (ascii_strncasecmp (s, "cc:", 3))
	return 0;
      l = 3;
      break;
      
    }
    case 'b':
    {
      if (ascii_strncasecmp (s, "bcc:", 4))
	return 0;
      l = 4;
      break;
    }
    case 's':
    {
      if (ascii_strncasecmp (s, "sender:", 7))
	return 0;
      l = 7;
      break;
    }
    case 't':
    {
      if (ascii_strncasecmp (s, "to:", 3))
	return 0;
      l = 3;
      break;
    }
    case 'm':
    {
      if (ascii_strncasecmp (s, "mail-followup-to:", 17))
	return 0;
      l = 17;
      break;
    }
    default: return 0;    
  }

  if ((a = rfc822_parse_adrlist (a, s + l)) == NULL)
    return 0;
  
  mutt_addrlist_to_local (a);
  rfc2047_decode_adrlist (a);
  for (cur = a; cur; cur = cur->next)
    if (cur->personal)
      rfc822_dequote_comment (cur->personal);

  /* angle brackets for return path are mandated by RfC5322,
   * so leave Return-Path as-is */
  if (rp)
    *h = safe_strdup (s);
  else
  {
    *h = safe_calloc (1, l + 2);
    strfcpy (*h, s, l + 1);
    format_address_header (h, a);
  }

  rfc822_free_address (&a);

  FREE (&s);
  return 1;
}