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 */