マシン上でスケジュールされたジョブとして実行されているサービスがあります。独自のメールボックスを持たないサービスアカウントで実行されています。チームの共有受信ボックスからメールを送信したいと考えています。
ここで偽装を使用してみました。
var service = new ExchangeService
{
TraceEnabled = true,
ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, Resources.EmailUsername)
};
service.AutodiscoverUrl(Resources.EmailUsername, RedirectionUrlValidationCallback);
var email = new EmailMessage(service);
if (!string.IsNullOrWhiteSpace(recipients))
{
foreach (var recipient in recipients.Split(','))
{
email.ToRecipients.Add(recipient.Trim());
}
}
email.Subject = subject;
email.Body = new MessageBody(BodyType.HTML, body);
if (attachmentName != null && attachment != null)
{
email.Attachments.AddFileAttachment(attachmentName, attachment);
}
email.Send();
失敗し、次のような例外が表示されます。
When making a request as an account that does not have a mailbox, you must specify the mailbox primary smtp address for any distinguished folder Ids.
ザ・
TraceEnabled
一部はMessageDisposition=SaveOnly
に気づくように私を導いた xmlで設定されました。 MessageDispositionを検索し、SendOnlyが必要だと考えました。多くの検索の後、私はここに行きました:https://github.com/OfficeDev/ews-managed-api/blob/master/Core/ServiceObjects/Items/EmailMessage.cs
どれを示しています:
まあそれは私が最初に望んでいたように見えます...しかし、その後:
2つのコメントは最も啓発的な部分です。添付ファイルは、プロセスを実行しているユーザーの下書きフォルダーに保存されています。
これを回避するには、Sendを呼び出すときにメッセージが既に保存されている必要があります。存在することがわかっているメールボックスに保存されていることを確認しましょう。そのため、偽装を削除し、ステップを追加して保存し、[差出人]フィールドを変更します。その後、メッセージを安全に送信でき、ドラフトフォルダーから自身を削除します。