diff --git a/imapclient/util.py b/imapclient/util.py
index 923961c..3314ea5 100644
--- a/imapclient/util.py
+++ b/imapclient/util.py
@@ -4,12 +4,22 @@
 
 from __future__ import unicode_literals
 
+import logging
 from six import binary_type, text_type
 
+logger = logging.getLogger(__name__)
+
 
 def to_unicode(s):
     if isinstance(s, binary_type):
-        return s.decode('ascii')
+        try:
+            return s.decode('ascii')
+        except UnicodeDecodeError:
+            logger.warning(
+                "An error occurred while decoding %s in ASCII 'strict' mode. Fallback to "
+                "'ignore' errors handling, some characters might have been stripped", s
+            )
+            return s.decode('ascii', 'ignore')
     return s
 
 

diff --git a/tests/test_response_parser.py b/tests/test_response_parser.py
index 82af1d3..01f2222 100644
--- a/tests/test_response_parser.py
+++ b/tests/test_response_parser.py
@@ -9,6 +9,7 @@ Unit tests for the FetchTokeniser and FetchParser classes
 from __future__ import unicode_literals
 
 from datetime import datetime
+from mock import patch
 
 from imapclient.datetime_util import datetime_to_native
 from imapclient.fixed_offset import FixedOffset
@@ -497,6 +498,14 @@ class TestParseFetchResponse(unittest.TestCase):
         self.assertEqual(str(Address(None, None, None, "undisclosed-recipients")),
                          "undisclosed-recipients")
 
+    @patch('imapclient.util.logger')
+    def test_Address_str_ignores_encoding_error(self, mock_logger):
+        self.assertEqual(
+            str(Address(b'Russian \xc2\xeb\xe0\xe4\xe8\xec\xe8\xf0', None, b"g\xe9rard", "domain.org")),
+            "Russian  <grard@domain.org>"
+        )
+        # Ensure warning has been triggered twice, for name and mailbox bytes
+        self.assertEqual(mock_logger.warning.call_count, 2)
 
 
 def add_crlf(text):

`_convert_to_ENVELOPE` (and subcall to `util.to_unicode`) only support ascii data
When using `fetch(uids, ['ENVELOPE'])`, we get a `imapclient.response_types.Envelope` namedtuple. However, this object may result in subcomponent that call `imapclient.util.to_unicode`. However this methods, decode bytes data only with the ascii codec.

For some reasons, some senders does not encode the data before sending the e-mail, resulting in object like this...

```In [5]: addr = Address(b'Ren\xe9', None, 'rene', 'domain.com')
In [6]: str(addr)
---------------------------------------------------------------------------
/dir/to/imapclient/response_types.py in __str__(self)
     56     def __str__(self):
     57         return formataddr((
---> 58             to_unicode(self.name),
     59             to_unicode(self.mailbox) + '@' + to_unicode(self.host)))
     60 

/dir/to/imapclient/util.py in to_unicode(s)
     10 def to_unicode(s):
     11     if isinstance(s, binary_type):
---> 12         return s.decode('ascii')
     13     return s
     14 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 3: ordinal not in range(128)
```

I think `imapclient` should handle this and either raise a proper custom exception which informs the developer why the data is incorrect or decode the data (using latin1 codec in this case), if possible...
tests/test_response_parser.py::TestParseFetchResponse::test_Address_str_ignores_encoding_error
tests/test_response_parser.py::TestParseFetchResponse::test_mixed_types tests/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_invalid_date tests/test_response_parser.py::TestParseFetchResponse::test_bad_UID tests/test_response_parser.py::TestParseFetchResponse::test_not_uid_is_key tests/test_response_parser.py::TestParseFetchResponse::test_literals_and_keys_with_square_brackets tests/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_no_date tests/test_response_parser.py::TestParseFetchResponse::test_basic tests/test_response_parser.py::TestParseFetchResponse::test_multiple_messages tests/test_response_parser.py::TestParseFetchResponse::test_odd_pairs tests/test_response_parser.py::TestParseFetchResponse::test_none_special_case tests/test_response_parser.py::TestParseFetchResponse::test_FLAGS tests/test_response_parser.py::TestParseFetchResponse::test_bad_msgid tests/test_response_parser.py::TestParseFetchResponse::test_INTERNALDATE tests/test_response_parser.py::TestParseFetchResponse::test_BODY tests/test_response_parser.py::TestParseFetchResponse::test_simple_pairs tests/test_response_parser.py::TestParseFetchResponse::test_BODY_HEADER_FIELDS tests/test_response_parser.py::TestParseFetchResponse::test_INTERNALDATE_normalised tests/test_response_parser.py::TestParseFetchResponse::test_Address_str tests/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE_with_empty_addresses tests/test_response_parser.py::TestParseFetchResponse::test_literals tests/test_response_parser.py::TestParseFetchResponse::test_same_message_appearing_multiple_times tests/test_response_parser.py::TestParseFetchResponse::test_BODYSTRUCTURE tests/test_response_parser.py::TestParseFetchResponse::test_ENVELOPE tests/test_response_parser.py::TestParseFetchResponse::test_UID tests/test_response_parser.py::TestParseFetchResponse::test_bad_data tests/test_response_parser.py::TestParseFetchResponse::test_partial_fetch tests/test_response_parser.py::TestParseFetchResponse::test_missing_data tests/test_response_parser.py::TestParseResponse::test_incomplete_tuple tests/test_response_parser.py::TestParseResponse::test_nil tests/test_response_parser.py::TestParseResponse::test_square_brackets tests/test_response_parser.py::TestParseResponse::test_literal tests/test_response_parser.py::TestParseResponse::test_string tests/test_response_parser.py::TestParseResponse::test_quoted_specials tests/test_response_parser.py::TestParseResponse::test_tuple tests/test_response_parser.py::TestParseResponse::test_int tests/test_response_parser.py::TestParseResponse::test_bad_quoting tests/test_response_parser.py::TestParseResponse::test_nested_tuple tests/test_response_parser.py::TestParseResponse::test_empty_tuple tests/test_response_parser.py::TestParseResponse::test_bad_literal tests/test_response_parser.py::TestParseResponse::test_envelopey tests/test_response_parser.py::TestParseResponse::test_envelopey_quoted tests/test_response_parser.py::TestParseResponse::test_int_and_tuple tests/test_response_parser.py::TestParseResponse::test_complex_mixed tests/test_response_parser.py::TestParseResponse::test_literal_with_more tests/test_response_parser.py::TestParseResponse::test_deeper_nest_tuple tests/test_response_parser.py::TestParseResponse::test_unquoted tests/test_response_parser.py::TestParseMessageList::test_one_id tests/test_response_parser.py::TestParseMessageList::test_modseq_interleaved tests/test_response_parser.py::TestParseMessageList::test_modseq_no_space tests/test_response_parser.py::TestParseMessageList::test_basic tests/test_response_parser.py::TestParseMessageList::test_modseq