Current section

19 Versions

Jump to

Compare versions

5 files changed
+143 additions
-56 deletions
  @@ -20,5 +20,5 @@
20 20 {<<"zotonic_core">>,
21 21 [{<<"app">>,<<"zotonic_core">>},
22 22 {<<"optional">>,false},
23 - {<<"requirement">>,<<"1.0.0-rc.1">>}]}]}.
24 - {<<"version">>,<<"1.0.0-rc.1">>}.
23 + {<<"requirement">>,<<"1.0.0-rc.2">>}]}]}.
24 + {<<"version">>,<<"1.0.0-rc.2">>}.
  @@ -9,7 +9,7 @@
9 9
10 10 {deps,
11 11 [
12 - {zotonic_core, "1.0.0-rc.1"},
12 + {zotonic_core, "1.0.0-rc.2"},
13 13 {gen_smtp, "1.1.1"}
14 14 ]
15 15 }.
  @@ -6,7 +6,7 @@
6 6 {<<"cf">>,{pkg,<<"cf">>,<<"0.3.1">>},2},
7 7 {<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.9.0">>},2},
8 8 {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.11.0">>},2},
9 - {<<"cowmachine">>,{pkg,<<"cowmachine">>,<<"1.8.0">>},1},
9 + {<<"cowmachine">>,{pkg,<<"cowmachine">>,<<"1.8.2">>},1},
10 10 {<<"depcache">>,{pkg,<<"depcache">>,<<"1.7.1">>},1},
11 11 {<<"dh_date">>,{pkg,<<"dh_date">>,<<"1.0.0">>},1},
12 12 {<<"diffy">>,{pkg,<<"diffy">>,<<"1.1.2">>},1},
  @@ -43,7 +43,7 @@
43 43 {<<"qdate_localtime">>,{pkg,<<"qdate_localtime">>,<<"1.2.0">>},1},
44 44 {<<"ranch">>,{pkg,<<"ranch">>,<<"2.1.0">>},1},
45 45 {<<"recon">>,{pkg,<<"recon">>,<<"2.5.2">>},1},
46 - {<<"ringbuffer">>,{pkg,<<"ringbuffer">>,<<"1.1.1">>},1},
46 + {<<"ringbuffer">>,{pkg,<<"ringbuffer">>,<<"1.2.0">>},1},
47 47 {<<"router">>,{pkg,<<"router">>,<<"1.0.4">>},2},
48 48 {<<"s3filez">>,{pkg,<<"s3filez">>,<<"1.2.0">>},1},
49 49 {<<"setup">>,{pkg,<<"setup">>,<<"2.1.0">>},1},
  @@ -54,17 +54,17 @@
54 54 {pkg,<<"tls_certificate_check">>,<<"1.11.0">>},
55 55 1},
56 56 {<<"yamerl">>,{pkg,<<"yamerl">>,<<"0.8.1">>},1},
57 - {<<"zotonic_core">>,{pkg,<<"zotonic_core">>,<<"1.0.0-rc.1">>},0},
57 + {<<"zotonic_core">>,{pkg,<<"zotonic_core">>,<<"1.0.0-rc.2">>},0},
58 58 {<<"zotonic_filehandler">>,
59 - {pkg,<<"zotonic_filehandler">>,<<"1.0.0-rc.1">>},
59 + {pkg,<<"zotonic_filehandler">>,<<"1.0.0-rc.2">>},
60 60 1},
61 61 {<<"zotonic_fileindexer">>,
62 - {pkg,<<"zotonic_fileindexer">>,<<"1.0.0-rc.1">>},
62 + {pkg,<<"zotonic_fileindexer">>,<<"1.0.0-rc.2">>},
63 63 1},
64 64 {<<"zotonic_filewatcher">>,
65 - {pkg,<<"zotonic_filewatcher">>,<<"1.0.0-rc.1">>},
65 + {pkg,<<"zotonic_filewatcher">>,<<"1.0.0-rc.2">>},
66 66 1},
67 - {<<"zotonic_notifier">>,{pkg,<<"zotonic_notifier">>,<<"1.0.0-rc.1">>},1},
67 + {<<"zotonic_notifier">>,{pkg,<<"zotonic_notifier">>,<<"1.0.0-rc.2">>},1},
68 68 {<<"zotonic_rdf">>,{pkg,<<"zotonic_rdf">>,<<"1.0.1">>},1},
69 69 {<<"zotonic_ssl">>,{pkg,<<"zotonic_ssl">>,<<"1.1.0">>},1},
70 70 {<<"zotonic_stdlib">>,{pkg,<<"zotonic_stdlib">>,<<"1.6.0">>},1}]}.
  @@ -77,7 +77,7 @@
