diff options
Diffstat (limited to 'src/core/smtp')
-rw-r--r-- | src/core/smtp/MCSMTPSession.cc | 31 | ||||
-rw-r--r-- | src/core/smtp/MCSMTPSession.h | 2 |
2 files changed, 33 insertions, 0 deletions
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); |