Загрузить MSG-файл на сервер Exchange с помощью управляемого API EWS - PullRequest
0 голосов
/ 06 сентября 2018

Я нашел несколько примеров загрузки сообщения электронной почты с сервера MS Exchange и сохранения его в файл.

Мне нужно обратное. Из файла ".msg" мне нужно создать сообщение электронной почты в определенной папке сервера.

Я нашел эту документацию о том, как это сделать с помощью запроса EWS с телом XML. Однако вся моя система использует EWS Managed API , и я не смог найти эквивалентный метод для выполнения этой операции.

Как я могу выполнить нужную мне операцию? Могу ли я передать пользовательский запрос через Microsoft.Exchange.WebServices.Data.ExchangeService Объект?

1 Ответ

0 голосов
/ 06 сентября 2018

Ссылка на документацию Microsoft здесь .

Вы можете использовать операцию UploadItems EWS для загрузки элемента в виде потока данных.Это представление потока данных элемента должно исходить из результатов вызова операции ExportItems .Поскольку EWS Managed API не реализует операцию UploadItems, если вы используете EWS Managed API, вам нужно будет написать процедуру для отправки веб-запросов.

Возможно, вы сможете преобразовать свойMSG-файл в .eml и используйте следующий код, чтобы добавить свое сообщение.

private static void UploadMIMEEmail(ExchangeService service)
{
    EmailMessage email = new EmailMessage(service);

    string emlFileName = @"C:\import\email.eml";
    using (FileStream fs = new FileStream(emlFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .eml file to the MimeContent property.
        email.MimeContent = new MimeContent("UTF-8", bytes);
    }

    // Indicate that this email is not a draft. Otherwise, the email will appear as a 
    // draft to clients.
    ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
    email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);
    // This results in a CreateItem call to EWS. The email will be saved in the Inbox folder.
    email.Save(WellKnownFolderName.Inbox);
}
...