- 问题:代码在开发环境和暂存环境中运行良好,但在部署到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客户端连接没有问题,一切都很好。