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

如何使用DBMail每日向对应客户定向发送当日发货明细数据

发货明细自动邮件任务实现方案

1. 核心逻辑梳理

整个任务的核心逻辑是「先提取当日有发货记录的唯一客户列表→逐客户筛选对应发货数据→拼装HTML后调用DBMail发送」,不需要额外引入第三方工具,纯SQL脚本就能实现。

2. 具体实现步骤

2.1 提取当日唯一客户列表

首先从你的发货明细表中去重筛选出当日有发货记录的客户信息,避免同一个客户重复收到多封邮件,参考SQL:

-- 生成当日有发货记录的唯一客户临时表
SELECT DISTINCT 
    [Sell-to Customer No_] AS CustNo,
    [Sell-to Customer Name] AS CustName,
    [Cust E-Mail] AS CustEmail
INTO #TodayShipCust
FROM 你的发货表名 -- 替换为你实际的表名
WHERE 发货日期字段 = CAST(GETDATE() AS DATE) -- 替换为你实际的发货日期字段和筛选条件

2.2 遍历客户逐一生成并发送邮件

用循环遍历上面生成的临时表,每次处理单个客户的明细数据,你已掌握的HTML拼装和DBMail发送逻辑可以直接复用,完整脚本参考:

-- 声明客户信息临时变量
DECLARE @CurrCustNo VARCHAR(50), @CurrCustName VARCHAR(100), @CurrCustEmail VARCHAR(100)
DECLARE @EmailSubject VARCHAR(200), @EmailBody NVARCHAR(MAX)

-- 循环处理所有客户
WHILE EXISTS(SELECT 1 FROM #TodayShipCust)
BEGIN
    -- 取出当前待处理客户
    SELECT TOP 1 
        @CurrCustNo = CustNo,
        @CurrCustName = CustName,
        @CurrCustEmail = CustEmail
    FROM #TodayShipCust

    -- 拼装邮件主题
    SET @EmailSubject = @CurrCustName + ' ' + CONVERT(VARCHAR(10), GETDATE(), 23) + ' 发货明细清单'

    -- 筛选当前客户的当日发货明细,拼装为HTML格式
    -- 这里直接替换为你自己的HTML拼装逻辑即可
    SET @EmailBody = N'
    <h3>尊敬的' + @CurrCustName + ':</h3>
    <p>以下是您今日的发货明细:</p>
    <table border="1" cellpadding="5" cellspacing="0">
        <tr><th>发货单号</th><th>商品编号</th><th>发货数量</th><th>物流单号</th></tr>' + 
        CAST((
            SELECT 
                [Ship No] AS 'td', '',
                [Item Number] AS 'td', '',
                [Qty] AS 'td', '',
                [Package Tracking No_] AS 'td'
            FROM 你的发货表名
            WHERE [Sell-to Customer No_] = @CurrCustNo AND 发货日期字段 = CAST(GETDATE() AS DATE)
            FOR XML PATH('tr'), ELEMENTS
        ) AS NVARCHAR(MAX)) +
    N'</table>'

    -- 调用DBMail发送邮件
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = '你的DBMail配置文件名', -- 替换为你实际的DBMail配置名
        @recipients = @CurrCustEmail,
        @subject = @EmailSubject,
        @body = @EmailBody,
        @body_format = 'HTML'

    -- 删除已处理客户,进入下一轮循环
    DELETE FROM #TodayShipCust WHERE CustNo = @CurrCustNo
END

-- 清理临时表
DROP TABLE #TodayShipCust

2.3 配置每日定时调度

直接用SQL Server代理作业实现每日自动运行:

  • 打开SSMS,找到「SQL Server 代理」,右键新建作业
  • 新增步骤,类型选「Transact-SQL(T-SQL)」,数据库选你对应的业务库,把上面的完整脚本粘贴到命令框
  • 切换到「调度」页,新建调度,设置每天你需要运行的时间(建议选在当日所有发货数据都录入完成的时间点,比如每日18:00)

3. 上线前注意事项

  • 测试阶段可以先注释掉sp_send_dbmail的执行语句,改为把@CurrCustEmail和@EmailBody插入到自定义的日志表,确认每个客户的明细、收件邮箱都正确后再开启发送
  • 可以额外增加TRY/CATCH异常捕获逻辑,记录发送失败的客户信息,方便后续手动补送
  • 可以加一层判断,如果客户当日没有发货明细(异常场景)直接跳过发送,避免发空内容邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:05