}
return FALSE;
}
+
+void message_detail_address_parse(const char *delimiters, const char *address,
+ const char **username_r, char *delim_r,
+ const char **detail_r)
+{
+ const char *p, *domain;
+ size_t idx;
+
+ *username_r = address;
+ *detail_r = "";
+ *delim_r = '\0';
+
+ domain = strchr(address, '@');
+ /* first character that matches the recipient_delimiter */
+ idx = strcspn(address, delimiters);
+ p = address[idx] != '\0' ? address + idx : NULL;
+
+ if (p != NULL && (domain == NULL || p < domain)) {
+ *delim_r = *p;
+ /* user+detail@domain */
+ *username_r = t_strdup_until(*username_r, p);
+ if (domain == NULL)
+ *detail_r = p+1;
+ else {
+ *detail_r = t_strdup_until(p+1, domain);
+ *username_r = t_strconcat(*username_r, domain, NULL);
+ }
+ }
+}
+
/* Returns TRUE if header is known to be an address */
bool message_header_is_address(const char *hdr_name);
+/* Parse address+detail@domain into address@domain and detail
+ using given delimiters. Returns used delimiter. */
+void message_detail_address_parse(const char *delimiters, const char *address,
+ const char **username_r, char *delim_r,
+ const char **detail_r);
+
#endif