Commit 0dc379d0705ad786fb1cba66339894712786af46

Authored by Cédric RICARD
1 parent 6741024f

send_mail(): Automatically adding '<' and '>' to sender and recipient emails

Showing 1 changed file with 22 additions and 6 deletions   Show diff stats
calexium_lib/mail/send_mail.anubis
... ... @@ -244,6 +244,20 @@ define Reply_Result
244 244 }.
245 245  
246 246 The same one for 'MAIL FROM':
  247 +
  248 +define String
  249 + check_email_syntax
  250 + (
  251 + String email
  252 + ) =
  253 + if nth(0, email) is
  254 + {
  255 + failure then "<>",
  256 + success(b) then
  257 + if b = '<' then email
  258 + else "<" + email + ">"
  259 + }.
  260 +
247 261  
248 262 define Reply_Result
249 263 send_mail_from
... ... @@ -251,9 +265,10 @@ define Reply_Result
251 265 RWStream conn,
252 266 String sender
253 267 ) =
254   - if smtp_send_line(conn,"MAIL FROM:"+sender) is
  268 + with rfc_sender = check_email_syntax(sender),
  269 + if smtp_send_line(conn,"MAIL FROM:"+rfc_sender) is
255 270 {
256   - failure then logError(send_mail_log, "error sending 'MAIL FROM:" + sender + "'"); error,
  271 + failure then logError(send_mail_log, "error sending 'MAIL FROM:" + rfc_sender + "'"); error,
257 272 success(_) then receive_reply(conn)
258 273 }.
259 274  
... ... @@ -263,11 +278,12 @@ define Reply_Result
263 278 send_recipient
264 279 (
265 280 RWStream conn,
266   - String recipient,
  281 + String recipient,
267 282 ) =
268   - if smtp_send_line(conn,"RCPT TO:<"+recipient+">") is
  283 + with rfc_recipient = check_email_syntax(recipient),
  284 + if smtp_send_line(conn,"RCPT TO:"+rfc_recipient) is
269 285 {
270   - failure then logError(send_mail_log, "error sending 'RCPT TO:<"+recipient+">'"); error,
  286 + failure then logError(send_mail_log, "error sending 'RCPT TO:"+rfc_recipient+"'"); error,
271 287 success(_) then receive_reply(conn)
272 288 }.
273 289  
... ... @@ -400,7 +416,7 @@ define SendMailResult
400 416 Bool enhanced_status
401 417 )=
402 418  
403   - with plain_str = "AUTH PLAIN "+ to_string(base64_encode(to_byte_array(login)+
  419 + with plain_str = "AUTH PLAIN "+ to_string(base64_encode(to_byte_array("")+
404 420 constant_byte_array(1,0)+
405 421 to_byte_array(login)+
406 422 constant_byte_array(1,0)+
... ...