diff --git a/imapclient/response_types.py b/imapclient/response_types.py
index ea5d71d..c35dd00 100644
--- a/imapclient/response_types.py
+++ b/imapclient/response_types.py
@@ -80,9 +80,12 @@ class Address(namedtuple("Address", "name route mailbox host")):
     """
 
     def __str__(self):
-        return formataddr((
-            to_unicode(self.name),
-            to_unicode(self.mailbox) + '@' + to_unicode(self.host)))
+        if self.mailbox and self.host:
+            address = to_unicode(self.mailbox) + '@' + to_unicode(self.host)
+        else:
+            address = to_unicode(self.mailbox or self.host)
+
+        return formataddr((to_unicode(self.name), address))
 
 
 class SearchIds(list):

diff --git a/imapclient/test/test_response_parser.py b/imapclient/test/test_response_parser.py
index 3c13534..111188b 100644
--- a/imapclient/test/test_response_parser.py
+++ b/imapclient/test/test_response_parser.py
@@ -491,6 +491,12 @@ class TestParseFetchResponse(unittest.TestCase):
         self.assertEqual(str(Address("Mary Jane", None, "mary", "jane.org")),
                          "Mary Jane <mary@jane.org>")
 
+        self.assertEqual(str(Address("Anonymous", None, "undisclosed-recipients", None)),
+                         "Anonymous <undisclosed-recipients>")
+
+        self.assertEqual(str(Address(None, None, None, "undisclosed-recipients")),
+                         "undisclosed-recipients")
+
 
 
 def add_crlf(text):

Avoid TypeError when using `str` on Address tuple
Some emails have no mailbox or host (e.g. `undisclosed-recipients` case), so when parsing the ENVELOPE of the message using imapclient, we can get something like this:

```
In [8]: from imapclient.response_types import *
In [9]: addr = Address('Anonymous', None, None, 'undisclosed-recipients')
In [10]: str(addr)
---------------------------------------------------------------------------
.../lib/python3.5/site-packages/imapclient/response_types.py in __str__(self)
     57         return formataddr((
     58             to_unicode(self.name),
---> 59             to_unicode(self.mailbox) + '@' + to_unicode(self.host)))
     60 
     61 

TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
```

I think the `__str__` method should handle this and just returning `self.mailbox` or `self.host` if the other part is missing. I could write the PR but I prefer to have thoughs about this before.
imapclient/test/test_response_parser.py::TestParseFetchResponse::test_Address_str
imapclient/test/test_response_parser.py::TestParseResponse::test_bad_literal imapclient/test/test_response_parser.py::TestParseResponse::test_bad_quoting imapclient/test/test_response_parser.py::TestParseResponse::test_complex_mixed imapclient/test/test_response_parser.py::TestParseResponse::test_deeper_nest_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_empty_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_envelopey imapclient/test/test_response_parser.py::TestParseResponse::test_envelopey_quoted imapclient/test/test_response_parser.py::TestParseResponse::test_incomplete_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_int imapclient/test/test_response_parser.py::TestParseResponse::test_int_and_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_literal imapclient/test/test_response_parser.py::TestParseResponse::test_literal_with_more imapclient/test/test_response_parser.py::TestParseResponse::test_nested_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_nil imapclient/test/test_response_parser.py::TestParseResponse::test_quoted_specials imapclient/test/test_response_parser.py::TestParseResponse::test_square_brackets imapclient/test/test_response_parser.py::TestParseResponse::test_string imapclient/test/test_response_parser.py::TestParseResponse::test_tuple imapclient/test/test_response_parser.py::TestParseResponse::test_unquoted imapclient/test/test_response_parser.py::TestParseMessageList::test_basic imapclient/test/test_response_parser.py::TestParseMessageList::test_modseq imapclient/test/test_response_parser.py::TestParseMessageList::test_modseq_interleaved imapclient/test/test_response_parser.py::TestParseMessageList::test_modseq_no_space imapclient/test/test_response_parser.py::TestParseMessageList::test_one_id imapclient/test/test_response_parser.py::TestParseFetchResponse::test_BODY imapclient/test/test_response_parser.py::TestParseFetchResponse::test_BODYSTRUCTURE imapclient/test/test_response_parser.py::TestParseFetchResponse::test_BODY_HEADER_FIELDS imapclient/test/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE imapclient/test/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_empty_addresses imapclient/test/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_invalid_date imapclient/test/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_no_date imapclient/test/test_response_parser.py::TestParseFetchResponse::test_FLAGS imapclient/test/test_response_parser.py::TestParseFetchResponse::test_INTERNALDATE imapclient/test/test_response_parser.py::TestParseFetchResponse::test_INTERNALDATE_normalised imapclient/test/test_response_parser.py::TestParseFetchResponse::test_UID imapclient/test/test_response_parser.py::TestParseFetchResponse::test_bad_UID imapclient/test/test_response_parser.py::TestParseFetchResponse::test_bad_data imapclient/test/test_response_parser.py::TestParseFetchResponse::test_bad_msgid imapclient/test/test_response_parser.py::TestParseFetchResponse::test_basic imapclient/test/test_response_parser.py::TestParseFetchResponse::test_literals imapclient/test/test_response_parser.py::TestParseFetchResponse::test_literals_and_keys_with_square_brackets imapclient/test/test_response_parser.py::TestParseFetchResponse::test_missing_data imapclient/test/test_response_parser.py::TestParseFetchResponse::test_mixed_types imapclient/test/test_response_parser.py::TestParseFetchResponse::test_multiple_messages imapclient/test/test_response_parser.py::TestParseFetchResponse::test_none_special_case imapclient/test/test_response_parser.py::TestParseFetchResponse::test_not_uid_is_key imapclient/test/test_response_parser.py::TestParseFetchResponse::test_odd_pairs imapclient/test/test_response_parser.py::TestParseFetchResponse::test_partial_fetch imapclient/test/test_response_parser.py::TestParseFetchResponse::test_same_message_appearing_multiple_times imapclient/test/test_response_parser.py::TestParseFetchResponse::test_simple_pairs