Я пытаюсь создать службу Windows, которая позволит мне отправлять электронные письма от имени определенных пользователей.
Последняя версия Graph Client позволяет указывать повторы с помощью WithMaxRetry
. К сожалению, нет хороших примеров, демонстрирующих «лучшие практики» при создании ConfidentialClientApplication
.
В настоящее время я использую приведенный ниже код для отправки электронной почты без запроса логина и пароля:
const string clientId = "foo...99a0";
const string clientSecret = "#6A...cx#$a";
const string tenant = "1c...7";
const string azureAdInstance = "https://login.microsoftonline.com/{0}";
var authority = string.Format(CultureInfo.InvariantCulture, azureAdInstance, tenant);
string[] scopes = { "https://graph.microsoft.com/.default" };
var clientCredentials = new ClientCredential(clientSecret);
var confidentialClientApplication =
new ConfidentialClientApplication(
clientId,
authority,
"https://daemon",
clientCredentials,
null,
new TokenCache());
var graphClient =
new GraphServiceClient("https://graph.microsoft.com/v1.0",
new DelegateAuthenticationProvider(
async(requestMessage) =>
{
var result = await confidentialClientApplication
.AcquireTokenForClientAsync(scopes);
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("bearer", result.AccessToken);
}));
var recipients = new List<Recipient>
{
new Recipient
{
EmailAddress = new Microsoft.Graph.EmailAddress
{
Address = "[email protected]"
}
}
};
var email = new Message
{
Body = new ItemBody
{
Content = "Works fine!",
ContentType = BodyType.Html,
},
Subject = "Test",
ToRecipients = recipients
};
await graphClient
.Users["[email protected]"]
.SendMail(email, true)
.Request()
.PostAsync();
но я не могу понять, как создать ConfidentialClientApplication
на основе последних изменений из контекста запроса С опциями промежуточного ПО.
Поскольку я не смог найти актуальный пример, мой вопрос: как мне создать GraphServiceClient
, чтобы иметь возможность отправлять электронные письма из службы Windows?
Это код сверху PR:
HttpProvider httpProvider = new HttpProvider();
var graphClient = new GraphServiceClient(appOnlyProvider, httpProvider);
graphClient.PerRequestAuthProvider = () => CreateDelegatedProvider();
var me = await graphClient.Me.Request()
.WithScopes(string[] { "User.Read" }) // adds auth scopes
.WithMaxRetry(5) // specifies maximum number of retries
.WithPerRequestAuthProvider()
.GetAsync();
Как я должен принять его в соответствии с моим требованием? Я новичок в Graph, поэтому хочу избежать плохого кода.