Хобрук: Ваш путь к мастерству в программировании

Добавьте номер факса для обмена контактами с помощью EWS API из FAX and Scan

Я пробую Mictosoft пример для создания и подключения к серверу обмена с помощью EWS и странной пометки как недействительного при попытке использовать номер факса для отправки с помощью функции "Факсы и сканирование Windows" (wfs.exe).

Итак, кто-нибудь знает, как мне установить номер факса в EWS, который можно использовать для отправки факса по факсу и сканирования?


Ответы:


1

После долгих экспериментов и исследований с использованием OutlookSpy я обнаружил, что должен добавить @ перед номер, чтобы его можно было распознать программой факсов и сканирования Windows. Это мой последний код.

public static ExchangeService GetService(string emailUser = defaultUser, string pass = defaultPass)
{

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
    //service.AutodiscoverUrl(emailUser, RedirectionUrlValidationCallback);
    service.Url = new Uri("https://xs3.domain.net/EWS/Exchange.asmx");
    service.Credentials = new WebCredentials(emailUser, pass);

    service.TraceEnabled = true;
    service.TraceFlags = TraceFlags.All;

    return service;
}

public static bool IsValidEmail(string email)
{
    try
    {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch
    {
        return false;
    }
}

public static void AddOrUpdateContact(ExchangeService service, string id, Dictionary<string, string> dataRecord, string targetFolder = defaultCotactsFolder, bool faxOnly = false)
{

    Folder parentFolder;

    FindFoldersResults folderItems = service.FindFolders(
        WellKnownFolderName.Contacts,//parent folder
        new SearchFilter.IsEqualTo(FolderSchema.DisplayName, targetFolder),
        new FolderView(1)// return first 1 records
     );

    if (folderItems != null && folderItems.Count() > 0)
    {//folder found!
        parentFolder = folderItems.First() as Folder;
    }
    else
    {//folder NOT found!
        return;
    }

    ExtendedPropertyDefinition CustomProperty = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "BusinessFax", MapiPropertyType.String);


    FindItemsResults<Item> contactItems = service.FindItems(
        parentFolder.Id,
        new SearchFilter.IsEqualTo(ContactSchema.NickName, id),
        new ItemView(1)
    );

    bool doesExist = contactItems != null && contactItems.Count() > 0;
    Contact contact;


    if (doesExist)
    {//contact found!
        contact = contactItems.First() as Contact;
    }
    else
    {
        // Create the contact.
        contact = new Contact(service);
    }



    // Specify the name and how the contact should be filled.
    contact.CompanyName = name;
    contact.NickName = id;
    contact.PhoneNumbers[PhoneNumberKey.BusinessFax] = "@"+dataRecord["COD_FAX_SUPID"];
    contact.FileAsMapping = FileAsMapping.Company;

    if (!faxOnly)
    {
        // Specify the business, home, and car phone numbers.
        contact.PhoneNumbers[PhoneNumberKey.BusinessPhone] = dataRecord["COD_TEL_SUPID"];


        if (IsValidEmail(dataRecord["EMAIL_SUPID"]))
        {
            // Specify two email addresses.
            contact.EmailAddresses[EmailAddressKey.EmailAddress1] = new EmailAddress(dataRecord["EMAIL_SUPID"]);
        }

        contact.PhysicalAddresses[PhysicalAddressKey.Home] = new PhysicalAddressEntry()
        {
            Street = dataRecord["DES_STREET_SUPID"],
            City = dataRecord["DES_TOWN_SUPID"],
            CountryOrRegion = dataRecord["DES_COUNTRY_SUPID"],
            PostalCode = dataRecord["COD_POST_SUPID"] + (String.IsNullOrWhiteSpace(dataRecord["NUM_BOX_SUPID"]) ? "" : $", PostBox: {dataRecord["NUM_BOX_SUPID"]}"),
        }
    }


    if (doesExist)
    {  //contact found!
        contact.Update(ConflictResolutionMode.AlwaysOverwrite);
    }
    else
    {
        //save new!
        contact.Save(parentFolder.Id);
    }

}

Пример использования:

ExchangeService service = ContatctUpdaterLib.ContatcUpdater.GetService("[email protected]","123456");

//GetUserData return user data record as a Dictionary<string,string>
var data = GetUserData();

AddOrUpdateContact(service, dataRecord["COD_SUP_SUPID"], dataRecord, "Contacts(Fax Only)" ,true);
16.05.2021
Новые материалы

Управление DOM для чайников вроде меня
Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

Что такое структура данных?
Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..