出现这个错误是由于ASP.NET CORE应用程序中使用了OAuth2身份验证。要解决此问题,需要更改应用程序设置以允许此操作,并获取正确的OAuth2令牌。
以下是一个示例,展示如何使用Gmail帐户发送电子邮件:
1.在Startup.cs文件中,将你的电子邮件设置添加到ConfigureServices方法中:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = GoogleDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddGoogle(options =>
{
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
services.AddTransient();
2.在应用程序中创建一个EmailSender.cs文件,在其中添加发送电子邮件的方法:
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Google;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
public class EmailSender
{
private readonly GmailService _gmailService;
private readonly IConfiguration _configuration;
private readonly IHostingEnvironment _hostingEnvironment;
public EmailSender(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{
_configuration = configuration;
_hostingEnvironment = hostingEnvironment;
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
{
ClientId = _configuration["Authentication:Google:ClientId"],
ClientSecret = _configuration["Authentication:Google:ClientSecret"]
},
new[] { GmailService.Scope.GmailSend }, "user", CancellationToken.None, new FileDataStore(_hostingEnvironment.WebRootPath)).Result;
_gmailService = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = _configuration["Authentication:Google:ApplicationName"],
});
}
public async Task SendMessageAsync(string from, string to, string subject, string