web-dev-qa-db-ja.com

共有メールボックスからC#でEWSを使用してメールを送信する

IT部門は、サービスアカウントの作成から共有メールボックスへの移行を進めています。部門のすべてのメールアカウントが共有メールボックスに変換されています。これまで、私はEWSを使用して、次のコードを使用してWebアプリから受信者に電子メールを送信していました。

ExchangeService service = new ExchangeService();
service = new ExchangeService(ExchangeVersion.Exchange2013_SP1)
{
     Credentials = new NetworkCredential("[email protected]", "Password1"),
     Url = new Uri("https://Outlook.office365.com/EWS/Exchange.asmx")
            };

     email = new EmailMessage(service);
     email.Body = new MessageBody(BodyType.HTML, Message.ToString());
     email.ToRecipients.Add(Recipient.email);
     email.SendAndSaveCopy();
}

メールアドレスとパスワードをハードコーディングする代わりに、共有メールボックスを使用してメールを送信するにはどうすればよいですか?私が使用しているメールアドレスは、現在のパスワードセキュリティ基準に該当しないサービスアカウントです。このため、部門のメールを共有メールボックスに変更しています。

ActiveDirectoryからユーザーを認証するWindows認証を使用しています。

10
Kuni

EWSを引き続き使用する場合は、共有メールボックスを使用するためのサービスアカウントが必要になります(アプリが共有メールボックスに対するSendAS権限を持つユーザーになりすますことができない場合)。たとえば、共有メールボックスのサービスアカウントSendAs権限を付与します。送信先アドレスと送信済みアイテムフォルダを共有メールボックスのフォルダに設定します(共有メールボックス送信済みアイテムフォルダに保存されたメッセージのコピーが必要な場合)。例えば

        email.From = new EmailAddress("[email protected]"); 
        Mailbox SharedMailbox = new Mailbox("[email protected]");
        FolderId SharedMailboxSendItems = new FolderId(WellKnownFolderName.SentItems, SharedMailbox);
        email.SendAndSaveCopy(SharedMailboxSendItems);

サービスアカウントを削除できるより良いアプローチは、新しいREST API https://msdn.Microsoft.com/en-us/office)を使用することです。/office365/api/mail-rest-operations 次に、メールを送信し、証明書認証を利用する権限を持つアプリを作成します https://msdn.Microsoft.com/en-us/office/ office365/howto/building-service-apps-in-office-365 。これにより、サービスアカウントのライセンス要件を取り除くことができ、ハードコードされた資格情報がなくなったため、はるかに安全なアプリケーションが提供されます。アプリは、必要なことだけにアクセスでき、他には何もありません。

11
Glen Scales