AX 2012可以使用MAPI或者SMTP发送邮件,MAPI是客户端方法,需要outlook的协作,而SMTP则是服务器端方法,要求SMTP允许AOS服务器通过它中继。这里要讲的就是如何通过SMTP发送邮件广播。

  • 设置SMTP邮件服务器:转到 System administration>Setup>System>E-mail parameters,outgoing mail server 填写SMTP服务器名称或者IP,local computer name可以留空,勾选NTLM不要求输入用户密码,如果是在sever tier上运行就使用AOS服务的账号,如果是在客户端则使用客户端用户的账号。
  • 配置EMAIL模板:转到 Organization administration>Setup>E-mail templates,勾选form上的show system e-mail复选框,只有系统邮件才能用于邮件广播。创建一个新的邮件模板,可以为邮件模板创建多个语言版本,邮件的具体内容可以使用HTML或者XSLT两种格式之一,两者内联变量的格式不同。比如使用HTML,HTML code是这样:
<p>Dear %UserName%,</P>
<br/ >
<p>Please .....</p>
<br/ >

这里%username%会自动替换为AX用户名称。email template有个batch group选项,选择一个batch group可以将邮件通过batch job来发送,在发送大量邮件时有助于改善性能。

  • 发送广播邮件:转到System administration>Periodic>E-mail processing>E-mail broadcast,选择一个email模板,receiver可以选择所有用户或者在线用户,点击OK后如果不是使用batch(email temlate的batch group留空不等于使用empty batch group,而确实是不使用batch group),邮件会发送给相应用户的邮件地址,用户的邮件地址是在用户的options里面设定的。如果使用batch发送邮件,AX将为每个邮件创建一个batch job,运行SysEmailBatch,由它将邮件发送出去。表面上比较简单,而实际上是系统针对每个用户调用SysEmailSystemTable::sendMail(),SysEmailSystemTable::sendMail有个参数_isTraceable,默认为false,表示直接调用SysEmailBatch来完成发送;如果_isTraceable为true,那么邮件会被添加到表SysOutgoingEmailTable等候发送。SysEmailBatch会检查邮件模板的batch group,如果有设置则把自己添加到batch jobs队列,否则直接运行run()方法发送邮件。有意思的是SysEmailBatch.run()也会检查它的一个类变量isTraceAble,和上面一样,如果为true,邮件会被再一次试图放到表SysOutgoingEmailTable等候发送。看到的情况是类变量isTraceAble被初始化为false,所以SysEmailBatch.run()直接调用SysMailerNet.sendMail()最终发送邮件出去。 那些在SysOutgoingEmailTable表中的邮件我们可以在System administration>Periodic>E-mail processing>E-mail sending status查看,这些邮件又是如何发送出去的呢?这时候我们需要使用System administration>Periodic>E-mail processing>Batch创建一个发送邮件的batch job,由它定期调用SysEmailDistributor来派发邮件,SysEmailDistributor直接使用SysMailerNet将邮件依次派发。

如果发生广播邮件时我们选择对在线用户发送,系统会对每一个用户session安排一封邮件,如果一个用户有很多session(非常常见,管理员可能更多),它将收到N多重复的邮件,让人不得不吐槽。

最新文章

  1. 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)
  2. Java 并发工具包 java.util.concurrent 用户指南
  3. 加载.properties方式
  4. 从github上面拷贝源码
  5. Python 字典的创建赋值和动态扩展
  6. Ubuntu packages multi-architectures
  7. boost------signals2的使用2(Boost程序库完全开发指南)读书笔记
  8. badboy录制兼容性有趣测试
  9. python+selenium自动化软件测试(第13章):selenium面试题
  10. win10 uwp 商业游戏 1.2.1
  11. 使用JavaScript动态刷新页面局部内容
  12. windows eclipse安装lombok插件
  13. 使用exundelete在Linux下恢复删除的文件
  14. 【sql绕过】Bypass waf notepad of def
  15. OD 实验(十三) - 对一个程序的逆向
  16. 亲测能用的mysqli类,挺好用的
  17. Handlebars.js,Json+ajax+拼html
  18. tips 前端 各个设备的页面尺寸的media query 与页面高度的经验总结
  19. CNN 防止过拟合的方法
  20. hibernate系列之一

热门文章

  1. AndroidStudio Lod.d在LogCat中不输出
  2. HTTP协议状态码详解(HTTP Status Code)
  3. ReactiveCocoa 5.0 初窥:可能是最痛的一次升级
  4. PHP会话Session
  5. couchbase作为分布式session容器时的注意事项
  6. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
  7. memcached(二)事件模型源码分析
  8. Nagios学习笔记四:基于NRPE监控远程Linux主机
  9. Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o
  10. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)