Javascript: скрип отправки письма с вложением, архивирование файлов

Задача следующая: На флешке находится важный файл либо группа файлов, которые нельзя оставлять в системе, но надо делать бэкап (флешка может «погибнуть»). Было решено отправлять их после изменения на почту.
Были выдвинуты три задачи:

  1. Просто отправить один файл
  2. Отправить группу файлов. Каждый прицепить отдельно
  3. Вогнать предварительно файлы в архив и отправить

Решение
Простой скрипт отправки письма с вложением. Для более универсальной работы путь к файлу будем получать в процессе работы скрипта. Файл должен лежать в той же папке где и скрипт.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
try {
 
	var objEmail;          		//CDO объект для отправки сообщения
	var MessText;          		//Текст сообщения
	var AttFile;				//Файл вложения.
	var strFileName = "file1.txt"	//Имя файла вложения
 
	//Формируем текст сообщения
	MessText = "Здесь должен быть тескт сообщения\n";
 
 
	//создаем объект FileSystemObject
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var strFileName;
	var fid = fso.GetAbsolutePathName(""); 	 // путь к текущей папке
	AttFile = fid.replace(/\\/g, "\\\\")+"\\"+strFileName;	//Указываем путь к файлу, который необходимо вложить в сообщение 
 
	objEmail = WScript.CreateObject("CDO.Message");    //Создаем объект CDO и получаем на него ссылку в переменную objEmail
 
 
	// Указание необходимых параметров объекта CDO
 
	objEmail.From = "backup@domain.ru";  //параметры отправителя (имя и адрес электронной почты)   
	objEmail.To = "mail@domain.ru";      	 //адрес электронной почты получателя
	objEmail.Subject = "Архив";     	 //тема сообщения   
	objEmail.AddAttachment(AttFile); 			//файла вложения
	objEmail.Textbody = MessText;        //текст сообщения 
	//Отправить сообщение используя сетевую SMTP-службу (1 - используется для отправки через локальную SMTP-службу)
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;    
	//Указание имени SMTP-сервера  
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2";
	//Указание SMPT-порта на сервере
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
	//Обновить конфигурацию CDO-объекта
	objEmail.Configuration.Fields.Update();
	//Послать сообщение с помощью метода Send()
	objEmail.Send();
	//
	WScript.Echo('Отправленно');
} catch (e) {
	WScript.Echo('Ошибка отправки: '+e.name);
}

Отправка нескольких файлов. Скрипт просто перебирает файлы в папке где он лежит и прикрепляет их к письму.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
try {
var objEmail;          		//CDO объект для отправки сообщения
var MessText;          		//Текст сообщения
var AttFile = new Array();  //Файл вложения.
 
 
//Формируем текст сообщения
MessText = "Здесь должен быть тескт сообщения\n";
 
//создаем объект FileSystemObject
var i = 0;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var strFileName;
var fid = fso.GetAbsolutePathName(""); 	 // путь к текущей папки
var fil = fso.GetFolder (fid); 			 // получение объекта
var fic = new Enumerator (fil.files); 	
for (; !fic.atEnd (); fic.moveNext ()) {
	strFileName = String (fic.item());		
	if (strFileName != fid+"\\mailto_file.js") { // исключаем себя
		strFileName = strFileName.replace(/\\/g, "\\\\");
		AttFile[i] = strFileName; 		//Указываем путь к файлу, который необходимо вложить в сообщение 
		i++;
	}
}
 
 
 
	objEmail = WScript.CreateObject("CDO.Message");    //Создаем объект CDO и получаем на него ссылку в переменную objEmail
 
 
	// Указание необходимых параметров объекта CDO
 
	objEmail.From = "backup@domain.ru";  //параметры отправителя (имя и адрес электронной почты)   
	objEmail.To = "mail@domain.ru";       //адрес электронной почты получателя
	objEmail.Subject = "Архив";      //тема сообщения   
 
	for (var i=0; i<=AttFile.length-1; i++){  
		objEmail.AddAttachment(AttFile[i]); //файла вложения
	}	
 
	objEmail.Textbody = MessText;        //текст сообщения 
 
	//Отправить сообщение используя сетевую SMTP-службу (1 - используется для отправки через локальную SMTP-службу)
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;    
	//Указание имени SMTP-сервера  
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2";
	//Указание SMPT-порта на сервере
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
	//Обновить конфигурацию CDO-объекта
	objEmail.Configuration.Fields.Update();
	//Послать сообщение с помощью метода Send()
	objEmail.Send();
	//
	WScript.Echo('Отправленно');
} catch (e) {
	WScript.Echo('Ошибка отправки: '+e.name);
}

