gotthardp/rabbitmq-email

error if incoming email is empty

Closed this issue · 2 comments

tepsl commented

Empty incoming email results in error.
Blow is rabbitmq server log;

** When Server state == {state,#Port<0.17148>,rabbit_email_handler,
                            {envelope,<<"andrew@hijacked.us">>,
                                [<<"aaa@example.com">>],
                                <<>>,0,
                                {<<>>,<<>>}},
                            [{"SIZE","10485670"},
                             {"8BITMIME",true},
                             {"PIPELINING",true}],
                            false,undefined,true,false,
                            {state,<0.6677.0>,[]},
                            [{hostname,"example.com"},
                             {sessioncount,1}]}
** Reason for termination ==
** {{case_clause,empty},
    [{rabbit_email_handler,handle_DATA,4,
                           [{file,"src/rabbit_email_handler.erl"},{line,96}]},
     {gen_smtp_server_session,handle_info,2,
                              [{file,"rabbitmq-gen-smtp-git/src/gen_smtp_server_session.erl"},
                               {line,184}]},
     {gen_server,try_dispatch,4,[{file,"gen_server.erl"},{line,593}]},
     {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,659}]},
     {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,237}]}]}

This can be avoided by commenting out "do not send empty body" source code lines.

diff --git a/src/rabbit_email_handler.erl b/src/rabbit_email_handler.erl
index 2f85345..3372659 100644
--- a/src/rabbit_email_handler.erl
+++ b/src/rabbit_email_handler.erl
@@ -187,16 +187,17 @@ filter_body({<<"text">>, Subtype, Header, Params, Text}) ->
     Text2 = re:replace(Text, "(^\\s+)|(\\s+$)", "", [global, {return, binary}]),
     % convert DOS to Unix EOL
     Text3 = binary:replace(Text2, <<16#0D, 16#0A>>, <<16#0A>>, [global]),
+    {true, {<<"text">>, Subtype, Header, Params, Text3}};
     % do not send empty body
-    if
-        byte_size(Text3) > 0 ->
-            % rabbit_log:info("Parsing text/~p~n", [Subtype]),
-            {true, {<<"text">>, Subtype, Header, Params, Text3}};
-        Subtype == <<"plain">> ->
-            empty;
-        true ->
-            false
-    end;
+    %if
+    %    byte_size(Text3) > 0 ->
+    %        % rabbit_log:info("Parsing text/~p~n", [Subtype]),
+    %        {true, {<<"text">>, Subtype, Header, Params, Text3}};
+    %    Subtype == <<"plain">> ->
+    %        empty;
+    %    true ->
+    %        false
+    %end;

 % remove proprietary formats
 filter_body({<<"application">>, <<"ms-tnef">>, _H, _A, _P}) -> false;
tepsl commented

'Empty' means empty body.
The email is nothing but headers and CRLF.

Oops, sorry. Fixed by 452d1d6.