Monday 02 May 2011 1:36:23 pm
By : Alessandro Dellanna
Ez, SMTP and the AUTH info syntax (maybe a new book title...)
On my new site I have created a simple Request Information Form but when I try to submit apparently all goes ok, but no mail were send to anybody...
I've installed a new ez site from scratch as usual. I've completed the install phase and when I'm going to setup the SMTP server for Collected Info I have changed my usual SMTP server with another one with user AUTHENTICATION required.
In the site.ini settings I have inserted the correct smtp server name, user and password but when I try to fill the Request Information Form the error.log (in /var/log of ez root) display the following message:
eZSMTPTransport::sendMail: exception 'ezcMailTransportException' with message 'An error occured while sending or receiving mail. SMTP server does not accept the AUTH command.'
I've changed all params but nothing to do. I've asked my provider about the capabilities of the SMTP server bau all seem to be ok.
Searching for the error int the source code, after a lot of time I've discovered a file located in $ezroot/lib/ezc/Mail/src/transports/smtp/smtp_transport.php.
At the line 583 you can find the function
protected function login()
and below the code
preg_match( "/250-AUTH[= ](.*)/", $response, $matches ); if ( count( $matches ) > 0 ) { $methods = explode( ' ', trim( $matches[1] ) ); } if ( count( $matches ) === 0 || count( $methods ) === 0 ) { throw new ezcMailTransportSmtpException( "A SMTP server does not accept the AUTH command." ); }
As you can see there is exactly the error I have received from the error.log.
I've attached at the end of the error message the entire RESPONSE from my SMTP server and change the line from
throw new ezcMailTransportSmtpException( "A SMTP server does not accept the AUTH command." );
to
throw new ezcMailTransportSmtpException( "A SMTP server does not accept the AUTH command: {$response}." );
And voilĂ .... I found the problem.... look at the SMTP response:
AUTH command: 250-authsmtp.register.xxx 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN PLAIN
For a misteriusly reason my SMTP server send a welcome message with 250 AUTH... and not 250-AUTH so the preg_match function doesn't find any AUTH capability in the SMTP SERVER and the entire function fail.
Changing the portion of code accordingly to the message response of your SMTP server can solve the problem, but I'm thinking this behaviour can be programmed or parametrized....
alooa !!!