根据角色发送微信及电子邮件¶
本文档内容来源于 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(): 获取用户IDuser.getName(): 获取用户名称user.getDepartment(): 获取用户部门
消息发送说明¶
微信消息¶
- 需要用户绑定微信账号
- 消息内容可能需要符合微信格式要求
- 可能需要配置微信相关参数
电子邮件¶
- 需要用户有有效的邮箱地址
- 需要配置SMTP服务器
- 邮件内容可以支持HTML格式
- 可以添加附件
注意事项¶
- ⚠️ 角色存在性: 确保角色存在,否则无法获取用户
- ⚠️ 用户邮箱: 发送邮件前需要验证用户是否有邮箱地址
- ⚠️ 消息内容: 注意消息内容的格式和长度限制
- ⚠️ 发送频率: 注意发送频率,避免被限制
- ⚠️ 错误处理: 建议添加try-catch进行错误处理
- ⚠️ 用户去重: 如果用户属于多个角色,注意去重
- ⚠️ 权限验证: 确保有发送消息的权限
- 发送消息可能需要配置相关参数
- 建议记录发送日志,方便追踪
- 可以结合条件判断,选择性发送
使用场景¶
- 通知角色下的所有用户
- 发送重要公告
- 待办事项提醒
- 系统通知
- 批量消息推送
如需查看完整脚本代码,请访问源文档链接。