Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как прикрепить несколько файлов в письме?

Ответить
Настройки темы
VBS/WSH/JS - [решено] Как прикрепить несколько файлов в письме?

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


К сожалению не очень опытен c VBS.

Есть скрипт для отправки сообщения с одним вложенным файлом!


Код: Выделить весь код
 
Set S = CreateObject("Wscript.Shell") 
 set FSO=createobject("scripting.filesystemobject") 
 Call SendPost("smtp.mail.ru","login1@mail.ru","login2@mail.ru","Отчет","Последний месяц") 
 Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody) 
 Set iMsg=CreateObject("CDO.Message") 
 Set iConf=CreateObject("CDO.Configuration") 
 Set Flds=iConf.Fields 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="login" 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="password" 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.mail.ru" 
 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25 
 Flds.Update 
 iMsg.Configuration=iConf 
 iMsg.To=strTo 
 iMsg.From=strFrom 
 iMsg.Subject=strSubject 
 iMsg.TextBody=strBody 
 iMsg.AddAttachment "C:\Users\%userprofile%\Desktop\otchet_15_05_2011.txt" 
 iMsg.Send 
 End Function 
 Set iMsg=Nothing 
 Set iConf=Nothing 
 Set Flds=Nothing
1. Как отправить сразу несколько текстовых файлов?
2. Что делать если имеется несколько компьютеров..и у них разные пути к рабочему столу?

Отправлено: 17:12, 20-05-2011

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


1. как вариант - выполнить несколько раз "iMsg.AddAttachment"
2.
Код: Выделить весь код
WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:36, 20-05-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
1. как вариант - выполнить несколько раз "iMsg.AddAttachment" »
Хм..а если количество и названия файлов произвольные?

Отправлено: 18:05, 20-05-2011 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


staw2ros, цикл по массиву

Отправлено: 18:25, 20-05-2011 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата staw2ros:
Хм..а если количество и названия файлов произвольные? »
Передавайте скрипту пути к ним аргументами. Если не укладываетесь в ограничения длины пути — то посредством указанного аргументом текстового файла, содержащего пути к прикрепляемым файлам.

Отправлено: 19:01, 20-05-2011 | #5


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


И как это можно реализовать с данным скриптом?)

Отправлено: 19:08, 20-05-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата staw2ros:
И как это можно реализовать с данным скриптом? »
Сие может выглядеть, например, так:
Цитата Iska:
Передавайте скрипту пути к ним аргументами. »
читать дальше »
Код: Выделить весь код
Option Explicit

Const cdoSendUsingPort = 2
Const cdoBasic         = 1

Const strPartSchema    = "http://schemas.microsoft.com/cdo/configuration/"


Dim objFSO
Dim strArg


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count <> 0 Then
	With WScript.CreateObject("CDO.Message")
		With .Configuration.Fields
			.Item(strPartSchema & "sendusing")        = cdoSendUsingPort
			.Item(strPartSchema & "smtpauthenticate") = cdoBasic
			.Item(strPartSchema & "smtpserver")       = "smtp.mail.ru"
			.Item(strPartSchema & "smtpserverport")   = 25
			.Item(strPartSchema & "sendusername")     = "login"
			.Item(strPartSchema & "sendpassword")     = "password"
			
			.Update
		End With
		
		.To            = "to@mail.com"
		.From          = "from@mail.com"
		.Subject       = "Subject"
		.TextBody      = "TextBody"
		
		For Each strArg In WScript.Arguments
			If objFSO.FileExists(strArg) Then
				.AddAttachment strArg
			Else
				WScript.Echo "Can't find file [" & strArg & "]"
				WScript.Quit 2
			End If
		Next
		
		.Send
	End With
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <file1> [<file2>] … [<fileN>]"
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Пример вызова скрипта:
Код: Выделить весь код
script.vbs "E:\Песочница\0039\Copy-Script.ps1" "E:\Песочница\0039\file_versions.ps1" "E:\Песочница\0054\0003.cmd"
Цитата Iska:
…посредством указанного аргументом текстового файла, содержащего пути к прикрепляемым файлам. »
читать дальше »
Код: Выделить весь код
Option Explicit

Const ForReading = 1

Const cdoSendUsingPort = 2
Const cdoBasic         = 1

