You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

form.submit()触发动作耗时超40秒问题排查与解决

解决Azure VM上ASP.NET同步邮件发送阻塞页面的问题

核心问题原因

Azure VM对年消费未达100万美元的用户硬阻塞25端口,同步执行的邮件发送代码因连接超时(约40秒)导致页面加载阻塞,进而影响ASP到ASPX的会话传递流程。


可行解决方案

1. 切换至Azure允许的邮件端口

Azure VM默认开放**587(STARTTLS)和465(SSL/TLS)**端口用于邮件发送,无需额外消费门槛。修改邮件发送代码的端口配置即可:

Dim smtpClient As New SmtpClient("smtp.your-email-provider.com")
smtpClient.Port = 587 ' 或465,需对应开启SSL/TLS
smtpClient.EnableSsl = True
smtpClient.Credentials = New NetworkCredential("your-account@example.com", "your-password")

2. 异步执行邮件发送逻辑

将同步邮件发送改为异步处理,彻底避免阻塞页面请求流程:

' 页面后台代码中使用Async/Await
Protected Async Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    ' 先完成会话传递等核心逻辑
    ' ...
    ' 异步执行邮件发送,不阻塞页面响应
    Await SendEmailAsync()
End Sub

Private Async Function SendEmailAsync() As Task
    Dim mailMsg As New MailMessage(
        "sender@example.com",
        "recipient@example.com",
        "会话传递通知",
        "用户完成ASP到ASPX的会话迁移"
    )

    Using smtpClient As New SmtpClient("smtp.your-provider.com", 587)
        smtpClient.EnableSsl = True
        smtpClient.Credentials = New NetworkCredential("your-account", "your-password")
        Await smtpClient.SendMailAsync(mailMsg)
    End Using
End Function

3. 采用Azure原生邮件服务

如果站点有大量邮件发送需求,推荐使用Azure Communication Services或Azure Logic Apps:

  • 完全适配Azure环境,无端口限制问题
  • 提供更高的投递可靠性和监控能力
  • 可通过API或可视化流程配置邮件发送逻辑

4. 临时超时控制方案

若暂时无法大规模修改代码,可给邮件发送添加超时限制,避免长时间阻塞:

Dim smtpClient As New SmtpClient("smtp.your-provider.com")
smtpClient.Port = 587
smtpClient.EnableSsl = True
smtpClient.Credentials = New NetworkCredential("your-account", "your-password")
smtpClient.Timeout = 5000 ' 设置5秒超时

Try
    smtpClient.Send(mailMsg)
Catch ex As SmtpException
    ' 记录超时异常,不影响页面核心流程
    ' 后续可通过日志系统排查邮件投递问题
End Try

内容的提问来源于stack exchange,提问作者G_Hosa_Phat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:22:39