diff --git a/src/lib-sieve/util/rfc2822.c b/src/lib-sieve/util/rfc2822.c index 2bfe388b084c1ef1bddef8000dbcc14be1907d74..98a6aa63124594bee18db209125d3bcbbbe81998 100644 --- a/src/lib-sieve/util/rfc2822.c +++ b/src/lib-sieve/util/rfc2822.c @@ -242,3 +242,23 @@ void rfc2822_header_utf8_printf rfc2822_header_write(header, name, str_c(body)); } + +void rfc2822_header_write_address(string_t *header, + const char *name, const char *address) +{ + bool has_8bit = FALSE; + const char *p; + + for (p = address; *p != '\0'; p++) { + if ((*p & 0x80) != 0) + has_8bit = TRUE; + } + + if (!has_8bit) { + rfc2822_header_write(header, name, address); + } else { + string_t *body = t_str_new(256); + message_header_encode(address, body); + rfc2822_header_write(header, name, str_c(body)); + } +} diff --git a/src/lib-sieve/util/rfc2822.h b/src/lib-sieve/util/rfc2822.h index 5b2d71d248cf4c8cd6ef7626b37d4aefa8604e20..f6cba7b53fc3d69f76c3d9e6c9fad8775a995c5c 100644 --- a/src/lib-sieve/util/rfc2822.h +++ b/src/lib-sieve/util/rfc2822.h @@ -42,4 +42,8 @@ void rfc2822_header_printf void rfc2822_header_utf8_printf (string_t *header, const char *name, const char *fmt, ...) ATTR_FORMAT(3, 4); +void rfc2822_header_write_address(string_t *header, + const char *name, const char *address); + + #endif /* __RFC2822_H */