From 70f53398659fb9305f6bf88e33c84327c61829d5 Mon Sep 17 00:00:00 2001 From: DINH Viet Hoa Date: Sat, 12 Jan 2013 00:41:23 -0800 Subject: added check SMTP account --- src/core/abstract/MCMessageConstants.h | 1 + src/core/smtp/MCSMTPSession.cc | 31 +++++++++++++++++++++++++++++++ src/core/smtp/MCSMTPSession.h | 2 ++ 3 files changed, 34 insertions(+) (limited to 'src/core') diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index ab30b8c4..1440bcf1 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -194,6 +194,7 @@ namespace mailcore { ErrorAuthenticationRequired, ErrorFetchMessageList, ErrorDeleteMessage, + ErrorInvalidAccount, }; enum PartType { diff --git a/src/core/smtp/MCSMTPSession.cc b/src/core/smtp/MCSMTPSession.cc index 52851a08..6d723cb4 100644 --- a/src/core/smtp/MCSMTPSession.cc +++ b/src/core/smtp/MCSMTPSession.cc @@ -482,6 +482,37 @@ void SMTPSession::login(ErrorCode * pError) * pError = ErrorNone; } +void SMTPSession::checkAccount(Address * from, ErrorCode * pError) +{ + int r; + + loginIfNeeded(pError); + if (* pError != ErrorNone) { + return; + } + r = mailsmtp_mail(mSmtp, MCUTF8(from->mailbox())); + if (r == MAILSMTP_ERROR_STREAM) { + * pError = ErrorConnection; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + r = mailsmtp_rcpt(mSmtp, "email@invalid"); + if (r == MAILSMTP_ERROR_STREAM) { + * pError = ErrorConnection; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + * pError = ErrorNone; +} + void SMTPSession::sendMessage(Address * from, Array * recipients, Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError) { diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h index 45a7c54b..98f4be4a 100644 --- a/src/core/smtp/MCSMTPSession.h +++ b/src/core/smtp/MCSMTPSession.h @@ -79,6 +79,8 @@ namespace mailcore { virtual void login(ErrorCode * pError); + virtual void checkAccount(Address * from, ErrorCode * pError); + virtual void sendMessage(Address * from, Array * recipients, Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); virtual void sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); -- cgit v1.2.3