77 77 {<<"cf">>, <<"5CB902239476E141EA70A740340233782D363A31EEA8AD37049561542E6CD641">>},
78 78 {<<"cowboy">>, <<"865DD8B6607E14CF03282E10E934023A1BD8BE6F6BACF921A7E2A96D800CD452">>},
79 79 {<<"cowlib">>, <<"0B9FF9C346629256C42EBE1EEB769A83C6CB771A6EE5960BD110AB0B9B872063">>},
80 - {<<"cowmachine">>, <<"38F40D72B04D89F05208646439A612B4E40693F23332B31496C7BD737528CC8A">>},
80 + {<<"cowmachine">>, <<"75C97EC0C9D02D74EAA906FC338C7947596E40A4CEAB8D33AC28CB37D31DC0B4">>},
81 81 {<<"depcache">>, <<"BB85FDD459FAF1374773EDA4249D2C1F037A32C509AC1E1C89654CAB3D4CC233">>},
82 82 {<<"dh_date">>, <<"5B0C286665E160DE44132552931BEF06B5CB2244D5BD20E333A686E9D8BF92E3">>},
83 83 {<<"diffy">>, <<"7060E34FD512F210056B7E66E8D315CB90D06B97A6656D92FC299EB91692E36E">>},
  @@ -114,7 +114,7 @@
114 114 {<<"qdate_localtime">>, <<"644ADE4C7F7EAC765E2048DFA714D78EA86BAF5255FE46279B2EAC5729760A07">>},
115 115 {<<"ranch">>, <<"2261F9ED9574DCFCC444106B9F6DA155E6E540B2F82BA3D42B339B93673B72A3">>},
116 116 {<<"recon">>, <<"CBA53FA8DB83AD968C9A652E09C3ED7DDCC4DA434F27C3EAA9CA47FFB2B1FF03">>},
117 - {<<"ringbuffer">>, <<"BD33D3B091EB6E1DE6AB337AEA0B2676B1F2554C9DEC7D6C70D5A9E8F710FDC0">>},
117 + {<<"ringbuffer">>, <<"A64CBAED172B0D75998732F09CDADDC289438E92DA8CB2849FE71D4F87A8F654">>},
118 118 {<<"router">>, <<"E9311B9D296B41C9484FC933EFD847F87E7DCBAD94DEE1566FB77570CA59EF2C">>},
119 119 {<<"s3filez">>, <<"86533C4A36820134279118FA53CC9CB84FDC3DE4A072181D91DD2E1BABDED1DF">>},
120 120 {<<"setup">>, <<"05F69185A5EB71474C9BC6BA892565651EC7507791F85632B7B914DBFE130510">>},
  @@ -123,11 +123,11 @@
