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

如何在Appsmith中实现指定日期(如30天后)的邮件提醒功能?

在Appsmith中实现指定日期自动发送邮件提醒的方案

核心逻辑说明

Appsmith本身没有内置长期定时任务调度能力,需结合数据库存储待触发任务 + 定时执行邮件发送逻辑实现需求,以下是具体落地步骤:


1. 存储提醒任务到数据库

当用户提交表单并勾选「30天后通知我」时,计算目标触发日期,将提醒元数据存入数据库(支持Appsmith内置数据库或外部数据库如PostgreSQL/MySQL)。

实现代码(表单提交按钮的onClick事件)

// 仅当用户勾选提醒选项时执行
if (reminderCheckbox.isChecked) {
    // 计算30天后的日期,转成数据库兼容的YYYY-MM-DD格式
    const triggerDate = new Date();
    triggerDate.setDate(triggerDate.getDate() + 30);
    const formattedDate = triggerDate.toISOString().split('T')[0];

    // 调用数据库插入API(需提前配置数据库连接及`reminders`表)
    insertReminder.run({
        email: userEmailInput.text,
        reminder_content: `您的表单提交提醒:${formContentArea.text}`,
        trigger_at: formattedDate,
        status: 'pending' // 标记为未触发
    });
}

// 执行常规表单提交逻辑
submitMainForm.run();

reminders表建议字段:

  • id(主键)
  • email(接收提醒的邮箱)
  • reminder_content(提醒内容)
  • trigger_at(触发日期,DATE类型)
  • status(状态:pending/sent/failed)

2. 实现定时触发与邮件发送

有两种可靠方案实现定时执行提醒逻辑:

方案A:Appsmith API + 外部定时调度工具

步骤1:创建Appsmith触发API

在Appsmith中新建API,功能为查询当日待触发提醒、发送邮件、更新任务状态:

// 查询今日待触发的未处理提醒
const pendingTasks = getPendingReminders.run({
    today: new Date().toISOString().split('T')[0]
}).data;

// 遍历发送邮件并更新状态
for (const task of pendingTasks) {
    // 调用Appsmith内置邮件插件发送邮件(需提前配置SMTP或邮件服务密钥)
    sendReminderEmail.run({
        to: task.email,
        subject: '您的30天表单提醒',
        body: task.reminder_content
    });

    // 更新任务状态为已发送
    updateReminderStatus.run({
        taskId: task.id,
        newStatus: 'sent'
    });
}

步骤2:配置外部定时调度

使用外部工具每日定时调用上述API的公开地址:

  • Linux服务器:用cron设置每日凌晨执行curl请求
  • 云服务:用AWS CloudWatch Events、GCP Cloud Scheduler
  • 代码托管平台:用GitHub Actions定时任务

注意:需将Appsmith API设置为公开访问,或配置API密钥认证确保安全性。

方案B:数据库定时事件(适用于支持事件调度的数据库)

如果使用MySQL/PostgreSQL等支持定时事件的数据库,可直接在数据库中创建每日执行的事件,完成查询、邮件发送、状态更新流程。

MySQL示例代码

-- 开启事件调度(仅首次执行)
SET GLOBAL event_scheduler = ON;

-- 创建每日凌晨1点执行的提醒触发事件
CREATE EVENT daily_reminder_trigger
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 1 DAY + INTERVAL 1 HOUR
DO
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE target_email VARCHAR(255);
    DECLARE target_content TEXT;
    DECLARE task_id INT;

    -- 声明游标遍历今日待触发任务
    DECLARE task_cursor CURSOR FOR 
        SELECT id, email, reminder_content 
        FROM reminders 
        WHERE trigger_at = CURDATE() AND status = 'pending';
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN task_cursor;
    task_loop: LOOP
        FETCH task_cursor INTO task_id, target_email, target_content;
        IF done THEN
            LEAVE task_loop;
        END IF;

        -- 调用Appsmith邮件API发送邮件(需使用数据库HTTP UDF,如MySQL的`http_post`)
        SELECT http_post(
            'https://your-appsmith-domain/api/v1/apps/[APP_ID]/apis/sendReminderEmail',
            JSON_OBJECT('email', target_email, 'content', target_content)
        );

        -- 更新任务状态
        UPDATE reminders SET status = 'sent' WHERE id = task_id;
    END LOOP;
    CLOSE task_cursor;
END;

3. 表单前端配置

在表单中添加复选框组件,设置标签为「30天后通知我」,绑定到提交逻辑中的判断条件即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:05:38