在Exchange Server 2013的Active Directory和邮箱中创建用户
大家好, 我正在使用Active Directory(Java)创建用户,已经成功在Active Directory中创建了用户,但是无法为用户创建邮箱。
package jndi;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
public class ADConnection1 {
static String BASE_NAME = ",cn=users,DC=mydomain,DC=com";
static String SERVER_ADDRESS = "mydomain.com";
static String TEMPLATE_USER = "template";
static String DOMAIN_NAME = "yourdoamin.com";
static String SECURITY_PRINCIPAL = "cn=administrator";
static String SECURITY_CREDENTIALS = "abcdddd@qqq";
DirContext ldapContext;
/**
* Create connection and set ldapContext
*/
public ADConnection1() {
try {
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, "ldap://" + SERVER_ADDRESS + ":389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL + BASE_NAME);
ldapEnv.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);
ldapEnv.put("java.naming.ldap.attributes.binary", "objectGUID");
ldapContext = new InitialDirContext(ldapEnv);
} catch (Exception e) {
System.out.println(" bind error: " + e);
e.printStackTrace();
System.exit(-1);
}
}
/**
* Create a New User (Note no password is assigned)
*
* @param username
* @param surname
* @param givenName
*/
public void createNewUser(String username, String surname, String givenName) {
try {
//some useful constants from lmaccess.h
int UF_ACCOUNTENABLE = 0x0001;
//int UF_ACCOUNTDISABLE = 0x0002;
int UF_PASSWD_NOTREQD = 0x0020;
int UF_PASSWD_CANT_CHANGE = 0x0040;
int UF_NORMAL_ACCOUNT = 0x0200;
int UF_DONT_EXPIRE_PASSWD = 0x10000;
//int UF_PASSWORD_EXPIRED = 0x800000;
String distinguishedName = "cn=" + username + BASE_NAME;
Attributes newAttributes = new BasicAttributes(true);
Attribute oc = new BasicAttribute("objectclass");
oc.add("top");
oc.add("person");
oc.add("organizationalperson");
oc.add("user");
newAttributes.put(oc);
System.out.println(Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWD_NOTREQD + UF_DONT_EXPIRE_PASSWD + UF_ACCOUNTENABLE));
newAttributes.put(new BasicAttribute("sAMAccountName", username));
newAttributes.put(new BasicAttribute("userPrincipalName", username + "@" + SERVER_ADDRESS));
newAttributes.put(new BasicAttribute("cn", username));
newAttributes.put(new BasicAttribute("sn", surname));
newAttributes.put(new BasicAttribute("givenName", givenName));
newAttributes.put(new BasicAttribute("displayName", givenName + " " + surname));
Attribute userCont = new BasicAttribute("userAccountControl", Integer.toString(UF_ACCOUNTENABLE));
newAttributes.put(userCont);
ldapContext.createSubcontext(distinguishedName, newAttributes);
ModificationItem[] mods = new ModificationItem[4];
String newQuotedPassword = "\"" + "@sZ6UES" + "\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("homeMDB", "CN=Mailbox Store (EMP-EX03),CN=First Storage Group,CN=InformationStore,CN=EMP-EX03,CN=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=admp,DC=com"));
mods[2] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("msExchHomeServerName", "/o=First Organization/ou=First Administrative Group/cn=Configuration/cn=Servers/cn=EMP-EX03"));
mods[3] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("mailNickname", username));
ldapContext.modifyAttributes(distinguishedName, mods);
} catch (Exception e) {
System.out.println("create error: " + e);
e.printStackTrace();
System.exit(-1);
}
}
/**
* Used for demonstration and testing only.
*
* @param args
*/
public static void main(String[] args) {
System.setProperty("javax.net.debug", "all");
ADConnection1 adc = new ADConnection1();
adc.createNewUser("vipinJAKHARR", "vipinJAKHARR", "vipinJAKHARR");
}
}
错误: ExchangeGuid在UserMailbox上是必需的.ExchangeGuid在UserMailbox上是必需的 UserMailbox。
请帮助我解决这个问题,
亲切的问候, Vipin Jakhar