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来发送,在发送大量邮件时有助于改善性能。session
- 发送广播邮件:转到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多重复的邮件,让人不得不吐槽。性能