[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pear-dev
Subject:    Re: [PEAR-DEV] Net_SMTP - deadlock / robustness
From:       Piotr Klaban <makler+pear () man ! torun ! pl>
Date:       2004-12-30 8:24:09
Message-ID: 20041230082409.GB16762 () oryl ! man ! torun ! pl
[Download RAW message or body]

On Mon, Dec 20, 2004 at 04:12:01PM +0100, Matthias Pigulla wrote:
> a certain remote MTA/SMTP server behaviour (actually, qmail) may cause
> the SMTP connection to hang in a deadlock state.

For postfix it deadlocks when
  $smtp->rcptTo("broken@host.name \r\nbroken@host.name");
is substituted with:
  $smtp->rcptTo("broken@host.name> \r\nbroken@host.name");

There is an alternative (esmtp PECL package):

<?php
        if (!extension_loaded("esmtp"))
          dl('esmtp.so');

        $host = 'localhost:25';
        $from = "some@email.address";
        $subj = "Subject: Test Message\n";
        $body = "Body Line 1\nBody Line 2";

        $session = new Esmtp_Session();
        $message = $session->add_message();

        $session->set_server ($host);
        $message->set_reverse_path ($from);
        $message->set_message_str ($subj . "\r\n" . $body);

        $rcpt = "broken@host.name> \r\nbroken@host.name";
        $recipient = $message->add_recipient ($rcpt);
        $recipient->dsn_set_notify ( NOTIFY_SUCCESS|NOTIFY_FAILURE );

        if (!$session->start_session ()) {
          echo "SMTP server problem: " . esmtp_strerror (esmtp_errno ()) . "\n";
        } else {
          $status = $message->transfer_status();
          echo $status['code'] . " " . $status['text'] . "\n";
        }
?>

For broken recipient it displays a message:
  502 Error: command not implemented

and communication with the server is:

write(7, 0x00403CF0, 54)                        = 54
   R C P T   T O : < b r o k e n @ h o s t . n a m e >  \r\n b r o
   k e n @ h o s t . n a m e >\r\n D A T A\r\n
read(7, 0x004034E8, 2048)                       = 44
   2 5 0   O k\r\n 5 0 2   E r r o r :   c o m m a n d   n o t   i
   m p l e m e n t e d\r\n
write(7, " Q U I T\r\n", 6)                     = 6
read(7, 0x004034E8, 2048)                       = 37
   3 5 4   E n d   d a t a   w i t h   < C R > < L F > . < C R > <
   L F >\r\n
close(7)                                        = 0
write(1, 0x003FF970, 37)                        = 37
   5 0 2   E r r o r :   c o m m a n d   n o t   i m p l e m e n t
   e d\r\n\n
close(4)                                        = 0
close(5)                                        = 0
close(6)                                        = 0


<esmtp advertisement>
esmtp PHP package (libesmtp C library wrapper) is
available from http://pecl.php.net/package/esmtp 
It works with PHP4 and PHP5.
</esmtp advertisement>

Best regards,

-- 
Piotr Klaban

-- 
PEAR Development Mailing List (http://pear.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic