Я создал WebAPI и опубликовал его в AWS Lambda. В рамках этого API я автоматически отправляю некоторые электронные письма через GMail SMTP. Мой код электронной почты выглядит так:
var secrets = new ClientSecrets
{
ClientId = Environment.GetEnvironmentVariable("GMailClientId"),
ClientSecret = Environment.GetEnvironmentVariable("GMailClientSecret")
};
var googleCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, new[] { GmailService.Scope.MailGoogleCom }, ((MailboxAddress)message.From.First()).Address, CancellationToken.None);
if (googleCredentials.Token.IsExpired(SystemClock.Default))
{
await googleCredentials.RefreshTokenAsync(CancellationToken.None);
}
using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
var oauth2 = new SaslMechanismOAuth2(googleCredentials.UserId, googleCredentials.Token.AccessToken);
client.Authenticate(oauth2);
await client.SendAsync(message);
client.Disconnect(true);
}
Это прекрасно работает на моем локальном компьютере, но при попытке запустить его через AWS Lambda при вызове GoogleWebAuthorizationBroker.AuthorizeAsync
появляется следующая ошибка:
Относительные пути FileDataStore не поддерживаются на этой платформе.
GoogleWebAuthorizationBroker
определяет AuthorizeAsync
как:
public static Task<UserCredential> AuthorizeAsync(ClientSecrets clientSecrets, IEnumerable<string> scopes, string user, CancellationToken taskCancellationToken, IDataStore dataStore = null, ICodeReceiver codeReceiver = null);
Я не предоставляю ничего для параметра dataStore, поэтому по умолчанию он использует реализацию FileDataStore
.
Я предполагаю, что Lambda не нравится это, потому что он пытается получить доступ к файловой системе.
Кто-нибудь сталкивался с этой проблемой раньше, и если да, знаете ли вы решение? Я не уверен, что любая из реализаций Google для IDataStore
будет работать?
https://developers.google.com/api-client-library/dotnet/reference/1.9.2/interfaceGoogle_1_1Apis_1_1Util_1_1Store_1_1IDataStore
EDIT:
Интересно, нужно ли мне создать реализацию базы данных IDataStore? Что-то вроде: https://www.codeproject.com/Articles/1088092/ADO-NET-Implementation-of-Google-API-IDataStore. Кажется немного странным, что Google не предоставляет такую реализацию, хотя ...