Commit 4dbf1f032f44ffa6b62b2d4604d775167941f5f8

Authored by Cédric RICARD
1 parent a895f9a2

send_mail: connections refused before EHLO with 550 error are no more considered…

… as fatal, but are converted to 432 temporary error.
Showing 1 changed file with 27 additions and 17 deletions   Show diff stats
calexium_lib/mail/send_mail.anubis
@@ -225,22 +225,29 @@ define Reply_Result @@ -225,22 +225,29 @@ define Reply_Result
225 { 225 {
226 failure then logError(send_mail_log, "send_ehlo: error sending EHLO"); error, 226 failure then logError(send_mail_log, "send_ehlo: error sending EHLO"); error,
227 success(_) then 227 success(_) then
228 - with rep = receive_reply(conn),  
229 - if rep is  
230 - {  
231 - error then logError(send_mail_log, "send_ehlo: can't get reply"); error,  
232 - reply(code, lines) then  
233 - //we manage the 500 error, that mean the remote server is not ESMTP  
234 - //hence we try we with HELO, the old manner RFC 821  
235 - if code = 500 | code = 502 then  
236 - if smtp_send_line(conn,"HELO "+our_host_name) is  
237 - {  
238 - failure then logError(send_mail_log, "send_ehlo: error sending HELO"); error,  
239 - success(_) then receive_reply(conn)  
240 - }  
241 - else  
242 - rep  
243 - } 228 + with rep = if receive_reply(conn) is
  229 + {
  230 + error then logError(send_mail_log, "send_ehlo: can't get reply"); error,
  231 + reply(code, lines) then
  232 + //we manage the 500 error, that mean the remote server is not ESMTP
  233 + //hence we try we with HELO, the old manner RFC 821
  234 + if code = 500 | code = 502 then
  235 + if smtp_send_line(conn,"HELO "+our_host_name) is
  236 + {
  237 + failure then logError(send_mail_log, "send_ehlo: error sending HELO"); error,
  238 + success(_) then receive_reply(conn)
  239 + }
  240 + else
  241 + reply(code, lines)
  242 + },
  243 + if rep is reply(code, lines) then
  244 + if code = 550 then // some server simply refuse us because it's temporary overloaded (especially try when sending mailings)
  245 + logDebug(send_mail_log, "Converting a 550 error for EHLO to a 432 error as distant server may be temporary overloaded.");
  246 + reply(432, lines)
  247 + else
  248 + rep
  249 + else
  250 + rep
244 }. 251 }.
245 252
246 The same one for 'MAIL FROM': 253 The same one for 'MAIL FROM':
@@ -538,9 +545,12 @@ public define SendMailResult @@ -538,9 +545,12 @@ public define SendMailResult
538 else 545 else
539 reply_handling(code,lines,true) 546 reply_handling(code,lines,true)
540 } 547 }
541 - else 548 + else if code = 550 then
542 //some server answer "550 5.7.1 Client host rejected: cannot find your reverse hostname, [88.181.64.17]" 549 //some server answer "550 5.7.1 Client host rejected: cannot find your reverse hostname, [88.181.64.17]"
543 //before anything, then we try to extract the enhanced status if exists for relaying the mail with the ISP 550 //before anything, then we try to extract the enhanced status if exists for relaying the mail with the ISP
  551 + logDebug(send_mail_log, "Converting a 550 error for connection to a 432 error as distant server may be temporary overloaded.");
  552 + reply_handling(432,lines,true)
  553 + else
544 reply_handling(code,lines,true) 554 reply_handling(code,lines,true)
545 }. 555 }.
546 556