Forstå Outlook-godkendelsesproblemer med ASP.NET Core og MailKit
Når du integrerer Outlook-e-mail-funktionalitet i en ASP.NET Core web API ved hjælp af MailKit støder udviklere ofte på autentificeringsproblemer. Et almindeligt problem er fejlmeddelelsen "535: 5.7.139 Godkendelse mislykkedes". Dette sker typisk, når den grundlæggende godkendelsesmetode er deaktiveret på Outlook-serveren, hvilket får forbindelsesforsøget til at mislykkes.
Grundlæggende godkendelse, som engang blev brugt i vid udstrækning, er i stigende grad blevet deaktiveret af tjenesteudbydere som Microsoft for at forbedre sikkerheden. I stedet foretrækkes moderne godkendelsesmetoder, såsom OAuth2. Dette skift kan forårsage forvirring, især for udviklere, der er vant til at bruge brugernavne og adgangskoder direkte.
I dette scenarie kan du have brugt de korrekte Outlook SMTP-serverindstillinger og app-specifikke adgangskode, men stadig stået over for godkendelsesfejl. At forstå, hvorfor grundlæggende godkendelse mislykkes, er afgørende for at løse disse problemer effektivt. Fejlen angiver en håndhævelse af sikkerhedspolitik snarere end et problem med selve koden.
I denne artikel vil vi undersøge, hvorfor denne fejl opstår, de underliggende årsager og de trin, du kan tage for at løse problemet. Vi vil også diskutere alternative godkendelsesmetoder, såsom OAuth2, for at sikre sikker og vellykket kommunikation med Outlooks servere.
Kommando | Eksempel på brug |
---|---|
ConfidentialClientApplicationBuilder.Create() | Denne kommando bruges til at bygge en fortrolig klientapplikation til OAuth2-godkendelse. Det er en del af Microsoft Identity Client-biblioteket (MSAL) og initialiserer appen med et klient-id, så den kan erhverve tokens til sikker kommunikation. |
SaslMechanismOAuth2() | Denne kommando er specifik for MailKit og bruges til at godkende med et OAuth2-token, når du sender e-mails. Den omgår grundlæggende godkendelse ved at bruge en mere sikker metode via OAuth2-protokollen. |
AcquireTokenForClient(scopes).ExecuteAsync() | Denne metode anskaffer et OAuth2-token til klientapplikationen. Det er en del af MSAL-biblioteket og er afgørende for generering af adgangstokens til API'er som Microsoft Graph eller SMTP-servere. |
GraphServiceClient | Dette objekt bruges i Microsoft Graph API til at interagere med Microsoft-tjenester. Det giver udviklere mulighed for at sende e-mails, administrere brugere eller interagere med andre ressourcer i Microsoft 365 ved hjælp af OAuth2-tokens. |
DelegateAuthenticationProvider() | Denne kommando bruges til at konfigurere godkendelsesprocessen for Microsoft Graph API-anmodninger. Den tildeler et OAuth2-token til hver API-anmodning dynamisk, hvilket sikrer sikker kommunikation. |
SendMail(message, false).Request().PostAsync() | Denne kommando er en del af Graph API, der sender den konstruerede e-mail-meddelelse asynkront. Den sender beskeden til brugerens postkasse ved hjælp af Microsoft Graphs sikre e-mail-afsendelsesfunktionalitet. |
SmtpClient.AuthenticateAsync() | I MailKit giver denne kommando klienten mulighed for at godkende med e-mail-serveren ved hjælp af legitimationsoplysninger såsom OAuth2-tokens. Det erstatter den traditionelle brugernavn og adgangskode-godkendelsesmetode. |
SecureSocketOptions.StartTls | Denne kommando bruges, når der oprettes forbindelse til SMTP-serveren for at gennemtvinge en sikker, krypteret forbindelse via STARTTLS-protokollen, hvilket sikrer, at dataene overføres sikkert over netværket. |
MimeMessage | Denne klasse repræsenterer en e-mail-meddelelse i MailKit-biblioteket. Den indeholder detaljer såsom afsender, modtager, emne og brødtekst i e-mailen. Det er vigtigt at oprette og formatere e-mail-indhold før afsendelse. |
Udforskning af OAuth2-integration til sikker afsendelse af e-mail
Ovenstående scripts er designet til at adressere grundlæggende godkendelsesfejl stødt på, når du sender e-mails gennem Outlooks SMTP-server ved hjælp af MailKit i en ASP.NET Core Web API. Fejlen opstår, fordi Microsoft har deaktiveret grundlæggende godkendelse for at øge sikkerheden, hvilket tvinger udviklere til at anvende OAuth2, en mere sikker godkendelsesmetode. I den første løsning brugte vi MailKit med OAuth2-tokens til at godkende og sende en e-mail. I stedet for at stole på et brugernavn og en adgangskode kræver OAuth2 et token, som genereres af Microsoft Identity Client (MSAL) og bruges til at godkende anmodninger sikkert.
Til at begynde med bruger løsningen `ConfidentialClientApplicationBuilder.Create()`-metoden, en del af MSAL-biblioteket, til at oprette en klientapplikation. Dette trin initialiserer applikationen med vigtige legitimationsoplysninger som klient-id, lejer-id og klienthemmelighed, som er nødvendige for at generere et OAuth2-token. Når applikationen er bygget, henter `AcquireTokenForClient()`-metoden det token, der er nødvendigt for at godkende med Outlooks SMTP-server. Ved at bruge `SaslMechanismOAuth2()`-mekanismen kan MailKit derefter autentificere e-mail-afsendelsesprocessen ved hjælp af dette token og helt omgå grundlæggende godkendelse. Denne metode sikrer, at applikationen overholder moderne sikkerhedsprotokoller og undgår forældede metoder.
I den anden løsning bruges Microsoft Graph API til at sende e-mails uden at interagere direkte med SMTP-serveren. Microsoft Graph leverer en alt-i-én-løsning til administration af Microsoft-tjenester, herunder Outlook-e-mails. Graph API'en udnytter OAuth2-godkendelse gennem `DelegateAuthenticationProvider()`, som tildeler et OAuth2-token til hver anmodning. Dette token genereres på samme måde ved hjælp af MSAL. 'GraphServiceClient'-objektet letter sikker kommunikation med Microsofts servere, hvilket gør det muligt for API'et at sende e-mails problemfrit. Denne metode er især nyttig for dem, der ønsker at håndtere et bredere sæt af Microsoft-tjenester med færre direkte forbindelser til individuelle tjenester som SMTP.
Til sidst, i den tredje løsning, udforskede vi en mere traditionel tilgang ved hjælp af den indbyggede System.Net.Mail navneområde for .NET. Mens den stadig bruger OAuth2 til godkendelse, erstatter denne metode MailKit med System.Net.Mails SMTP-klient til afsendelse af e-mails. OAuth2-tokenet sendes ind som legitimationsoplysninger i stedet for den sædvanlige kombination af brugernavn og adgangskode. E-mailen er konstrueret og sendt ved hjælp af de typiske 'MailMessage'- og 'SmtpClient'-objekter. Denne tilgang kan være nyttig for udviklere, der foretrækker at arbejde med native .NET-biblioteker, men som stadig kræver sikker OAuth2-godkendelse til at sende e-mails.
Alle disse metoder løser ikke kun problemet med, at grundlæggende godkendelse er deaktiveret, men fremtidssikrer også e-mail-afsendelsesfunktionaliteten i din ASP.NET Core Web API. Hver løsning fremhæver vigtigheden af sikkerhed gennem OAuth2, der erstatter forældede og mindre sikre autentificeringsmetoder. Ved at udnytte moderne godkendelsesbiblioteker som MSAL og Microsoft Graph kan udviklere sikre, at deres applikationer forbliver kompatible med de nyeste sikkerhedsstandarder, mens de stadig tilbyder pålidelige e-mail-afsendelsesfunktioner.
Løsning 1: Skift til OAuth2 til Outlook-godkendelse
Denne tilgang bruger ASP.NET Core og MailKit, der erstatter grundlæggende godkendelse med OAuth2, som er den anbefalede metode til sikker afsendelse af e-mail i Outlook.
// Step 1: Install required NuGet packages
// MailKit, MimeKit, and Microsoft.Identity.Client for OAuth2
using MailKit.Net.Smtp;
using MimeKit;
using Microsoft.Identity.Client;
// Step 2: Configure OAuth2 authentication
var clientId = "your-client-id";
var tenantId = "your-tenant-id";
var clientSecret = "your-client-secret";
var cca = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
var scopes = new[] { "https://outlook.office365.com/.default" };
var result = await cca.AcquireTokenForClient(scopes).ExecuteAsync();
// Step 3: Send email using OAuth2 token
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress("Your Name", "your-email@outlook.com"));
emailMessage.To.Add(new MailboxAddress("Recipient", "recipient@example.com"));
emailMessage.Subject = "Subject";
emailMessage.Body = new TextPart("plain") { Text = "Hello, this is a test email." };
using (var smtpClient = new SmtpClient())
{
await smtpClient.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls);
await smtpClient.AuthenticateAsync(new SaslMechanismOAuth2("your-email@outlook.com", result.AccessToken));
await smtpClient.SendAsync(emailMessage);
await smtpClient.DisconnectAsync(true);
}
Løsning 2: Brug af Microsoft Graph API til at sende e-mails
Denne metode involverer brug af Microsoft Graph API til at sende e-mails fra en ASP.NET Core-backend, hvorved SMTP-konfigurationen helt omgås.
// Step 1: Add Microsoft.Graph NuGet package
using Microsoft.Graph;
using Microsoft.Identity.Client;
// Step 2: Configure Graph API and authentication
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithTenantId(tenantId)
.WithClientSecret(clientSecret)
.Build();
var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) =>
{
var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
}));
// Step 3: Prepare and send email via Graph API
var message = new Message
{
Subject = "Test Email",
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = "Hello, this is a test email sent via Microsoft Graph API."
},
ToRecipients = new List<Recipient>()
{
new Recipient { EmailAddress = new EmailAddress { Address = "recipient@example.com" } }
}
};
await graphClient.Users["your-email@outlook.com"].SendMail(message, false).Request().PostAsync();
Løsning 3: Brug af OAuth2 med SMTP (Different Library)
Denne tilgang bruger System.Net.Mail til at sende e-mails med OAuth2 i stedet for MailKit med den samme OAuth-godkendelsesmetode.
// Step 1: Configure OAuth2 with System.Net.Mail
var smtpClient = new SmtpClient("smtp.office365.com")
{
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("your-email@outlook.com", accessToken)
};
// Step 2: Construct the email message
var mailMessage = new MailMessage
{
From = new MailAddress("your-email@outlook.com"),
Subject = "Test Email",
Body = "This is a test email sent using System.Net.Mail with OAuth2.",
IsBodyHtml = true
};
mailMessage.To.Add("recipient@example.com");
// Step 3: Send the email
await smtpClient.SendMailAsync(mailMessage);
Implementering af moderne sikkerhedsstandarder for afsendelse af e-mail
I forbindelse med moderne e-mail-systemer bliver grundlæggende autentificering i stigende grad set som forældet og usikkert. Dette gælder især for større tjenesteudbydere som Outlook, som har deaktiveret grundlæggende godkendelse for at håndhæve mere sikre mekanismer som OAuth2. Grundlæggende godkendelse, som udelukkende er afhængig af et brugernavn og en adgangskode, er sårbar over for brute force-angreb og kan blive kompromitteret, hvis legitimationsoplysninger bliver stjålet. Skift til OAuth2, som Microsoft opfordrer til, sikrer derfor, at tokens udveksles sikkert uden at afsløre brugerlegitimationsoplysninger.
Et afgørende aspekt ved implementering af OAuth2 er konceptet med adgangstokens. I stedet for at stole på direkte godkendelse gennem SMTP-servere, udsteder OAuth2 tidsbundne tokens, der tillader sikker adgang til ressourcer som e-mail-tjenester. Disse tokens tildeles af en godkendelsesserver, og udviklere kan få dem ved hjælp af biblioteker som Microsoft Identity Client (MSAL). Med disse tokens får applikationer begrænset adgang til brugerens konto, hvilket reducerer de risici, der er forbundet med langvarige, statiske legitimationsoplysninger.
Desuden tilpasser adoption af OAuth2 ikke kun din applikation med moderne sikkerhedspraksis, men forbereder den også til fremtidige udviklinger. Mange API'er, inklusive dem til cloud-baserede tjenester, er nu stærkt afhængige af OAuth2 til sikker kommunikation. Dette sikrer, at e-mail-afsendelsesfunktionen forbliver funktionel og sikker, efterhånden som tjenesterne udvikler sig. For udviklere, der integrerer MailKit med ASP.NET CoreOAuth2 giver en række sikkerhedsforbedringer, fra token-baseret godkendelse til krypterede transmissioner via protokoller som STARTTLS.
Ofte stillede spørgsmål om Outlook-godkendelse i ASP.NET Core
- Hvad forårsager fejlen 535: 5.7.139 i Outlook?
- Denne fejl opstår, fordi grundlæggende godkendelse er deaktiveret for Outlooks SMTP-server. Microsoft kræver nu OAuth2 for sikker godkendelse.
- Hvordan kan jeg aktivere OAuth2 i MailKit?
- Du kan implementere OAuth2 ved at bruge ConfidentialClientApplicationBuilder.Create() for at konfigurere din applikation og SaslMechanismOAuth2() for at godkende e-mail-afsendelse med tokens.
- Hvad er alternativet til grundlæggende godkendelse til afsendelse af e-mails i Outlook?
- OAuth2 er det foretrukne alternativ. Den bruger tokens i stedet for brugernavne og adgangskoder til sikker, tidsbegrænset godkendelse.
- Er Microsoft Graph API bedre end at bruge SMTP til at sende e-mails?
- Microsoft Graph API er en bredere tjeneste, der kan håndtere mere end blot at sende e-mails. Det er mere alsidigt og anbefales, hvis du har brug for adgang til forskellige Microsoft 365-ressourcer.
- Hvordan tester jeg, om OAuth2 fungerer korrekt i min applikation?
- Du kan implementere enhedstests for at bekræfte, at dine OAuth2-tokens bliver genereret og sendt korrekt til e-mail-afsendelsestjenesten.
Endelige tanker om Outlook-godkendelse med ASP.NET Core
Løsning af den grundlæggende godkendelsesfejl i Outlook kræver vedtagelse af moderne sikkerhedsstandarder som OAuth2. Denne tilgang eliminerer sårbarhederne ved grundlæggende godkendelse og giver en mere sikker metode til at sende beskeder gennem Outlooks SMTP-server.
Ved at integrere OAuth2 med ASP.NET Core og MailKit kan udviklere fremtidssikre deres applikationer, hvilket sikrer sikker kommunikation og overholdelse af opdaterede krav til tjenesteudbydere. Dette løser ikke kun godkendelsesproblemet, men forbedrer også den overordnede sikkerhed og funktionalitet.
Kilder og referencer til Outlook-godkendelsesproblemer
- Detaljeret dokumentation om Microsofts udfasning af grundlæggende godkendelse og OAuth2-implementering: Microsoft Exchange Online Basic Auth udfasning
- Omfattende guide til brug af MailKit og MimeKit i .NET til e-mailfunktioner: MailKit dokumentation
- MSAL (Microsoft Identity Client) biblioteksdokumentation til OAuth2-godkendelse: Microsoft Identity Platform (MSAL) Oversigt