在Exchange Server 2013的Active Directory和邮箱中创建用户

时间:2018-07-18 07:17:51

标签: java active-directory ldap jndi

在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

0 个答案:

没有答案
相关问题