anchor.diff:      %% @todo parse the date
       Envelope = [{date, Date},
                   {subject, Subject},
  -                {from, clean_address(From)},
  -                {sender, clean_address(Sender)},
  -                {replyto, clean_address(ReplyTo)},
  -                {to, clean_address(To)},
  -                {cc, clean_address(Cc)},
  -                {bcc, clean_address(Bcc)},
  -                {inreplyto, clean_address(InReplyTo)},
  +                {from, clean_addresses(From)},
  +                {sender, clean_addresses(Sender)},
  +                {replyto, clean_addresses(ReplyTo)},
  +                {to, clean_addresses(To)},
  +                {cc, clean_addresses(Cc)},
  +                {bcc, clean_addresses(Bcc)},
  +                {inreplyto, clean_addresses(InReplyTo)},
                   {messageid, MessageId}],
  -    clean_fetch(Rest, [{envelope, Envelope} | Acc]).
  +    clean_fetch(Rest, [{envelope, Envelope} | Acc]);
  +clean_fetch([<<"BODY">>, Body | Rest], Acc) ->
  +    clean_fetch(Rest, [{body, Body} | Acc]).
  +
   
   %% @doc clean the provided address
  --spec clean_address([{string, binary()}]) ->
  -    [proplist:property()].
  -clean_address([{string, Name}, {string, _Adl}, {string, MailBox}, {string, Host}]) ->
  -    [{name, Name}, {address, <<MailBox/binary, $@, Host/binary>>}].
  +-spec clean_addresses([[{string, binary()}]]) ->
  +    [address()].
  +clean_addresses(nil) ->
  +    [];
  +clean_addresses(Addresses) ->
  +    clean_addresses(Addresses, []).
  +
  +%% @private
  +-spec clean_addresses([[{string, binary()}]], [address()]) ->
  +    [address()].
  +clean_addresses([], Acc) ->
  +    lists:reverse(Acc);
  +clean_addresses([[RawName, _, {string, MailBox}, {string, Host}] | Rest], Acc) ->
  +    Address = [{email, <<MailBox/binary, $@, Host/binary>>}],
  +    clean_addresses(Rest,
  +                    [{address, case RawName of
  +                                   nil -> Address;
  +                                   {string, Name} -> [{name, Name} | Address]
  +                               end} |
  +                     Acc]).
   
   %%==============================================================================
   %% Response Tokenizing + Parsing
  
positive.code: 
  %% response() is passed into the applicable commands dispatch fun
  -type response() :: {'*' | '+' | 'OK' | 'NO' | 'BAD', imap_term()}.
  
  %% cmd() specifies a valid command that can be issued via call or cast
  -type cmd() :: {login, auth()}
  
negative.code:     [?_assertEqual({[1, 2, 3], {<<>>, none}, {[], []}},
                     decode_line(<<"1 2 3\r\n">>))].
  
  
  -endif.
  