EWS сохранить отправленный элемент в WellKnownFolderName.SentItems - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь отправить EmailMessage с помощью EWS с пользователем A и сохранить отправленный элемент в папке SentItems пользователя B .В основном это работает.Единственная проблема, с которой я сталкиваюсь: элемент сохраняется как черновик, а не как отправленный элемент.

Код:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2, timeZone)
{
    Url = new Uri(uri),
    Credentials = new WebCredentials(new NetworkCredential(user, password, domain)),
    UseDefaultCredentials = false,
};

EmailMessage message = new EmailMessage(service)
{
    Subject = subject,
    Body = new MessageBody(BodyType.HTML, fullBody)
};
message.From = email;
message.ToRecipients.Add(email);

FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);

Что я пытался:

// Simply sends the message
message.Send();

// Sends the item but is it not saved in the sentItems of email-account
FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.SendAndSaveCopy(folderId);

// Sends the item, saves the item in the right folder, but it is saved as a draft, not as a sent item
FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.Send();
message.Move(folderId);

Что я пропускаю или делаю неправильно?

Этот парень говорит просто сохранить, а затем сохранить usind folderId, но в таком случае я получаю следующую ошибку:

This operation can't be performed because this service object already has an ID. To update this service object, use the Update() method instead.

1 Ответ

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

После некоторых тестов я выяснил, что правильная процедура следующая:

FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.SendAndSaveCopy(folderId);

Однако должна быть ошибка, потому что элемент всегда сохраняется в папке sentItems пользователя, используемого для аутентификацииExchangeService игнорирует folderId, переданный в качестве аргумента.Решение (обходное решение) - выдать себя за пользователя, как объясняет Документация Microsoft .Вот код имперсонации:

service.AutodiscoverUrl(email);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);

Это работает ... Интересно, смог ли кто-то еще организовать это должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...