存档

2010年11月 的存档

如何使用codeunit 397 Mail发送多行信件内容的邮件?

2010年11月30日 没有评论

感谢 Edward的投递,谢谢!

codeunit 400 SMTP Mail可以实现多行文本的邮件内容Mail Body功能,却不能实现发送回执功能,而codeunit 397 Mail可以实现发送回执功能,却不能实现多行文本邮件内容的功能。要想合二为一,只能从codeunit 397 Mail找突破口了.
以下主要思想就是通过修改参数为Array,来传递多行文本,并且通过输入空行来调整布局.
感谢以下连接的方案:
http://ms-dynamicsnav.blogspot.com/2009/10/nav-mail-issues.html
亦可参考另一有价值文章
http://groups.google.com/group/microsoft.public.navision/browse_thread/thread/39733a1403980bb/db12216b693c94fa?lnk=gst&q=397+mail#db12216b693c94fa
首先在codeunit 397 Mail里创建一个新的function NewMessageMultBody,先设置为与NEWMESSAGE相同功能。
其次,把其中的参数body改为array,并且设为200,(够用就行,注意引用的时候保持可用)
加一个Char类型的参数CH,其值设为 CH=13;表示一个回车(carriage return);
function NewMessageMultBody的内容如下:(以下function不包括read receipt功能)
IF ISCLEAR(OApplication) THEN
CREATE(OApplication,TRUE,TRUE);
IF (NOT OApplication.Logon(TRUE,”,”,FALSE,FALSE)) THEN BEGIN
OApplication.Logoff;
EXIT
END;
IF ISCLEAR(OSendMail) THEN
CREATE(OSendMail,TRUE,TRUE);
ErrorNo := 0;
OSendMail.”To” := ToName;
OSendMail.CC := CCName;
OSendMail.Subject := Subject;
OSendMail.BodyFormat := 2;
MailGUIDValue := CREATEGUID;
OSendMail.SetUserProperty(GetMailGUIDFieldName,1,FORMAT(MailGUIDValue));
IF ISCLEAR(BSTRConverterBody) THEN
CREATE(BSTRConverterBody,TRUE,TRUE);
CH :=13;//表示回车
BSTRConverterBody.ResetBSTR; // This code moved from within the below revised if. The process will not work if this code is not outside that IF

FOR X := 1 TO 200 DO BEGIN
IF Body[X] <> ” THEN BEGIN
Body[X] := Body[X] + FORMAT(CH);
BSTRConverterBody.AppendNextStringPortion(Body[X]);
END;
END;
OSendMail.Body := BSTRConverterBody;
IF ISCLEAR(BSTRConverterAttachFileName) THEN
CREATE(BSTRConverterAttachFileName,TRUE,TRUE);
IF AttachFileName <> ” THEN BEGIN
BSTRConverterAttachFileName.ResetBSTR;
BSTRConverterAttachFileName.AppendNextStringPortion(AttachFileName);
OAttachments := OSendMail.Attachments;
OAttachment := OAttachments.Add(BSTRConverterAttachFileName);
END;
OSendMail.OpenDialog := OpenDialog;
MailSent := OSendMail.Send;
ErrorNo := OSendMail.ErrorStatus;
OApplication.Logoff;

5.完成以后即可在其它对象里调用。注意传送body的时候是array,text…适用于outlook 2003,2007

以上方法不足之处在于,不能解释输入的HTML的标签。不过如果要求不高的话,分行基本上就可以实现布局的要求了

分类: C/AL 标签: