Създавам JScript скрипт, който изпраща имейл съобщения в HTML формат чрез CDO. Имам шаблон за съобщение в .html файл и поставям някои уникални данни във всяко изпратено съобщение. И така, създавам копие на оригиналния .html файл за всяко съобщение.
Проблемът е, че не мога да изтрия този временен файл от скрипта след изпращане на съобщението. Проверих с ProcessExplorer, кой процес заключва файла и той е cscript.exe/wscript.exe (който и да се използва за изпълнение на скрипта).
Ето примерния (опростен) код:
//-------------------------------------------
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;
}
//-------------------------------------------
Благодаря.