diff --git a/res/values/strings.xml b/res/values/strings.xml
index ccba1ec71..79a33418b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -590,6 +590,11 @@ save attachment.
Cannot safely connect to server.\n(%s)
+
+
+ The server responded with an error; please check your username and password
+ and try again.
+
Cannot connect to server.
diff --git a/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java b/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java
index 06e14c815..31d98f825 100644
--- a/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java
+++ b/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java
@@ -580,6 +580,9 @@ public class AccountCheckSettingsFragment extends Fragment {
? R.string.account_setup_failed_dlg_auth_message
: R.string.account_setup_failed_dlg_auth_message_fmt;
break;
+ case MessagingException.AUTHENTICATION_FAILED_OR_SERVER_ERROR:
+ id = R.string.account_setup_failed_check_credentials_message;
+ break;
case MessagingException.IOERROR:
id = R.string.account_setup_failed_ioerror;
break;
diff --git a/src/com/android/email/mail/MessagingException.java b/src/com/android/email/mail/MessagingException.java
index 4cd120531..cdf0cf0ff 100644
--- a/src/com/android/email/mail/MessagingException.java
+++ b/src/com/android/email/mail/MessagingException.java
@@ -59,6 +59,8 @@ public class MessagingException extends Exception {
public static final int AUTODISCOVER_AUTHENTICATION_FAILED = 11;
/** Autodiscover completed with a result (non-error) */
public static final int AUTODISCOVER_AUTHENTICATION_RESULT = 12;
+ /** Ambiguous failure; server error or bad credentials */
+ public static final int AUTHENTICATION_FAILED_OR_SERVER_ERROR = 13;
protected int mExceptionType;
diff --git a/src/com/android/exchange/EasSyncService.java b/src/com/android/exchange/EasSyncService.java
index 69117a1e8..d974f7f1e 100644
--- a/src/com/android/exchange/EasSyncService.java
+++ b/src/com/android/exchange/EasSyncService.java
@@ -142,6 +142,8 @@ public class EasSyncService extends AbstractSyncService {
static private final String AUTO_DISCOVER_PAGE = "/autodiscover/autodiscover.xml";
static private final int AUTO_DISCOVER_REDIRECT_CODE = 451;
+ static private final int INTERNAL_SERVER_ERROR_CODE = 500;
+
static public final String EAS_12_POLICY_TYPE = "MS-EAS-Provisioning-WBXML";
static public final String EAS_2_POLICY_TYPE = "MS-WAP-Provisioning-XML";
@@ -466,6 +468,10 @@ public class EasSyncService extends AbstractSyncService {
} else if (isAuthError(code)) {
userLog("Authentication failed");
resultCode = MessagingException.AUTHENTICATION_FAILED;
+ } else if (code == INTERNAL_SERVER_ERROR_CODE) {
+ // For Exchange 2003, this could mean an authenticiation failure OR a server error
+ userLog("Internal server error");
+ resultCode = MessagingException.AUTHENTICATION_FAILED_OR_SERVER_ERROR;
} else {
// TODO Need to catch other kinds of errors (e.g. policy) For now, report the code.
userLog("Validation failed, reporting I/O error: ", code);