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

如何在Alfresco中实现文档到期前若干天向用户发送邮件通知

Alfresco 5.2 社区版本身没有内置的文档到期自动邮件提醒功能,Windows平台部署的环境可以通过自定义属性配置+脚本/定时任务组合的方式实现,具体操作步骤如下:

前置配置

首先完成两项基础配置:

  • 配置外发邮件服务
    打开alfresco-global.properties文件(默认部署路径为C:\alfresco-community\tomcat\shared\classes\alfresco-global.properties),添加如下SMTP配置:
    mail.host=你的SMTP服务器地址
    mail.port=SMTP服务端口(SSL加密通常为465,非加密通常为25)
    mail.username=发件人邮箱账号
    mail.password=发件人邮箱授权码
    mail.protocol=smtps
    mail.smtps.auth=true
    mail.smtps.starttls.enable=true
    mail.from.default=默认发件人邮箱地址
    
    配置完成后可以在管理员后台测试邮件发送功能是否正常。
  • 新增文档到期日期属性
    用管理员账号登录Alfresco Share,进入【管理员工具】-【模型管理器】,新建自定义内容模型,添加一个expirationDate的日期类型属性(可绑定为独立方面aspect),给需要启用到期提醒的文档绑定该方面并填写对应到期日期。
方案一:规则+脚本实现(适合小范围文档库、触发条件为文档变更的场景)

该方案实现简单,无需额外开发Java代码:

  • 编写提醒脚本
    新建JavaScript脚本文件,命名为send-expiration-reminder.js,内容如下:
    // 获取文档到期日期
    var expDate = document.properties["cm:expirationDate"];
    if (!expDate) {
        exit;
    }
    // 计算日期差
    var currentDate = new Date();
    var diffDays = Math.ceil((expDate.getTime() - currentDate.getTime()) / (1000 * 3600 * 24));
    // 提前X天提醒,可自行修改数值
    var remindBeforeDays = 7;
    if (diffDays == remindBeforeDays) {
        // 收件人可根据需求调整为文档协作人、指定管理员等
        var recipient = document.creator;
        if (!recipient.properties["cm:email"]) {
            exit;
        }
        // 构造邮件内容
        var subject = "文档到期提醒:《" + document.name + "》即将到期";
        var content = "您好:<br/><br/>您负责的文档《" + document.name + "》还有" + remindBeforeDays + "天到期,请及时处理。<br/>文档访问地址:" + shareUrl + "/page/site/" + document.siteShortName + "/document-details?nodeRef=" + document.nodeRef;
        // 执行发送邮件动作
        actions.create("mail").execute(document, {
            to: recipient.properties["cm:email"],
            subject: subject,
            html: true,
            body: content
        });
    }
    
  • 部署脚本
    将写好的js文件放到C:\alfresco-community\tomcat\shared\classes\alfresco\extension\scripts目录下,重启Alfresco服务后脚本即可被规则调用。
  • 配置文档库规则
    进入需要启用提醒的文档库,点击右上角【更多】-【管理规则】,新建规则:
    • 触发条件:选择"内容被创建"或"内容被更新"
    • 执行操作:选择"运行脚本",选中刚才上传的send-expiration-reminder.js
    • 应用范围:选择应用到该文件夹下所有子内容
      *注:Alfresco 5.2社区版默认规则不支持定时触发,该方案仅会在文档创建、更新时检查到期时间,如需每天自动全量扫描请使用方案二。
方案二:自定义定时任务实现(适合全平台文档扫描、灵活配置提醒天数的场景)

该方案可以实现定期批量扫描所有符合条件的文档,支持自定义提醒天数和执行时间:

  • 编写任务执行逻辑
    可以用Java或JavaScript编写扫描逻辑,逻辑和上述脚本基本一致,支持多轮提醒(比如提前30天、7天、1天各发送一次提醒)。
  • 配置定时任务
    在C:\alfresco-community\tomcat\shared\classes\alfresco\extension目录下新建Spring配置文件scheduled-expiration-job-context.xml,内容如下:
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
    <beans>
        <!-- 定时任务定义 -->
        <bean id="expirationReminderJob" class="org.alfresco.schedule.AbstractScheduledLockedJob">
            <property name="jobDetail">
                <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                    <property name="jobClass" value="org.alfresco.repo.security.authentication.AuthenticationUtil$RunAsJob"/>
                    <property name="jobDataAsMap">
                        <map>
                            <entry key="runAsUser" value="admin"/>
                            <entry key="targetBean" value="expirationReminderService"/>
                            <entry key="targetMethod" value="scanAndSendReminder"/>
                        </map>
                    </property>
                </bean>
            </property>
            <!-- 执行周期配置,cron表达式表示每天凌晨1点执行 -->
            <property name="trigger">
                <bean class="org.springframework.scheduling.quartz.CronTriggerBean">
                    <property name="cronExpression" value="0 0 1 * * ?"/>
                    <property name="jobDetail" ref="expirationReminderJob"/>
                </bean>
            </property>
        </bean>
        <!-- 自定义执行逻辑Bean,注入需要的Alfresco基础服务 -->
        <bean id="expirationReminderService" class="com.yourcompany.alfresco.job.ExpirationReminderService">
            <property name="nodeService" ref="nodeService"/>
            <property name="searchService" ref="searchService"/>
            <property name="mailService" ref="mailService"/>
            <property name="remindDays" value="7"/> <!-- 可自行调整提醒天数 -->
        </bean>
    </beans>
    
  • 重启Alfresco服务,定时任务会自动加载,每天指定时间执行扫描并发送提醒邮件。
Windows环境部署注意事项
  • 所有配置文件修改前必须备份,避免配置错误导致服务无法启动
  • 脚本、XML配置文件编码必须设置为UTF-8,避免中文内容乱码
  • 测试阶段可以把cron表达式调整为每分钟执行一次,验证邮件发送正常后再修改为正式执行时间
  • 可根据业务需求调整收件人规则、邮件内容模板,支持添加附件、抄送等扩展功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:24:04