123 123 {<<"template_compiler">>, <<"DF70959D64AD5B541891D35C2E304E9D16859078183F54B2CE9224ECF1AB7A7E">>},
124 124 {<<"tls_certificate_check">>, <<"609DCD503F31170F0799DAC380EB0E086388CF918FC769AAA60DDD6BBF575218">>},
125 125 {<<"yamerl">>, <<"07DA13FFA1D8E13948943789665C62CCD679DFA7B324A4A2ED3149DF17F453A4">>},
126 - {<<"zotonic_core">>, <<"8D5FB41B6B38C8CBC07D7E1CAC1502150D1E5DC9BC9154BE651DA9AFE6397AFB">>},
127 - {<<"zotonic_filehandler">>, <<"705E09CBA10CF98E3231BFC2230F31C7813A06250127EBE04E2668A4CDC517F0">>},
128 - {<<"zotonic_fileindexer">>, <<"025A825A2368AC369633D0E3BB39BEA4D24E98013CC387BB2BCBDAA157FC6F0C">>},
129 - {<<"zotonic_filewatcher">>, <<"B21660D738FBC9903B5D678F974E6A960BF8511A877F140FEF5D9483A57A1244">>},
130 - {<<"zotonic_notifier">>, <<"00638E6685EB3EC02AE9E1E79A1C9694914400EB85F80F3D96161F2786CA7FD6">>},
126 + {<<"zotonic_core">>, <<"922F77F067C85BF79E49353491251EA0F6144F304526D280C78A9EB7EF1E0356">>},
127 + {<<"zotonic_filehandler">>, <<"1D10CAC854061D9211F86990E43194831768B52C9C67DE8CBA60BD9C4AE36959">>},
128 + {<<"zotonic_fileindexer">>, <<"FD1AA4F226956D4E4341D452CC627F370584240501BF8E03568E0C7237CFE496">>},
129 + {<<"zotonic_filewatcher">>, <<"2FC2465E57F2AE19B7DE9B2BEAFE8236F1628CF7A6AA527882533997D0E1C603">>},
130 + {<<"zotonic_notifier">>, <<"6B293A5E356D4CE848F025DEF5EC10AFA3CB2BF8ECDE8065CE0E6A4A661ABD3C">>},
131 131 {<<"zotonic_rdf">>, <<"D0E72A13D179549E6520BFCCFFD25F4C93533098698EE77F73CFE5778345D708">>},
132 132 {<<"zotonic_ssl">>, <<"16A96C8B9597F977EC12B179CB2ED6C635674BB1BA7CEC24C5999191C3C95BDD">>},
133 133 {<<"zotonic_stdlib">>, <<"872E85BD2DC8A49A4DA255E4DF6C1B4DDC993E59024D02303BD6A5DF0868859B">>}]},
  @@ -139,7 +139,7 @@
139 139 {<<"cf">>, <<"315E8D447D3A4B02BCDBFA397AD03BBB988A6E0AA6F44D3ADD0F4E3C3BF97672">>},
140 140 {<<"cowboy">>, <<"2C729F934B4E1AA149AFF882F57C6372C15399A20D54F65C8D67BEF583021BDE">>},
141 141 {<<"cowlib">>, <<"2B3E9DA0B21C4565751A6D4901C20D1B4CC25CBB7FD50D91D2AB6DD287BC86A9">>},
142 - {<<"cowmachine">>, <<"4CD30738036285071DFBA1FC0CAE87DA9FB269925F81BDD25E49E75E7FB8F828">>},
142 + {<<"cowmachine">>, <<"7CB87D27D6532BBD213CF5A43FD889B08B03D718F6F176A3876FA22DD0D91129">>},
143 143 {<<"depcache">>, <<"40A441A5B1B8E322263C4E6EF35A7D5BC75D080E7A4AAB0D02BCE6059DF53BC1">>},
144 144 {<<"dh_date">>, <<"3F5D908383A0243A693147EA85A5654769B90078AC999A076ED6F0917F7614CF">>},
145 145 {<<"diffy">>, <<"9A59BBDCAFB6B115B5099711F7F114EDB00BE11658CEF08EF26E04F8040C7149">>},
  @@ -176,7 +176,7 @@
