/* Convert addr to a comma-separated list of email addresses, suitable as an argument to RCPT TO command */ char * address_email_string (mu_address_t addr) { size_t count, i, n, length; char *value, *p; mu_address_get_email_count (addr, &count); length = 0; for (i = 1; i <= count; i++) { const char *str; mu_address_sget_email (recipients, i, &str); length += strlen (str) + 3; } value = malloc (length + 1); if (!value) { mu_error ("%s: not enough memory", progname); return NULL; } p = value; for (i = 1; i <= count; i++) { *p++ = '<'; mu_address_get_email (recipients, i, p, length - (p - value), &n); p += n; *p++ = '>'; if (i + 1 <= count) *p++ = ','; } *p = 0; return value; }
int mu_set_user_email (const char *candidate) { int err = 0; mu_address_t addr = NULL; size_t emailno = 0; char *email = NULL; const char *domain = NULL; if (!candidate) { free (mu_user_email); mu_user_email = NULL; return 0; } if ((err = mu_address_create (&addr, candidate)) != 0) return err; if ((err = mu_address_get_email_count (addr, &emailno)) != 0) goto cleanup; if (emailno != 1) { errno = EINVAL; goto cleanup; } if ((err = mu_address_aget_email (addr, 1, &email)) != 0) goto cleanup; free (mu_user_email); mu_user_email = email; if ((err = mu_address_sget_domain (addr, 1, &domain)) == 0) mu_set_user_email_domain (domain); cleanup: mu_address_destroy (&addr); return err; }