Const strPartSchema    = "http://schemas.microsoft.com/cdo/configuration/"


Dim objFSO
Dim strFile4Files
Dim strFile


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count = 1 Then
	strFile4Files = WScript.Arguments.Item(1)
	
	If objFSO.FileExists(strFile4Files) Then
		With WScript.CreateObject("CDO.Message")
			With .Configuration.Fields
				.Item(strPartSchema & "sendusing")        = cdoSendUsingPort
				.Item(strPartSchema & "smtpauthenticate") = cdoBasic
				.Item(strPartSchema & "smtpserver")       = "smtp.mail.ru"
				.Item(strPartSchema & "smtpserverport")   = 25
				.Item(strPartSchema & "sendusername")     = "login"
				.Item(strPartSchema & "sendpassword")     = "password"
				
				.Update
			End With
			
			.To            = "to@mail.com"
			.From          = "from@mail.com"
			.Subject       = "Subject"
			.TextBody      = "TextBody"
			
			Set objTS = objFSO.OpenTextFile(strFile4Files, ForReading)
			
			Do Until objTS.AtEndOfStream
				strFile = objTS.ReadLine()
				
				If objFSO.FileExists(strFile) Then
					.AddAttachment strFile
				Else
					WScript.Echo "Can't find file [" & strFile & "]"
					WScript.Quit 2
				End If
			Loop
			
			objTS.Close
			
			Set objTS = Nothing
			
			.Send
		End With
	Else
		WScript.Echo "Can't find file [" & strFile4Files & "]"
	End If
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <file with paths>"
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Пример вызова скрипта:
Код: Выделить весь код
script.vbs "E:\Песочница\0055\FileList.txt"
Пример содержимого файла «E:\Песочница\0055\FileList.txt»:
Код: Выделить весь код
E:\Песочница\0039\Copy-Script.ps1
E:\Песочница\0039\file_versions.ps1
E:\Песочница\0054\0003.cmd

Последний раз редактировалось Iska, 22-05-2011 в 13:33. Причина: Забыл раскомментировать саму отсылку письма перед выкладыванием на форум. Поправил.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:50, 20-05-2011 | #7


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, Спасибо!

Но проблему удалось решить чуть иначе...вот может кому-нибудь пригодится!



Код: Выделить весь код
Const Desktop = 4
Set S = CreateObject("Wscript.Shell") 
Set FSO = CreateObject("scripting.filesystemobject")

strSMTP_Server = "smtp.mail.ru"
strTo = "login2@mail.ru"
strFrom = "login@mail.ru"
strSubject = "Отчет"
strBody = "Последний месяц"

Set iMsg=CreateObject("CDO.Message") 
Set iConf=CreateObject("CDO.Configuration") 
Set Flds=iConf.Fields 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="login" 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="password" 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.mail.ru" 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25 
Flds.Update 
iMsg.Configuration=iConf 
iMsg.To=strTo 
iMsg.From=strFrom 
iMsg.Subject=strSubject 
iMsg.TextBody=strBody 
Set fld = FSO.GetFolder(S.SpecialFolders(Desktop))
For each file in fld.files
    if LCase(FSO.GetExtensionName(file)) = "txt" Then
        iMsg.AddAttachment file.path 
    End if
Next
iMsg.Send

Отправлено: 18:26, 21-05-2011 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


staw2ros, тогда уж не:
Цитата staw2ros:
…удалось решить…»
а «мне сделали» — я видел этот код.
Цитата staw2ros:
проблему удалось решить…»
Проблемы могут возникать позже, если вдруг на рабочем столе появятся «лишние» текстовые файлы.

Отправлено: 19:31, 21-05-2011 | #9


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
а «мне сделали» — я видел этот код. »

Это да! На авторство я не претендую

Отправлено: 19:52, 21-05-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как прикрепить несколько файлов в письме?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как прикрепить файл для отправки по электронной почте в CMS Joomla? SashaKl Вебмастеру 1 12-06-2009 15:44
Можно ли к ga-8i915p duo прикрепить шесть хардов, и как если да? klesk Материнские платы и память 5 27-03-2009 12:07
[решено] Не выделяются несколько файлов McHain Microsoft Windows Vista 2 18-04-2007 09:01




 
Переход