176 176 {<<"qdate_localtime">>, <<"98A538A5B6046B8652DFC5630B030D0414A1B31D0130C81FA6B88B5C1E625109">>},
177 177 {<<"ranch">>, <<"244EE3FA2A6175270D8E1FC59024FD9DBC76294A321057DE8F803B1479E76916">>},
178 178 {<<"recon">>, <<"2C7523C8DEE91DFF41F6B3D63CBA2BD49EB6D2FE5BF1EEC0DF7F87EB5E230E1C">>},
179 - {<<"ringbuffer">>, <<"E94020F8F5ADDDCF8AF87685FC97F90E33A48AF698C84A72E3239CF3BBDA37C2">>},
179 + {<<"ringbuffer">>, <<"D3E575FD919751E80B4DF275C6A4710E394F998EDDD9281B4FC202DAD6C1E299">>},
180 180 {<<"router">>, <<"C9F939968F8D8BCBEB03087829693E5BEEA6BFFD14A9717200FB57522A141838">>},
181 181 {<<"s3filez">>, <<"2BF3BDFCED356C8581029D70385970F969CACB102AE179DDFFAAAF9B448D1F36">>},
182 182 {<<"setup">>, <<"EFD072578F0CF85BEA96CAAFFC7ADB0992398272522660A136E10567377071C5">>},
  @@ -185,11 +185,11 @@
185 185 {<<"template_compiler">>, <<"7FFBA8312987BFB118248B7542EFFC15999DA06F3D48E7D7F211CA8D85FF71C8">>},
186 186 {<<"tls_certificate_check">>, <<"4AB962212EF7C87482619CB298E1FE06E047B57F0BD58CC417B3B299EB8D036E">>},
187 187 {<<"yamerl">>, <<"96CB30F9D64344FED0EF8A92E9F16F207DE6C04DFFF4F366752CA79F5BCEB23F">>},
188 - {<<"zotonic_core">>, <<"43EB3734A4169B34F2976B80BAF6D01BE7215791EB1F1B5F2EFC762E74674ADE">>},
189 - {<<"zotonic_filehandler">>, <<"9677AF0F80D6E1CDC6A641C280DCC87C6516ACDC813E694495422136524989B2">>},
190 - {<<"zotonic_fileindexer">>, <<"D807B097A5B2415F0C818314D5F2271FF1D0D79AB023C90AD4FC1EA7B2B88CD7">>},
191 - {<<"zotonic_filewatcher">>, <<"396D81D8B634473414BD775DE37A937B4220FB808A1E052A9D8A963C6903E4E1">>},
192 - {<<"zotonic_notifier">>, <<"657F891004C2C518B96C4373EE00711E50955D8AA80E8322B719F5840971138E">>},
188 + {<<"zotonic_core">>, <<"44AA1883D8573AAEDC580ACCC19822914F1F0C1A6850F52B6DB97C66294379A5">>},
189 + {<<"zotonic_filehandler">>, <<"3852C69DE6A78F8EEAC884A07D855FEFD4893A9867EA81C4F0F104357523A7A3">>},
190 + {<<"zotonic_fileindexer">>, <<"2315FFCC3FD6160BF5FCF53C472095B30864C5698085CB89C3819FA5485B0B9D">>},
191 + {<<"zotonic_filewatcher">>, <<"D44454471A64E0B88EEBF9AA81125F90DA80BBC775DCF791C1A5D035235BDFCF">>},
192 + {<<"zotonic_notifier">>, <<"9D787E6F0A1A319C8B25A4BFB3A4FEEA4CA1D1F21D6F479AAE88B7399A81B4A1">>},
193 193 {<<"zotonic_rdf">>, <<"096C1E2E16582FE3F6253534068D22B39F246D84C01237C42A8B489B42BB7A16">>},
194 194 {<<"zotonic_ssl">>, <<"FC8193CFA273956C2669F448102DD7A4F0E4AA8E3C81FA7EB46114911146CF4C">>},
195 195 {<<"zotonic_stdlib">>, <<"9139167866615F226C3915B6082B317892E276F3A9C78C5A99CD497FA589444E">>}]}
  @@ -1,6 +1,6 @@
