views:

19

answers:

2

Hi there,

I need to check the timeout of a SMTP-Server, but my socket just closes. What am I doing wrong? Here is my test for it:

#!/usr/bin/python
import smtplib
import time
import datetime
import socket
socket.setdefaulttimeout(1800)


now = time.time()
server = smtplib.SMTP()
server.set_debuglevel(1)
server.connect('mx.foo.bar','25')
(code,resp) = server.docmd('NOOP')
then = time.time()

print then-now

Lets hope this works.

A: 

Check your mail server settings - they may be cutting the connection.

Andrew Sledge
It's happening with every MTA I checked. They get the command, return 220, then the connection is closed. Using telnet I get a timeout after 5 Minutes.
leto
A: 

Are you sure you are disconnecting? When I run the above code against a postfix server I get:

connect: ('server', '25')
connect: ('ip.address', 25)
reply: '220 server ESMTP Postfix\r\n'
reply: retcode (220); Msg: nserver ESMTP Postfix
connect: server ESMTP Postfix
send: 'NOOP\r\n'
reply: '250 2.0.0 Ok\r\n'
reply: retcode (250); Msg: 2.0.0 Ok
0.0531799793243

The docmd does not block, the server responses and the program exits. I therefore disconnect when the program exits.

If I open a python command line and do:

>> import smtplib
>> server = smtplib.SMTP()
>> server.connect('server')
>> server.docmd('NOOP')
(250, '2.0.0 Ok')
>> ## let it sit for 5 minutes
>> server.docmd('NOOP')
(421, '4.4.2 server Error: timeout exceeded')

My logs confirm this:

Oct 20 10:45:35 [postfix/smtpd] connect from unknown[ip.address]
Oct 20 10:50:10 [postfix/smtpd] timeout after NOOP from unknown[ip.address]
Mark