CDO CreateMHTMLBody заключва файла в JScript

Създавам 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;
}
//-------------------------------------------

Благодаря.


person Olexa    schedule 15.06.2012    source източник


Отговори (1)


Опитахте ли програмно да убиете пощенския процес и след това да изтриете файла (освен ако не се нуждаете от пощенска програма, която да работи, след като изпратите пощата)

Имате ли инсталирана IIS SMTP услуга, може би си струва да опитате

CreateObject("cdonts.NewMail")

or

CreateObject("outlook.application")

Но може да се наложи да убиете свързания процес в подобна ситуация.

person QVSJ    schedule 15.06.2012