private async Task <EmailVerificationStatus> GetStatusAsync(string emailAddress, CancellationToken ct) { var request = new GetIdentityVerificationAttributesRequest { Identities = new List <string> { emailAddress } }; var response = await amazonSES.GetIdentityVerificationAttributesAsync(request, ct); var status = response.VerificationAttributes.FirstOrDefault(x => string.Equals(emailAddress, x.Key, StringComparison.OrdinalIgnoreCase)); return(MapStatus(status.Value.VerificationStatus)); }
public static void VerifyEmails(params string[] emails) { // start verification process for all email addresses foreach (var email in emails) { _client.VerifyEmailIdentityAsync(new VerifyEmailIdentityRequest { EmailAddress = email }); } // wait until all are verified, maximum wait time of two minutes bool allVerified = true; DateTime latest = DateTime.Now + TimeSpan.FromMinutes(2); while (DateTime.Now < latest) { // get verification status for all emails var attr = _client.GetIdentityVerificationAttributesAsync(new GetIdentityVerificationAttributesRequest { Identities = new List <string>(emails) }); attr.Wait(); var verificationAttributes = attr.Result.VerificationAttributes; // test verification status allVerified = true; foreach (var email in emails) { var attribute = verificationAttributes[email]; if (attribute.VerificationStatus != VerificationStatus.Success) { allVerified = false; } } if (allVerified) { break; } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(15)); } if (!allVerified) { throw new InvalidOperationException("Not all email addresses have been verified"); } }
private async Task <IntegrationStatus> GetStatusAsync(List <string> fromEmails, CancellationToken ct) { var request = new GetIdentityVerificationAttributesRequest { Identities = fromEmails.ToList() }; var response = await amazonSES.GetIdentityVerificationAttributesAsync(request, ct); var statuses = new List <IntegrationStatus>(); foreach (var emailAddress in fromEmails) { var status = IntegrationStatus.Pending; if (response.VerificationAttributes.TryGetValue(emailAddress, out var result)) { status = MapStatus(result.VerificationStatus); } if (status == IntegrationStatus.VerificationFailed) { return(status); } statuses.Add(status); } if (statuses.All(x => x == IntegrationStatus.Verified)) { return(IntegrationStatus.Verified); } return(IntegrationStatus.Pending); }