DeLos has asked for the wisdom of the Perl Monks concerning the following question:

I need to be able to open a connection to an smtp server (which has a delayed greeting). I need to be able to send information (a mail from:) before the greeting arrives.

The problem is, most of the open connections need to wait for the greeting in order to consider the connection established. I need to bypass this. btw the delay of the greeting is configurable, and can be 10 seconds or 45 seconds.

Is this possible?
  • Comment on opening a telnet/smtp connection without waiting for response

Replies are listed 'Best First'.
Re: opening a telnet/smtp connection without waiting for response
by K_M_McMahon (Hermit) on May 18, 2005 at 22:17 UTC
Re: opening a telnet/smtp connection without waiting for response
by redhotpenguin (Deacon) on May 18, 2005 at 22:07 UTC
    By bypassing this, you may trigger spam filters that look for clients which are known as earlytalkers. I run Qpsmtpd which has a plugin called check_earlytalker, and closes the connection if the client talks early.
Re: opening a telnet/smtp connection without waiting for response
by dave0 (Friar) on May 19, 2005 at 13:53 UTC
    I'm not sure what you think you're going to accomplish by sending a MAIL FROM: before the connect banner arrives. Before sending a MAIL FROM, you generally need to:
    1. receive the connect banner
    2. send a HELO or EHLO
    3. receive a successful (2xx) response to the HELO/EHLO command
    Otherwise, most SMTP servers will consider you to be either a broken client (and just disconnect) or a spammer (and take whatever measures they deem appropriate, such as blacklisting you, reporting your IP to an RBL maintainer, etc).

    I suppose if you're testing a filtering product, sending MAIL FROM immediately does make sense. In that case you probably want to throw as much test data, both RFC-conformant and non-conformant, as you can think of.

    The place for you to start looking is IO::Socket::INET. Once you've generated your socket, do something like $sock->send("MAIL FROM:<spammer@somedomain.tld>"), and call $sock->recv to get your result.

    You might also want to look at the guts of Net::SMTP to get some ideas.

      I know my questions keep lookign suspect, but that truly is because I am testing spam related software. I can give you the company ( but that is probably it. Yes the sending information before the banner should trigger some action by the server. In much the way if you pipe a file to telnet. I will try the Socket::INET and report my findings. Most of the problems I have been having is that all these modules need info back from the server before they are considered "open".
        bah, mundane details. Here I was digging deep for a problem on the surface. out SMTP fucntion explicitly waits for a return from the server, this is not in the Telnet object. So that was my problem. Oh well. Thanks guys!