1 1 {application,zotonic_listen_smtp,
2 2 [{description,"Zotonic SMTP Listener"},
3 - {vsn,"1.0.0-rc.1"},
3 + {vsn,"1.0.0-rc.2"},
4 4 {registered,[]},
5 5 {applications,[kernel,stdlib,gen_smtp,zotonic_core]},
6 6 {env,[]},
  @@ -42,14 +42,25 @@
42 42 from :: binary() | undefined
43 43 }).
44 44
45 + -define(SESSION_LIMIT, 20).
45 46
46 47 child_spec() ->
47 48 case {z_config:get(smtp_listen_ip),z_config:get(smtp_listen_port)} of
48 - {none, _} ->
49 - ?LOG_WARNING("SMTP server disabled: 'smtp_listen_ip' is set to 'none'"),
49 + {none, Port} ->
50 + ?LOG_WARNING(#{
51 + text => "SMTP server disabled: 'smtp_listen_ip' is set to 'none'",
52 + ip => none,
53 + port => Port,
54 + protocol => smtp
55 + }),
50 56 ignore;
51 - {_, none} ->
52 - ?LOG_WARNING("SMTP server disabled: 'smtp_listen_port' is set to 'none'"),
57 + {IP, none} ->
58 + ?LOG_WARNING(#{
59 + text => "SMTP server disabled: 'smtp_listen_port' is set to 'none'",
60 + ip => ip_to_string(IP),
61 + port => none,
62 + protocol => smtp
63 + }),
53 64 ignore;
54 65 {IP, Port} ->
55 66 Args1 = case z_config:get(smtp_listen_domain) of
  @@ -62,29 +73,41 @@ child_spec() ->
