Список адресов электронной почты для общих папок в обмен

2

Как мне получить список всех адресов электронной почты для общих папок обмена?

Отвечает самостоятельно, примет наилучший ответ.

Теги:
ldap
exchange-server

2 ответа

3
Лучший ответ

В то время как то, что вы разместили в качестве собственного ответа, будет работать, это поможет прочитать документацию по методам и объектам, которые вы используете, чтобы понять их ограничения. Если вы несколько раз вызывали этот код, у вас в конце концов была бы утечка памяти на ваших руках. Оператор foreach не вызывает Dispose() для используемого объекта, а только созданный им перечислитель. Ниже приведен несколько более эффективный метод поиска в каталоге (хотя очень небольшая проверка ошибок и обработка исключений).

public static void GetPublicFolderList()
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://sorcogruppen.no");
    DirectorySearcher mySearcher = new DirectorySearcher(entry);
    mySearcher.Filter = "(&(objectClass=publicfolder))";
    // Request the mail attribute only to reduce the ammount of traffic
    // between a DC and the application.
    mySearcher.PropertiesToLoad.Add("mail");

    // See Note 1
    //mySearcher.SizeLimit = int.MaxValue;

    // No point in requesting all of them at once, it'll page through
    // all of them for you.
    mySearcher.PageSize = 100;

    // Wrap in a using so the object gets disposed properly.
    // (See Note 2)
    using (SearchResultCollection searchResults = mySearcher.FindAll())
    {
        foreach (SearchResult resEnt in searchResults)
        {
            // Make sure the mail attribute is provided and that there
            // is actually data provided.
            if (resEnt.Properties["mail"] != null
                 && resEnt.Properties["mail"].Count > 0)
            {
                string email = resEnt.Properties["mail"][0] as string;
                if (!String.IsNullOrEmpty(email))
                {
                    // Do something with the email address
                    // for the public folder.
                }
            }
        }
    }
}

Примечание 1

Замечания для DirectorySearcher.SizeLimit показывают, что ограничение размера игнорируется, если оно выше заданного по умолчанию (1000 записей), Пейджинг позволяет вам получить все нужные вам записи, когда вам это нужно.

Примечание 2

В примечаниях к DirectorySearcher.FindAll() упоминается, что для поиска ресурсов необходимо утилизировать SearchResultCollection. Обертка его в выражении using четко определяет ваше намерение как программиста.

Extra

Если вы используете Exchange 2007 или 2010, вы также можете установить средства управления Exchange и использовать командлеты powershell для запроса ваших общих папок. Вы можете прагматически создать рабочую среду powershell и вызвать командлеты Exchange напрямую, не требуя при этом консоли для взаимодействия с пользователем.

-1

Следующий код получит список всех адресов электронной почты общих папок в обмен.

public static void GetPublicFolderList()
{
 DirectoryEntry entry = new DirectoryEntry("LDAP://FakeDomain.com");
 DirectorySearcher mySearcher = new DirectorySearcher(entry);
 mySearcher.Filter = "(&(objectClass=publicfolder))";
 mySearcher.SizeLimit = int.MaxValue;
 mySearcher.PageSize = int.MaxValue;            

 foreach (SearchResult resEnt in mySearcher.FindAll())
 {
  if (resEnt.Properties.Count == 1)
   continue;

  object OO = resEnt.Properties["mail"][0];
 }
}

Если вы хотите все адреса электронной почты общей папки,

удалить:

object OO = resEnt.Properties["mail"][0];

Добавить: for (int counter = 0; counter < resEnt.Properties [ "proxyAddresses" ]. Count; counter ++)

{
 string Email = (string)resEnt.Properties["proxyAddresses"][counter];
 if (Email.ToUpper().StartsWith("SMTP:"))
 {
  Email = Email.Remove(0, "SMTP:".Length);
 }
}
  • 0
    Вы ответили на свой вопрос менее чем за 1 мин ..
  • 0
    Правильно, я знал ответ, прежде чем отправил его. Речь шла не об обучении тому, как это сделать, а о том, чтобы получить правильный ответ, поэтому в следующий раз, когда кому-то придется его искать, он найдет ответ быстрее, чем я.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню