diff --git a/SoObjects/SOGo/SOGoDomainDefaults.h b/SoObjects/SOGo/SOGoDomainDefaults.h
index d7fce3b..41bf318 100644
--- a/SoObjects/SOGo/SOGoDomainDefaults.h
+++ b/SoObjects/SOGo/SOGoDomainDefaults.h
@@ -48,6 +48,7 @@
 - (NSString *) imapFolderSeparator;
 - (BOOL) imapAclConformsToIMAPExt;
 - (BOOL) forceIMAPLoginWithEmail;
+- (BOOL) forceSMTPLoginWithEmail;
 - (BOOL) sieveScriptsEnabled;
 - (BOOL) forwardEnabled;
 - (BOOL) vacationEnabled;
diff --git a/SoObjects/SOGo/SOGoDomainDefaults.m b/SoObjects/SOGo/SOGoDomainDefaults.m
index 998d43d..d370128 100644
--- a/SoObjects/SOGo/SOGoDomainDefaults.m
+++ b/SoObjects/SOGo/SOGoDomainDefaults.m
@@ -176,6 +176,11 @@
   return [self boolForKey: @"SOGoForceIMAPLoginWithEmail"];
 }
 
+- (BOOL) forceSMTPLoginWithEmail
+{
+  return [self boolForKey: @"SOGoForceSMTPLoginWithEmail"];
+}
+
 - (BOOL) sieveScriptsEnabled
 {
   return [self boolForKey: @"SOGoSieveScriptsEnabled"];
diff --git a/SoObjects/SOGo/SOGoMailer.m b/SoObjects/SOGo/SOGoMailer.m
index f792669..2976dab 100644
--- a/SoObjects/SOGo/SOGoMailer.m
+++ b/SoObjects/SOGo/SOGoMailer.m
@@ -35,6 +35,7 @@
 #import "NSString+Utilities.h"
 #import "SOGoAuthenticator.h"
 #import "SOGoDomainDefaults.h"
+#import "SOGoUserManager.h"
 #import "SOGoSystemDefaults.h"
 #import "SOGoUser.h"
 
@@ -151,7 +152,16 @@
       [client connectToAddress: addr];
       if ([authenticationType isEqualToString: @"plain"])
         {
+
+          //login is either uid or uid@domainID
           login = [[authenticator userInContext: woContext] login];
+
+          //getSmtpLoginForUser calls contactInfoForUserWithUIDorEmail which takes care of the uid@domainID issue
+          login = [[SOGoUserManager sharedUserManager]
+                     getSmtpLoginForUID: login];
+
+          [self logWithFormat: @"smtp login found '%@' ", login];
+
           password = [authenticator passwordInContext: woContext];
           if ([login length] == 0
               || [login isEqualToString: @"anonymous"]
diff --git a/SoObjects/SOGo/SOGoUserManager.h b/SoObjects/SOGo/SOGoUserManager.h
index ef5ca18..5a081c0 100644
--- a/SoObjects/SOGo/SOGoUserManager.h
+++ b/SoObjects/SOGo/SOGoUserManager.h
@@ -78,6 +78,7 @@
 - (NSString *) getFullEmailForUID: (NSString *) uid;
 - (NSString *) getImapLoginForUID: (NSString *) uid
                          inDomain: (NSString *) domain;
+- (NSString *) getSmtpLoginForUID: (NSString *) uid;
 - (NSString *) getUIDForEmail: (NSString *) email;
 - (NSString *) getLoginForDN: (NSString *) theDN;
 
diff --git a/SoObjects/SOGo/SOGoUserManager.m b/SoObjects/SOGo/SOGoUserManager.m
index 4b63021..57d55cf 100644
--- a/SoObjects/SOGo/SOGoUserManager.m
+++ b/SoObjects/SOGo/SOGoUserManager.m
@@ -381,6 +381,32 @@ static Class NSNullK;
   return login;
 }
 
+
+- (NSString *) getSmtpLoginForUID: (NSString *) uid
+{
+  NSDictionary *contactInfos;
+  NSString *login;
+  SOGoDomainDefaults *dd;
+
+  //contactInfosForUserWithUIDorEmail analysis the uid and populates - if present - the dominID key
+  //the real uid is [contactInfos objectForKey: @"c_uid"]
+  contactInfos = [self contactInfosForUserWithUIDorEmail: uid];
+
+  login = [contactInfos objectForKey: @"c_smtplogin"];
+  if (login == nil)
+    {
+      if ([contactInfos objectForKey: @"domainID"])
+        dd = [SOGoDomainDefaults defaultsForDomain: [contactInfos objectForKey: @"domainID"]];
+      else
+        dd = [SOGoSystemDefaults sharedSystemDefaults];
+
+      login = [dd forceSMTPLoginWithEmail] ? [contactInfos objectForKey: @"c_email"] : [contactInfos objectForKey: @"c_uid"];
+    }
+
+  return login;
+}
+
+
 - (NSString *) getUIDForEmail: (NSString *) email
 {
   NSDictionary *contactInfos;
@@ -838,7 +864,10 @@ static Class NSNullK;
                 [self _retainUser: currentUser
                         withLogin: cacheUid];
 	    }
+
+          [currentUser setObject: domain forKey: @"domainID"];
 	}
+
     }
   else
     currentUser = nil;