62 73 _ when is_tuple(IP) ->
63 74 [{address, IP} | Args1]
64 75 end,
65 - case IP of
66 - any -> ?LOG_NOTICE("SMTP server listening on any:~p", [Port]);
67 - _ -> ?LOG_NOTICE("SMTP server listening on ~s:~p", [inet:ntoa(IP), Port])
68 - end,
76 + ?LOG_NOTICE(#{
77 + text => "SMTP server listening",
78 + ip => ip_to_string(IP),
79 + port => Port,
80 + protocol => smtp
81 + }),
69 82 Options = [{port, Port} | Args2],
70 83 gen_smtp_server:child_spec(?MODULE, ?MODULE, Options)
71 84 end.
72 85
86 + ip_to_string(any) -> "any";
87 + ip_to_string(IP) -> inet:ntoa(IP).
73 88
74 - -spec init(Hostname :: atom() | string(), SessionCount :: non_neg_integer(), PeerName :: tuple(), Options :: list()) -> {'ok', iodata(), #state{}} | {'stop', any(), iodata()}.
75 - init(Hostname, SessionCount, PeerName, Options) ->
89 +
90 + -spec init(Hostname :: atom() | string(), SessionCount :: non_neg_integer(), Peer :: tuple(), Options :: list()) -> {'ok', iodata(), #state{}} | {'stop', any(), iodata()}.
91 + init(Hostname, SessionCount, Peer, Options) ->
76 92 HostnameB = z_convert:to_binary(Hostname),
77 - case SessionCount > 20 of
93 + case SessionCount > ?SESSION_LIMIT of
78 94 false ->
79 95 State = #state{
80 96 options = Options,
81 - peer = PeerName,
97 + peer = Peer,
82 98 hostname = HostnameB,
83 99 banner = iolist_to_binary( io_lib:format("~s ESMTP Zotonic", [HostnameB]) )
84 100 },
85 101 {ok, State#state.banner, State};
86 102 true ->
87 - ?LOG_WARNING("SMTP Connection limit exceeded (~p)", [SessionCount]),
103 + ?LOG_WARNING(#{
104 + text => "SMTP Connection limit exceeded",
105 + limit => ?SESSION_LIMIT,
106 + session_count => SessionCount,
107 + src => inet:ntoa(Peer),
108 + hostname => Hostname,
109 + protocol => smtp
110 + }),
88 111 {stop, normal, io_lib:format("421 ~s is too busy to accept mail right now", [Hostname])}
89 112 end.
90 113
  @@ -121,8 +144,12 @@ check_dnsbl(State) ->
121 144 {ok, allowed} ->
122 145 {ok, State};
123 146 {ok, {blocked, Service}} ->
124 - ?LOG_NOTICE("SMTP DNSBL check for ~s blocked by ~p -- closing connection with a 451",
125 - [inet:ntoa(State#state.peer), Service]),
147 + ?LOG_NOTICE(#{
148 + text => "SMTP DNSBL check: blocked -- closing connection with a 451",
149 + src => inet:ntoa(State#state.peer),
150 + dnsbl => Service,
151 + protocol => smtp
152 + }),
126 153 Error = io_lib:format("451 ~s has recently sent spam. If you are not a spammer, please try later. Listed at ~s",
127 154 [inet:ntoa(State#state.peer), Service]),
128 155 {error, Error, State}
  @@ -141,14 +168,32 @@ handle_RCPT(To, State) ->
141 168 % - To = <noreply+MSGID@example.org>
142 169 % - Return-Path header should be present and contains <>
143 170 case zotonic_listen_smtp_receive:get_site(To) of
144 - {ok, _} ->
145 - ?LOG_NOTICE("SMTP accepting incoming email for ~p", [To]),
171 + {ok, Site} ->
172 + ?LOG_INFO(#{
173 + text => "SMTP accepting incoming email",
174 + recipient => To,
175 + site => Site,
176 + src => inet:ntoa(State#state.peer),
177 + protocol => smtp
178 + }),
146 179 {ok, State};
147 180 {error, unknown_host} ->
148 - ?LOG_WARNING("SMTP not accepting mail for ~p: unknown host", [To]),
181 + ?LOG_WARNING(#{
182 + text => "SMTP not accepting mail",
183 + reason => unknown_host,
184 + recipient => To,
185 + src => inet:ntoa(State#state.peer),
186 + protocol => smtp
187 + }),
149 188 {error, "551 User not local. Relay denied.", State};
150 189 {error, not_running} ->
151 - ?LOG_WARNING("SMTP not accepting mail for ~p: site not running", [To]),
190 + ?LOG_WARNING(#{
191 + text => "SMTP not accepting mail for site",
192 + reason => not_running,
193 + recipient => To,
194 + src => inet:ntoa(State#state.peer),
195 + protocol => smtp
196 + }),
152 197 {error, "453 System not accepting network messages.", State}
153 198 % {error, Reason} ->
154 199 % ?LOG_INFO("SMTP not accepting mail for ~p: ~p", [Reason]),
  @@ -200,8 +245,14 @@ decode_and_receive(MsgId, From, To, DataRcvd, State) ->
200 245 {ok, {Type, Subtype, Headers, _Params, Body} = Decoded} ->
201 246 case find_bounce_id({Type, Subtype}, To, Headers) of
202 247 {ok, MessageId} ->
203 - ?LOG_NOTICE("SMTP email to ~p is bounce of message id ~p",
204 - [ To, MessageId ]),
248 + ?LOG_NOTICE(#{
249 + text => "SMTP email is bounce of previous message id",
250 + recipient => To,
251 + from => From,
252 + message_id => MessageId,
253 + src => inet:ntoa(State#state.peer),
254 + protocol => smtp
255 + }),
205 256 % The e-mail server knows about the messages sent from our system.
206 257 % Only report fatal bounces, silently ignore delivery warnings
207 258 case zotonic_listen_smtp_check:is_nonfatal_bounce({Type, Subtype}, Headers, Body) of
  @@ -211,35 +262,71 @@ decode_and_receive(MsgId, From, To, DataRcvd, State) ->
211 262 {ok, MsgId, reset_state(State)};
212 263 bounce ->
213 264 % Bounced, but without a message id (accept & silently drop the message)
214 - ?LOG_NOTICE("SMTP email to ~p is bounce of unknown message id",
215 - [ To ]),
265 + ?LOG_NOTICE(#{
266 + text => "SMTP email is bounce of unknown message id",
267 + recipient => To,
268 + from => From,
269 + src => inet:ntoa(State#state.peer),
270 + protocol => smtp
271 + }),
216 272 {ok, MsgId, reset_state(State)};
217 273 maybe_autoreply ->
218 274 % Sent to a bounce address, but not a bounce (accept & silently drop the message)
219 - ?LOG_NOTICE("SMTP email to ~p is an autoreply, ignored",
220 - [ To ]),
275 + ?LOG_NOTICE(#{
276 + text => "SMTP email is an autoreply, ignored",
277 + recipient => To,
278 + from => From,
279 + src => inet:ntoa(State#state.peer),
280 + protocol => smtp
281 + }),
221 282 {ok, MsgId, reset_state(State)};
222 283 no_bounce ->
223 284 receive_data(zotonic_listen_smtp_spam:spam_check(DataRcvd),
224 285 Decoded, MsgId, From, To, DataRcvd, State)
225 286 end;
226 287 {error, Reason} ->
227 - ?LOG_ERROR("SMTP receive: Message decode FAILED with ~p", [Reason]),
288 + ?LOG_ERROR(#{
289 + text => "SMTP receive: Message decode FAILED",
290 + reason => Reason,
291 + recipient => To,
292 + from => From,
293 + src => inet:ntoa(State#state.peer),
294 + protocol => smtp
295 + }),
228 296 {error, "550 Your email cannot be parsed", State}
229 297 end.
230 298
231 299 receive_data({ok, {ham, SpamStatus, _SpamHeaders}}, {Type, Subtype, Headers, Params, Body}, MsgId, From, To, DataRcvd, State) ->
232 - ?LOG_NOTICE("SMTP email from ~s to ~p (id ~s) (peer ~s) [~p]",
233 - [From, To, MsgId, inet_parse:ntoa(State#state.peer), SpamStatus]),
300 + ?LOG_NOTICE(#{
301 + text => "SMTP email received",
302 + recipient => To,
303 + from => From,
304 + message_id => MsgId,
305 + src => inet:ntoa(State#state.peer),
306 + spam_status => SpamStatus
307 + }),
234 308 Received = zotonic_listen_smtp_receive:received(To, From, State#state.peer, MsgId,
235 309 {Type, Subtype}, Headers, Params, Body, DataRcvd),
236 310 reply_handled_status(Received, MsgId, reset_state(State));
237 311 receive_data({ok, {spam, SpamStatus, _SpamHeaders}}, _Decoded, MsgId, From, To, _DataRcvd, State) ->
238 - ?LOG_NOTICE("Refusing spam from ~s to ~p (id ~s) (peer ~s) [~p]",
239 - [From, To, MsgId, inet_parse:ntoa(State#state.peer), SpamStatus]),
312 + ?LOG_NOTICE(#{
313 + text => "SMTP Refusing spam",
314 + recipient => To,
315 + from => From,
316 + message_id => MsgId,
317 + src => inet:ntoa(State#state.peer),
318 + spam_status => SpamStatus
319 + }),
240 320 {error, zotonic_listen_smtp_spam:smtp_status(SpamStatus, From, To, State#state.peer), reset_state(State)};
241 321 receive_data({error, Reason}, Decoded, MsgId, From, To, DataRcvd, State) ->
242 - ?LOG_NOTICE("SMTP receive: passing erronous spam check (~p) as ham for msg-id ~p", [Reason, MsgId]),
322 + ?LOG_WARNING(#{
323 + text => "SMTP receive: passing erronous spam check as ham",
324 + reason => Reason,
325 + recipient => To,
326 + from => From,
327 + message_id => MsgId,
328 + src => inet:ntoa(State#state.peer)
329 + }),
243 330 receive_data({ok, {ham, [], []}}, Decoded, MsgId, From, To, DataRcvd, State).
244 331
245 332 reply_handled_status(Received, MsgId, State) ->