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

Astro API路由本地正常但Vercel部署后超时问题求助

解决Astro + Vercel下Nodemailer API超时问题

1. 排查SMTP配置问题

本地正常但部署后超时,大概率是邮件服务商的SMTP连接在Vercel环境下受阻:

  • 优先使用SSL端口465而非TLS端口587,Vercel的serverless网络对SSL连接兼容性更好,减少握手延迟;
  • 若用Gmail等服务商,必须使用应用专用密码(而非普通账号密码),且确保账号开启了IMAP/SMTP服务;
  • 检查SMTP主机地址是否正确,避免拼写错误(比如smtp.gmail.com而非smtp.google.com)。

2. 确保API路由正确处理响应

Astro的API路由必须明确返回响应,避免函数挂起导致超时。示例路由代码:

// src/pages/api/sendmail.json.ts
import type { APIRoute } from 'astro';
import nodemailer from 'nodemailer';

export const POST: APIRoute = async ({ request }) => {
  try {
    const { email } = await request.json();
    // 初始化 transporter
    const transporter = nodemailer.createTransport({
      host: import.meta.env.SMTP_HOST,
      port: 465,
      secure: true,
      auth: {
        user: import.meta.env.SMTP_USER,
        pass: import.meta.env.SMTP_PASS,
      },
    });

    // 发送邮件
    await transporter.sendMail({
      from: '"你的名称" <your-email@example.com>',
      to: email,
      subject: '测试邮件',
      text: '这是来自Astro + Vercel的邮件',
    });

    // 返回成功响应
    return new Response(JSON.stringify({ success: true }), {
      status: 200,
      headers: { 'Content-Type': 'application/json' },
    });
  } catch (err) {
    console.error('邮件发送失败:', err);
    // 返回错误响应
    return new Response(JSON.stringify({ success: false, error: '发送失败' }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
    });
  }
};

3. 同步环境变量到Vercel

本地.env文件中的SMTP_HOST、SMTP_USER、SMTP_PASS等变量,必须在Vercel项目的设置 -> 环境变量中添加,且确保部署时变量已生效(可在Vercel控制台的构建日志中验证)。

4. 保留Hybrid输出模式

无需将Astro的output改为server,Hybrid模式已足够支持serverless API路由。之前改server模式导致页面无法加载,可能是页面配置了prerender: true但依赖动态内容,保持hybrid模式即可。

5. 查看Vercel函数日志定位问题

登录Vercel控制台,进入项目的函数页面,找到sendmail.json函数,查看运行日志,里面会显示具体的错误信息(比如认证失败、连接超时、端口被屏蔽等),这是定位问题最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:56:28