Support timeout.
This commit is contained in:
+10
-1
@@ -5,6 +5,9 @@
|
|||||||
# Send DSNs, do call back verification,
|
# Send DSNs, do call back verification,
|
||||||
# and generate DSN messages from a template
|
# and generate DSN messages from a template
|
||||||
# $Log$
|
# $Log$
|
||||||
|
# Revision 1.11 2006/06/21 21:07:11 customdesigned
|
||||||
|
# Include header fields in DSN template.
|
||||||
|
#
|
||||||
# Revision 1.10 2006/05/24 20:56:35 customdesigned
|
# Revision 1.10 2006/05/24 20:56:35 customdesigned
|
||||||
# Remove default templates. Scrub test.
|
# Remove default templates. Scrub test.
|
||||||
#
|
#
|
||||||
@@ -14,8 +17,9 @@ import spf
|
|||||||
import socket
|
import socket
|
||||||
from email.Message import Message
|
from email.Message import Message
|
||||||
import Milter
|
import Milter
|
||||||
|
import time
|
||||||
|
|
||||||
def send_dsn(mailfrom,receiver,msg=None):
|
def send_dsn(mailfrom,receiver,msg=None,timeout=600):
|
||||||
"""Send DSN. If msg is None, do callback verification.
|
"""Send DSN. If msg is None, do callback verification.
|
||||||
Mailfrom is original sender we are sending DSN or CBV to.
|
Mailfrom is original sender we are sending DSN or CBV to.
|
||||||
Receiver is the MTA sending the DSN.
|
Receiver is the MTA sending the DSN.
|
||||||
@@ -28,6 +32,7 @@ def send_dsn(mailfrom,receiver,msg=None):
|
|||||||
else:
|
else:
|
||||||
mxlist.sort()
|
mxlist.sort()
|
||||||
smtp = smtplib.SMTP()
|
smtp = smtplib.SMTP()
|
||||||
|
toolate = time.time() + timeout
|
||||||
for prior,host in mxlist:
|
for prior,host in mxlist:
|
||||||
try:
|
try:
|
||||||
smtp.connect(host)
|
smtp.connect(host)
|
||||||
@@ -65,7 +70,11 @@ def send_dsn(mailfrom,receiver,msg=None):
|
|||||||
pass # any other error, try next MX
|
pass # any other error, try next MX
|
||||||
except socket.error:
|
except socket.error:
|
||||||
pass # MX didn't accept connections, try next one
|
pass # MX didn't accept connections, try next one
|
||||||
|
except socket.timeout:
|
||||||
|
pass # MX too slow, try next one
|
||||||
smtp.close()
|
smtp.close()
|
||||||
|
if time.time() > toolate:
|
||||||
|
return (450,'No MX response within %f minutes'%(timeout/60.0))
|
||||||
return (450,'No MX servers available') # temp error
|
return (450,'No MX servers available') # temp error
|
||||||
|
|
||||||
def create_msg(q,rcptlist,origmsg=None,template=None):
|
def create_msg(q,rcptlist,origmsg=None,template=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user