Vbscript CDO CreateMHTMLBody在JScript中锁定文件

Vbscript CDO CreateMHTMLBody在JScript中锁定文件,vbscript,jscript,Vbscript,Jscript,我正在制作一个JScript脚本,它通过CDO以HTML格式发送电子邮件。我在.html文件中有一个消息模板,我将一些独特的数据放入发送的每条消息中。因此,我为每条消息创建了原始.html文件的副本 问题是在发送消息后,我无法从脚本中删除此临时文件。我已经使用ProcessExplorer进行了检查,该进程锁定了文件,它是cscript.exe/wscript.exe(用于运行脚本的wichever) 以下是示例(简化)代码: 谢谢。您是否尝试过以编程方式终止邮件进程,然后删除文件(除非您需要在

我正在制作一个JScript脚本,它通过CDO以HTML格式发送电子邮件。我在.html文件中有一个消息模板,我将一些独特的数据放入发送的每条消息中。因此,我为每条消息创建了原始.html文件的副本

问题是在发送消息后,我无法从脚本中删除此临时文件。我已经使用ProcessExplorer进行了检查,该进程锁定了文件,它是cscript.exe/wscript.exe(用于运行脚本的wichever)

以下是示例(简化)代码:


谢谢。

您是否尝试过以编程方式终止邮件进程,然后删除文件(除非您需要在发送邮件后运行邮件程序)

您是否安装了IIS SMTP服务,可能值得一试

CreateObject(“cdonts.NewMail”)

CreateObject(“outlook.application”)

但在类似的情况下,您可能必须终止相关进程

//-------------------------------------------
var fso = new ActiveXObject("Scripting.FileSystemObject");
var BodyFileName = fso.GetAbsolutePathName(WScript.Arguments(3));
var BodyExtensionName = fso.GetExtensionName(BodyFileName)
var BodyFile = fso.OpenTextFile(BodyFileName, 1);
var Body = BodyFile.ReadAll();
BodyFile.Close();
//-------------------------------------------
// Replace something in Body here
//-------------------------------------------
BodyFileName = fso.BuildPath(fso.GetParentFolderName(BodyFileName), fso.GetTempName() + "." + BodyExtensionName);
var TmpBodyFile = fso.OpenTextFile(BodyFileName, 2, true);
TmpBodyFile.Write(Body);
TmpBodyFile.Close();
// Here ProcessExplorer shows that the file is closed
//-------------------------------------------
var objEmail = new ActiveXObject("CDO.Message");  
objEmail.From = WScript.Arguments(0);
objEmail.To = WScript.Arguments(1);  
objEmail.Subject = WScript.Arguments(2);  
objEmail.CreateMHTMLBody("file:///" + BodyFileName.replace("\\","/"));
// Here the file is open again
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;  
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.1";
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;  
objEmail.Configuration.Fields.Update();  
objEmail.Send();
objEmail = null;
//-------------------------------------------
// The following loop becomes endless
for (;;) {
  try {
    fso.DeleteFile(BodyFileName, true);
  } catch(e) {
    WScript.Sleep(100);
    continue;
  } finally {
  }
  break;
}
//-------------------------------------------