Reissue EHLO after successful STARTTLS.

This commit is contained in:
Vincent Richard 2006-10-02 19:51:27 +00:00
parent 7ed5c675a6
commit b2d67de8a9
3 changed files with 46 additions and 30 deletions

View File

@ -4,6 +4,9 @@ VERSION 0.8.1cvs
2006-10-02 Vincent Richard <vincent@vincent-richard.net>
* SMTPTransport.cpp: reissue EHLO command after a successful STARTTLS
negociation.
* word, wordEncoder: fixed bug #1096610 which caused encoding of a
non-integral number of characters (and then, generation of
incorrectly-formed words) with multi-bytes charsets.

View File

@ -135,36 +135,7 @@ void SMTPTransport::connect()
}
// Identification
// First, try Extended SMTP (ESMTP)
//
// eg: C: EHLO thismachine.ourdomain.com
// S: 250-smtp.theserver.com
// S: 250 AUTH CRAM-MD5 DIGEST-MD5
sendRequest("EHLO " + platformDependant::getHandler()->getHostName());
if ((resp = readResponse())->getCode() != 250)
{
// Next, try "Basic" SMTP
//
// eg: C: HELO thismachine.ourdomain.com
// S: 250 OK
sendRequest("HELO " + platformDependant::getHandler()->getHostName());
if ((resp = readResponse())->getCode() != 250)
{
internalDisconnect();
throw exceptions::connection_greeting_error(resp->getLastLine().getText());
}
m_extendedSMTP = false;
}
else
{
m_extendedSMTP = true;
m_extendedSMTPResponse = resp->getText();
}
helo();
#if VMIME_HAVE_TLS_SUPPORT
// Setup secured connection, if requested
@ -196,6 +167,9 @@ void SMTPTransport::connect()
{
throw;
}
// Must reissue a EHLO command [RFC-2487, 5.2]
helo();
}
#endif // VMIME_HAVE_TLS_SUPPORT
@ -207,6 +181,44 @@ void SMTPTransport::connect()
}
void SMTPTransport::helo()
{
// First, try Extended SMTP (ESMTP)
//
// eg: C: EHLO thismachine.ourdomain.com
// S: 250-smtp.theserver.com
// S: 250 AUTH CRAM-MD5 DIGEST-MD5
sendRequest("EHLO " + platformDependant::getHandler()->getHostName());
ref <SMTPResponse> resp;
if ((resp = readResponse())->getCode() != 250)
{
// Next, try "Basic" SMTP
//
// eg: C: HELO thismachine.ourdomain.com
// S: 250 OK
sendRequest("HELO " + platformDependant::getHandler()->getHostName());
if ((resp = readResponse())->getCode() != 250)
{
internalDisconnect();
throw exceptions::connection_greeting_error(resp->getLastLine().getText());
}
m_extendedSMTP = false;
m_extendedSMTPResponse.clear();
}
else
{
m_extendedSMTP = true;
m_extendedSMTPResponse = resp->getText();
}
}
void SMTPTransport::authenticate()
{
if (!m_extendedSMTP)

View File

@ -75,6 +75,7 @@ private:
void internalDisconnect();
void helo();
void authenticate();
#if VMIME_HAVE_SASL_SUPPORT
void authenticateSASL();