http://www.perlmonks.org?node_id=458445

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 (openwave.com) 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!