/// <summary> /// /// </summary> public async Task <(int success, int failure)> DoMailErrorRecoveryAsync() { var _result = (success : 0, failure : 0); using (var _ltctx = _contextFactory.CreateDbContext()) { var _members = _ltctx.tb_lion_member .Where(m => m.IsAlive == true && m.MailError == true) .ToList(); foreach (var _member in _members) { try { _ltctx.Database.BeginTransaction(); var _verify = await _smtpDirect.VerifyMailServerConnection2Async(_mailSender.MailSenderAddress, _member.EmailAddress); if (_verify.error_code == SmtpError.GENERIC_SUCCESS) { _logger.LogInformation($"[worker.purger] mail error recovered '{_member.EmailAddress}', {_verify.error_code}, {_verify.error_message}"); _member.MailError = false; _result.success++; } else { _logger.LogInformation($"[worker.purger] mail error detected '{_member.EmailAddress}', {_verify.error_code}, {_verify.error_message}"); var _error_msgs = _verify.error_message.Split(' '); if (_error_msgs.Length > 0 && _error_msgs[0] == "550") { _member.IsAlive = false; } _result.failure++; } _ltctx.SaveChanges(); _ltctx.Database.CommitTransaction(); } catch { _ltctx.Database.RollbackTransaction(); _result.failure++; } } } return(_result); }
public async Task <(SmtpError error_code, string error_message)> TestMailServerConnectionAsync(mMember member) { var _result = (error_code : SmtpError.GENERIC_SUCCESS, error_message : ""); try { var _verify = await __smtp_direct.VerifyMailServerConnection2Async(MailSenderAddress, member.EmailAddress); if (_verify.error_code != SmtpError.GENERIC_SUCCESS) { member.MailError = true; _result = _verify; } } catch { member.MailError = true; _result.error_code = SmtpError.CONNECT_ERROR; } return(_result); }