Как отправить электронную почту через общий почтовый ящик с помощью API веб-служб Exchange (EWS) - PullRequest
0 голосов
/ 22 ноября 2018

Я отправляю электронные письма через общий почтовый ящик, используя API веб-служб MS Exchange.

Отправка электронных писем работает, но они не сохраняются в отправленных элементах. Как показано ниже, это делаетсяРаботает вручную, элементы сохраняются в Отправленных, но через мой код их не сохраняются:

enter image description here

using Microsoft.Exchange.WebServices.Data;
using System;

//Ref to Microsoft.Exchange.WebServices  v15
//Re to Microsoft.Exchange.WebServices.Auth  v15

namespace Emailing
{
    public class Email 
    {
        private string _sharedOutlookMailAccount = "aSharedEmailAccount@something.com";        
        private ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2010_SP2);

        public Email(string exchangeURL = "https://webmail.something.com/ews/exchange.asmx")
        {
            try
            {
                exchangeService.AutodiscoverUrl(_sharedOutlookMailAccount);
                //exchangeService.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _sharedOutlookMailAccount);

                exchangeService.UseDefaultCredentials = true;
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                //...
            }
            catch (Exception ex)
            {
                //...
            }
        }

        public bool SendEmailFromSharedMailBox(string emailTo, string emailCc, string emailBcc, string emailSubject, string emailBody, string[] emailFileAttachments, bool emailFromSharedMailbox = false, bool sendToDraftOnly = false)
        {
            EmailMessage message = default(EmailMessage);
            message = new EmailMessage(exchangeService);

            emailTo = emailTo.TrimEnd(';', ',');
            string[] emailArr = emailTo.Split(';', ',');
            if (emailTo.Length > 0) message.ToRecipients.AddRange(emailArr);

            emailCc = emailCc.TrimEnd( ';', ',' );
            emailArr = emailCc.Split(';', ',' );
            if (emailCc.Length > 0) message.CcRecipients.AddRange(emailArr);

            emailBcc = emailBcc.TrimEnd(';', ',');
            emailArr = emailBcc.Split(';', ',');
            if (emailBcc.Length > 0) message.BccRecipients.AddRange(emailArr);

            #if DEBUG
                emailSubject = "IGNORE - TESTING ONLY - " + emailSubject;
            #endif

            message.Subject = emailSubject;

            EmailAddress fromSender = new EmailAddress();
            fromSender.MailboxType = MailboxType.Mailbox;
            fromSender.Address = _sharedOutlookMailAccount;
            message.From = fromSender;

            if (emailFileAttachments != null)
            {
                foreach (string fileAttachment in emailFileAttachments)
                {
                    if (string.IsNullOrEmpty(fileAttachment) == false)
                        message.Attachments.AddFileAttachment(fileAttachment);
                }
            }

            message.Sensitivity = Sensitivity.Private;
            message.Body = new MessageBody();
            message.Body.BodyType = BodyType.HTML;
            message.Body.Text = emailBody; //+= "_sharedMailSignature";

            //Save the email message
            try
            {
                //THIS WORKS AND IS REQUIRED FOR THE Send() &/or SendAndSaveCopy() METHODS TO WORK
                message.Save(new FolderId(WellKnownFolderName.Drafts, _sharedOutlookMailAccount));
            }
            catch (Exception ex)
            {
                //...
                return false;
            }

            if (!sendToDraftOnly)
            {
                try
                {
                    //==================================================================
                    //THIS SENDS EMAILS BUT THEY ARE NOT SAVED IN THE SENT ITEMS!
                    //==================================================================
                    message.SendAndSaveCopy(new FolderId(WellKnownFolderName.Drafts, _sharedOutlookMailAccount));
                }
                catch (Exception ex)
                {
                    //...
                    return false;
                }
            }
        return true;
    }
}

Кто-нибудь знает, какЯ могу сохранить отправленные письма в папке «Отправленные»?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Да, вы можете использовать функцию SendAndSaveCopy для достижения ваших потребностей.Вот официальный документ об EWS API.

Отправьте сообщение электронной почты и сохраните копию

0 голосов
/ 22 ноября 2018

Мне нужно было использовать WellKnownFolderName.SentItems not Черновики.

  message.SendAndSaveCopy(new FolderId(WellKnownFolderName.SentItems, _sharedOutlookMailAccount));

Другие причины / решения этой проблемы описаны в этой статье базы знаний Майкрософт (KB):https://support.microsoft.com/en-au/help/2958272/email-sent-using-outlook-are-not-saved-to-the-sent-items-folder

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