|
|
Как прикрепить несколько файлов в письме?
К сожалению не очень опытен 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. Что делать если имеется несколько компьютеров..и у них разные пути к рабочему столу?
|
1. как вариант - выполнить несколько раз " iMsg.AddAttachment"
2.
Код:
WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")
|
Цитата:
Цитата amel27
1. как вариант - выполнить несколько раз "iMsg.AddAttachment" »
|
Хм..а если количество и названия файлов произвольные?
|
staw2ros, цикл по массиву
|
Цитата:
Цитата staw2ros
Хм..а если количество и названия файлов произвольные? »
|
Передавайте скрипту пути к ним аргументами. Если не укладываетесь в ограничения длины пути — то посредством указанного аргументом текстового файла, содержащего пути к прикрепляемым файлам.
|
И как это можно реализовать с данным скриптом?)
|
Цитата:
Цитата 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, Спасибо!
Но проблему удалось решить чуть иначе...вот может кому-нибудь пригодится!
Код:
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
|
staw2ros, тогда уж не:
а «мне сделали» ;) — я видел этот код.
Цитата:
Цитата staw2ros
проблему удалось решить… »
|
Проблемы могут возникать позже, если вдруг на рабочем столе появятся «лишние» текстовые файлы.
|
Цитата:
Цитата Iska
а «мне сделали» — я видел этот код. »
|
Это да! На авторство я не претендую=)
|
kolumb 8034 |
21-02-2013 19:21 2096152 |
Как на примере
этого
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
Реализовать все тоже самое только что бы информацию брало не с рабочего стола а с C:\test все файлы что есть в нутри этой папки не зависимо от имени файлов и расширений
|
Например, так:
читать дальше »
Код:
Option Explicit
Const cdoSendUsingPort = 2
Const cdoBasic = 1
Const strPartSchema = "http://schemas.microsoft.com/cdo/configuration/"
Dim objFSO
Dim objFile
Dim strFolder
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strFolder = "C:\test"
If objFSO.FolderExists(strFolder) Then
If objFSO.GetFolder(strFolder).Files.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 = "login2@mail.ru"
.From = "login@mail.ru"
.Subject = "Отчет"
.TextBody = "Последний месяц"
For Each objFile In objFSO.GetFolder(strFolder).Files
.AddAttachment objFile.Path
Next
.Send
End With
Else
WScript.Echo "Folder [" & strFolder & "] not contain any files"
WScript.Quit 2
End If
Else
WScript.Echo "Folder [" & strFolder & "] not found"
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
|
kolumb 8034 |
21-02-2013 20:14 2096204 |
Не хотит выдает ошибку !
|
kolumb 8034 |
21-02-2013 21:08 2096250 |
Теперь другая ошибка
SMTP рабочий 100% на примере первого скрипта работает четко !
|
kolumb 8034, наиболее вероятная причина — Ваше письмо было сочтено спамом или содержащим подозрительные файлы. Я легко добился аналогичного ответа, поместив в папку обычный пакетный файл, скрипт vbs и hta. В то же время попытка отправки простых текстовых файлов, документов Word и Excel не вызвала у SMTP-сервера Mail.RU ни малейших возражений, и письма были доставлены по адресу.
Следом: у Яndex'а нашлась инструкция по поведению — Почтовый сервер получателя принимает письма за спам, в том числе и для Mail.RU.
|
kolumb 8034 |
22-02-2013 10:54 2096528 |
Спасибо действительно блокирует антивирус почты ! Подскажите тогда как можно прописать какие именно расширения брать с папки ?
|
Какие Вам, например, нужны?
|
kolumb 8034 |
24-02-2013 16:08 2097902 |
txt, js, vbs
|
kolumb 8034, есть ненулевая вероятность — как мы уже видели — что данное письмо будет банально «отфутболено» или «завёрнуто» вобрат. Рациональный вариант — помещать потребные файлы в архив под паролем с обязательным шифрованием оглавления («имён файлов»), дабы содержимое архива было неизвестно. Пароль можно произвольно генерировать из ASCII и просто вкладывать в тело письма. Можно пользовать 7-zip или WinRAR.
Как смотрите на такой вариант?
|
kolumb 8034 |
24-02-2013 19:02 2098029 |
Как вариант можно потестить с почтой вариант такой если в папке присутствует js,vbs.txt,dll письмо не приходит если js,vbs.txt то все норм в моем случаи проблема именно и за dll !!!
Еще если можно подскажите как этот код прописать с BAT в VBS
Код:
@echo off
:start
ping 127.0.0.1 -n 15 >nul
if %errorlevel%==0 (goto send) else (goto end)
:end
goto :start
:send
|
Цитата:
Цитата kolumb 8034
Как вариант можно потестить с почтой вариант такой если в папке присутствует js,vbs.txt,dll письмо не приходит если js,vbs.txt то все норм в моем случаи проблема именно и за dll !!! »
|
А в моём случае — нет.
Так что — делаем? И, если — «Да», то с каким архиватором из указанных.
Цитата:
Цитата kolumb 8034
Еще если можно подскажите как этот код прописать с BAT в VBS »
|
А какое отношение данный вопрос имеет к данной теме? Заведите под него отдельную тему — ответим.
|
kolumb 8034 |
24-02-2013 21:52 2098157 |
WinRAR
|
Примерно так:
Код:
Option Explicit
Const cdoSendUsingPort = 2
Const cdoBasic = 1
Const strPartSchema = "http://schemas.microsoft.com/cdo/configuration/"
Dim objFSO
Dim strFolder
Dim strTempName
Dim strPassword
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strFolder = "C:\test"
If objFSO.FolderExists(strFolder) Then
If objFSO.GetFolder(strFolder).Files.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 = "login2@mail.ru"
.From = "login@mail.ru"
.Subject = "Отчет"
strPassword = objFSO.GetTempName()
.TextBody = "Последний месяц" & vbCrLf & vbCrLf & "Password: " & strPassword
strTempName = GetTemporaryName()
WScript.CreateObject("WScript.Shell").Run """%ProgramFiles%\7-Zip\7z.exe"" a -t7z -p" & strPassword & " -mhe """ & strTempName & """ """ & strFolder & "\*""", 1, True
.AddAttachment strTempName
.Send
End With
objFSO.DeleteFile strTempName, True
Else
WScript.Echo "Folder [" & strFolder & "] not contain any files"
WScript.Quit 2
End If
Else
WScript.Echo "Folder [" & strFolder & "] not found"
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
Const TemporaryFolder = 2
Dim strTempName
With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
End With
GetTemporaryName = strTempName
End Function
'=============================================================================
|
Время: 04:55.
© OSzone.net 2001-