aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:41:23 -0800
committerGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:41:23 -0800
commit70f53398659fb9305f6bf88e33c84327c61829d5 (patch)
tree8c3c5678a9934eac75c1a167e48e6a010e3a0d4e /src/core
parent7b04566d191b27d8018fd486570a12b6f1049a16 (diff)
added check SMTP account
Diffstat (limited to 'src/core')
-rw-r--r--src/core/abstract/MCMessageConstants.h1
-rw-r--r--src/core/smtp/MCSMTPSession.cc31
-rw-r--r--src/core/smtp/MCSMTPSession.h2
3 files changed, 34 insertions, 0 deletions
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);