MailKit代码可用于开发和暂存,但不能用于Azure应用程序服务


  • 问题:代码在开发环境和暂存环境中运行良好,但在部署到azure和应用程序服务后运行不好。由于它在开发/暂存环境中可以很好地连接到电子邮件服务器,我猜这是Azure中的配置问题

到目前为止我所做的没有结果:

  • 更改azure中的应用服务TLS版本
  • 更新了Mailkit
  • 已检查SmtpClient的服务器证书回调
  • 正在尝试不同的帐户凭据
  • 使用端口587或465
  • 延长超时时间

代码(连接方法失败(:

public async Task<SmtpClient> GetSmtpClient()
{
SmtpClient client = new();
try
{
await client.ConnectAsync(smtpAddress, port, MailKit.Security.SecureSocketOptions.Auto);
await client.AuthenticateAsync(username, password);
}
catch (Exception)
{
throw;
}
return client;
}

结果:

Exception: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
StackTrace:
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
--- End of stack trace from previous location ---

结束

  • 我正在尝试让它在azure应用程序服务上运行
  • 异常是由于尝试连接到电子邮件服务器时超时而发生的,这在dev/stating envs中没有发生。因此,可能由于某种原因,电子邮件服务器不接受来自azure的连接,导致socketError

我真的很感激你能给我的任何线索。祝你一切顺利。

错误似乎是您的应用程序服务没有访问邮件服务器的权限。因此,您需要配置规则以提供访问权限。检查https://learn.microsoft.com/en-us/azure/app-service/app-service-ip-restrictions其具有检查规则和添加新规则以允许的步骤。

这个问题原来是邮件服务器阻塞了Web应用程序的IP。目前尚不清楚该IP被屏蔽的原因。在他们解除Ip后,Smtp客户端连接没有问题,一切都很好。

相关内容

  • 没有找到相关文章

最新更新