Я работал некоторое время, чтобы попытаться заставить эту систему работать с системой gmail api и служебной учетной записью (чтобы избежать создания пустой учетной записи пользователя), и я не уверен, в чем я ошибся .
public static async Task<ServiceResponse> SendMail(ContactUsModel ContactInfo)
{
ServiceResponse response = new ServiceResponse();
try
{
var certificate = new X509Certificate2(@"cert.p12", "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("service account")
{
// Note: other scopes can be found here: https://developers.google.com/gmail/api/auth/scopes
Scopes = new[] { "https://mail.google.com" },
User = "service account"
}.FromCertificate(certificate));
// Note: result will be true if the access token was received successfully
bool result = await credential.RequestAccessTokenAsync(CancellationToken.None);
// create an OAuth2 SASL context
var oauth2 = new SaslMechanismOAuth2("service account", credential.Token.AccessToken);
MimeMessage msg = new MimeMessage();
msg.From.Add(new MailboxAddress(ContactInfo.Name, ContactInfo.EmailAddress));
msg.To.Add(new MailboxAddress("Me", "business email account"));
msg.Subject = ContactInfo.Subject;
msg.Body = new TextPart("plain")
{
Text = $"From: {ContactInfo.Name}\nEmail: {ContactInfo.EmailAddress}\nDate:{ContactInfo.AppointmentDate.ToString()}\nMessage: {ContactInfo.Message}"
};
using(SmtpClient client = new SmtpClient())
{
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
client.Authenticate(oauth2);
client.Send(msg);
client.Disconnect(true);
}
response.Success = true;
response.Message = "Message Sent";
}
catch (Exception e)
{
response.Success = false;
response.Message = "An error occurred. Please call us.";
}
return response;
}
Я включил API gmail и установил учетную запись службы для облачной функции invoker.
Это ошибка, которую я получаю в настоящее время, и я не знаю, почему.
{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"}
Редактировать: обновить код и сообщение об ошибке обновления.