Отправка файлов с предварительным архивированием. В качестве архиватора использую 7zip.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
try {
	var objEmail;          					//CDO объект для отправки сообщения
	var MessText;          					//Текст сообщения
	var AttFile;  							//Файл вложения.
	var sfilename = "mailto_file_zip.js";	//Имя файла скрипта
	var afilename = "archive.zip";						//Имя файла архива
	var zipname = "c:\\Program Files\\7-Zip\\7z.exe";   //Путь к программе
 
 
	//Формируем текст сообщения
	MessText = "Данное сообщение послано\n";
	MessText +="скриптом"+sfilename+"\n";
 
 
	//создаем объект FileSystemObject
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var fid = fso.GetAbsolutePathName(""); 	 	//Путь к текущей папке
	var fid = fid.replace(/\\/g, "\\\\")+"\\";	//Экранируем 
 
	//создаем объект WScript.Shell	
	var sh = new ActiveXObject("WScript.Shell");
	sh.Run('"'+zipname+'" a -x!*.js -x!*.zip -tzip "'+fid+afilename+'" "'+fid+'*"', 0, true); //Запуск архиватора
 
 
	objEmail = WScript.CreateObject("CDO.Message");    //Создаем объект CDO и получаем на него ссылку в переменную objEmail
 
 
	// Указание необходимых параметров объекта CDO
 
	objEmail.From = "backup@domain.ru";  //параметры отправителя (имя и адрес электронной почты)   
	objEmail.To = "mail@domain.ru";       //адрес электронной почты получателя
	objEmail.Subject = "Архив";      //тема сообщения   
 
	objEmail.AddAttachment(fid+afilename); //файла вложения
 
	objEmail.Textbody = MessText;        //текст сообщения 
 
	//Отправить сообщение используя сетевую SMTP-службу (1 - используется для отправки через локальную SMTP-службу)
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;    
	//Указание имени SMTP-сервера  
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2";
	//Указание SMPT-порта на сервере
	objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
	//Обновить конфигурацию CDO-объекта
	objEmail.Configuration.Fields.Update();
	//Послать сообщение с помощью метода Send()
	objEmail.Send();
	//
	WScript.Echo('Отправленно');
} catch (e) {
	WScript.Echo('Ошибка отправки');
}

Скрипты были опробованы на Windows 7 и Windows XP

13 комментариев

  1. А можете дописать скрипти чтоб после отправки сообщения файлы удалялись из директории, извините конечно за такую прозьбу но я с жавой не дружу вот и возник такой вопросик-прозьба. Зарание спасиба. ответ можна на емейл demydyuk@rambler.ru

  2. Всем привет!
    Может, этот вопрос не совсем в тему, но подскажите, плиз, — а есть ли способ с помощью ActiveXObject заносить данные, считанные из текстового файла в mysql ? И если нет, то хотя бы, в каком направлени нужно рыть для решения этой задачи?

  3. Надо добавить строки
    objEmail.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = «Логин»
    objEmail.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = «Пароль»

  4. А можете дописать скрипти чтоб после отправки сообщения файлы удалялись из директории, извините конечно за такую прозьбу но я с жавой не дружу вот и возник такой вопросик-прозьба. Зарание спасиба. Ответ можна на емейл lomonosovigor1@yandex.ru

  5. Помогите, плиз, добавить в архив пароль в этом тесте скрипта!
    это только часть скрипта конечно
    function backupDBOld()
    {
    try
    {
    var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName,false);

    NewTextFile.Write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
    NewTextFile.Close();
    var ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileName);
    var dFolder = oShellApplication.NameSpace(ZIPFile);
    var file = oFileSystemObject.GetAbsolutePathName(BaseFileName);
    var FolderNameSpace = oFileSystemObject.GetParentFolderName(file);
    var Folder = oShellApplication.Namespace(FolderNameSpace);
    var FolderItemNameSpace = oFileSystemObject.GetFileName(file);
    var FolderItem = Folder.ParseName(FolderItemNameSpace);
    if (!createBackup)
    return 0;
    dFolder.CopyHere(file);
    ret = 0;
    log(format(«Попытка создания резервной копии», ret), ret != 0);
    }
    catch(e)
    {
    alert(e.message);
    CollectGarbage(); // предотвращает исключение out of memory
    log(format(«Исключение при создании резервной копии базы», e.name, e.message), true);
    ret = -1;
    }
    if (ret == 0)
    backupCreated = true;
    return ret;
    }
    Спасибо заранее! Если не трудно то прямо на «kovan2002(АТ)mail.ru»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *