跳转至

根据角色发送微信及电子邮件

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4kdikv6j1

脚本说明

该脚本用于根据角色发送微信消息和电子邮件。在MyApps平台中,可以通过获取角色下的所有用户,然后向这些用户发送微信消息和电子邮件。

常见实现方式

方式1:根据角色发送微信消息

(function(){
    var roleName = "角色名称";
    var message = "消息内容";

    // 获取角色下的所有用户
    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在: " + roleName;
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var userId = user.getId();

            try{
                // 发送微信消息
                sendWechatMessage(userId, message);
                successCount++;
            }catch(e){
                failCount++;
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

方式2:根据角色发送电子邮件

(function(){
    var roleName = "角色名称";
    var subject = "邮件主题";
    var content = "邮件内容";

    // 获取角色下的所有用户
    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在: " + roleName;
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var email = user.getEmail();

            if(email != null && email.trim().length > 0){
                try{
                    // 发送电子邮件
                    sendEmail(email, subject, content);
                    successCount++;
                }catch(e){
                    failCount++;
                }
            }else{
                failCount++;
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

方式3:同时发送微信和电子邮件

(function(){
    var roleName = "角色名称";
    var wechatMessage = "微信消息内容";
    var emailSubject = "邮件主题";
    var emailContent = "邮件内容";

    // 获取角色下的所有用户
    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在: " + roleName;
    }

    var users = role.getUsers();
    var wechatSuccess = 0;
    var wechatFail = 0;
    var emailSuccess = 0;
    var emailFail = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var userId = user.getId();
            var email = user.getEmail();

            // 发送微信消息
            try{
                sendWechatMessage(userId, wechatMessage);
                wechatSuccess++;
            }catch(e){
                wechatFail++;
            }

            // 发送电子邮件
            if(email != null && email.trim().length > 0){
                try{
                    sendEmail(email, emailSubject, emailContent);
                    emailSuccess++;
                }catch(e){
                    emailFail++;
                }
            }else{
                emailFail++;
            }
        }
    }

    var result = "微信 - 成功: " + wechatSuccess + ", 失败: " + wechatFail + "\n";
    result += "邮件 - 成功: " + emailSuccess + ", 失败: " + emailFail;

    return result;
})();

方式4:根据多个角色发送

(function(){
    var roleNames = ["角色1", "角色2", "角色3"];
    var message = "消息内容";
    var allUserIds = [];

    // 获取所有角色下的用户(去重)
    for(var i = 0; i < roleNames.length; i++){
        var role = getRoleByName(roleNames[i]);
        if(role != null){
            var users = role.getUsers();
            if(users != null && users.size() > 0){
                for(var j = 0; j < users.size(); j++){
                    var userId = users.get(j).getId();
                    if(allUserIds.indexOf(userId) < 0){
                        allUserIds.push(userId);
                    }
                }
            }
        }
    }

    var successCount = 0;
    var failCount = 0;

    for(var k = 0; k < allUserIds.length; k++){
        try{
            sendWechatMessage(allUserIds[k], message);
            successCount++;
        }catch(e){
            failCount++;
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

扩展示例

示例1:发送带链接的微信消息

(function(){
    var roleName = "角色名称";
    var message = "您有新的待办事项,请及时处理";
    var linkUrl = "http://example.com/todo";

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            try{
                // 发送带链接的微信消息
                sendWechatMessageWithLink(user.getId(), message, linkUrl);
                successCount++;
            }catch(e){
                // 处理错误
            }
        }
    }

    return "已发送给 " + successCount + " 个用户";
})();

示例2:发送HTML格式的电子邮件

(function(){
    var roleName = "角色名称";
    var subject = "重要通知";
    var htmlContent = "<html><body><h1>通知标题</h1><p>通知内容</p></body></html>";

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var email = user.getEmail();

            if(email != null && email.trim().length > 0){
                try{
                    // 发送HTML格式的电子邮件
                    sendHtmlEmail(email, subject, htmlContent);
                    successCount++;
                }catch(e){
                    failCount++;
                }
            }else{
                failCount++;
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

示例3:根据条件发送消息

(function(){
    var roleName = "角色名称";
    var message = "消息内容";
    var condition = "条件值";

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);

            // 根据条件判断是否发送
            var userCondition = user.getExtensionField("条件字段");
            if(userCondition != null && userCondition === condition){
                try{
                    sendWechatMessage(user.getId(), message);
                    successCount++;
                }catch(e){
                    // 处理错误
                }
            }
        }
    }

    return "已发送给 " + successCount + " 个符合条件的用户";
})();

示例4:发送带附件的电子邮件

(function(){
    var roleName = "角色名称";
    var subject = "带附件的邮件";
    var content = "邮件内容";
    var attachmentPath = "/path/to/attachment.pdf";

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var email = user.getEmail();

            if(email != null && email.trim().length > 0){
                try{
                    // 发送带附件的电子邮件
                    sendEmailWithAttachment(email, subject, content, attachmentPath);
                    successCount++;
                }catch(e){
                    failCount++;
                }
            }else{
                failCount++;
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

示例5:记录发送日志

(function(){
    var roleName = "角色名称";
    var message = "消息内容";

    println("开始根据角色发送消息");
    println("角色名称: " + roleName);

    var role = getRoleByName(roleName);
    if(role == null){
        println("错误: 角色不存在");
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        println("用户数量: " + users.size());

        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            println("发送给用户: " + user.getName());

            try{
                sendWechatMessage(user.getId(), message);
                println("发送成功");
                successCount++;
            }catch(e){
                println("发送失败: " + e.getMessage());
                failCount++;
            }
        }
    }

    println("发送完成 - 成功: " + successCount + ", 失败: " + failCount);

    return "成功: " + successCount + ", 失败: " + failCount;
})();

示例6:错误处理和重试

(function(){
    var roleName = "角色名称";
    var message = "消息内容";
    var maxRetries = 3;

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var retryCount = 0;
            var success = false;

            while(retryCount < maxRetries && !success){
                try{
                    sendWechatMessage(user.getId(), message);
                    success = true;
                    successCount++;
                }catch(e){
                    retryCount++;
                    if(retryCount >= maxRetries){
                        failCount++;
                    }
                }
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

示例7:根据角色和部门发送

(function(){
    var roleName = "角色名称";
    var departmentId = "部门ID";
    var message = "消息内容";

    // 获取角色下的用户
    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;
    var failCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var userDept = user.getDepartment();

            // 只发送给指定部门的用户
            if(userDept != null && userDept.getId() === departmentId){
                try{
                    sendWechatMessage(user.getId(), message);
                    successCount++;
                }catch(e){
                    failCount++;
                }
            }
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount;
})();

示例8:发送个性化消息

(function(){
    var roleName = "角色名称";
    var template = "您好 {name},您有 {count} 条待办事项";

    var role = getRoleByName(roleName);
    if(role == null){
        return "角色不存在";
    }

    var users = role.getUsers();
    var successCount = 0;

    if(users != null && users.size() > 0){
        for(var i = 0; i < users.size(); i++){
            var user = users.get(i);
            var userName = user.getName();

            // 获取用户的待办数量(示例)
            var todoCount = getUserTodoCount(user.getId());

            // 替换模板变量
            var message = template.replace("{name}", userName).replace("{count}", todoCount);

            try{
                sendWechatMessage(user.getId(), message);
                successCount++;
            }catch(e){
                // 处理错误
            }
        }
    }

    return "已发送给 " + successCount + " 个用户";
})();

关键函数说明

  • getRoleByName(roleName): 根据角色名称获取角色对象
  • role.getUsers(): 获取角色下的用户列表
  • sendWechatMessage(userId, message): 发送微信消息
  • sendEmail(email, subject, content): 发送电子邮件
  • sendWechatMessageWithLink(userId, message, linkUrl): 发送带链接的微信消息
  • sendHtmlEmail(email, subject, htmlContent): 发送HTML格式的电子邮件
  • sendEmailWithAttachment(email, subject, content, attachmentPath): 发送带附件的电子邮件
  • user.getEmail(): 获取用户邮箱
  • user.getId(): 获取用户ID
  • user.getName(): 获取用户名称
  • user.getDepartment(): 获取用户部门

消息发送说明

微信消息

  • 需要用户绑定微信账号
  • 消息内容可能需要符合微信格式要求
  • 可能需要配置微信相关参数

电子邮件

  • 需要用户有有效的邮箱地址
  • 需要配置SMTP服务器
  • 邮件内容可以支持HTML格式
  • 可以添加附件

注意事项

  • ⚠️ 角色存在性: 确保角色存在,否则无法获取用户
  • ⚠️ 用户邮箱: 发送邮件前需要验证用户是否有邮箱地址
  • ⚠️ 消息内容: 注意消息内容的格式和长度限制
  • ⚠️ 发送频率: 注意发送频率,避免被限制
  • ⚠️ 错误处理: 建议添加try-catch进行错误处理
  • ⚠️ 用户去重: 如果用户属于多个角色,注意去重
  • ⚠️ 权限验证: 确保有发送消息的权限
  • 发送消息可能需要配置相关参数
  • 建议记录发送日志,方便追踪
  • 可以结合条件判断,选择性发送

使用场景

  • 通知角色下的所有用户
  • 发送重要公告
  • 待办事项提醒
  • 系统通知
  • 批量消息推送

如需查看完整脚本代码,请访问源文档链接。