Войти

Показать полную графическую версию : [решено] Как прикрепить несколько файлов в письме?


Страниц : [1] 2

staw2ros
20-05-2011, 17:12
К сожалению не очень опытен 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. Что делать если имеется несколько компьютеров..и у них разные пути к рабочему столу?

amel27
20-05-2011, 17:36
1. как вариант - выполнить несколько раз "iMsg.AddAttachment"
2. WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")

staw2ros
20-05-2011, 18:05
1. как вариант - выполнить несколько раз "iMsg.AddAttachment" »
Хм..а если количество и названия файлов произвольные?

amel27
20-05-2011, 18:25
staw2ros, цикл по массиву

Iska
20-05-2011, 19:01
Хм..а если количество и названия файлов произвольные? »
Передавайте скрипту пути к ним аргументами. Если не укладываетесь в ограничения длины пути — то посредством указанного аргументом текстового файла, содержащего пути к прикрепляемым файлам.

staw2ros
20-05-2011, 19:08
И как это можно реализовать с данным скриптом?)

Iska
20-05-2011, 22:50
И как это можно реализовать с данным скриптом? »
Сие может выглядеть, например, так:
Передавайте скрипту пути к ним аргументами. »
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"

…посредством указанного аргументом текстового файла, содержащего пути к прикрепляемым файлам. »
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

staw2ros
21-05-2011, 18:26
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

Iska
21-05-2011, 19:31
staw2ros, тогда уж не:
…удалось решить…»
а «мне сделали» ;) — я видел этот код (http://forum.script-coding.com/viewtopic.php?pid=48589#p48589).
проблему удалось решить…»
Проблемы могут возникать позже, если вдруг на рабочем столе появятся «лишние» текстовые файлы.

staw2ros
21-05-2011, 19:52
а «мне сделали» — я видел этот код. »


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

kolumb 8034
21-02-2013, 19:21
Как на примере
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 все файлы что есть в нутри этой папки не зависимо от имени файлов и расширений

Iska
21-02-2013, 19:45
Например, так:
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
Не хотит выдает ошибку !

http://i52.fastpic.ru/thumb/2013/0221/a4/8cecfd6d7a1ae598302f04db7d5079a4.jpeg (http://fastpic.ru/view/52/2013/0221/8cecfd6d7a1ae598302f04db7d5079a4.jpg.html)

Iska
21-02-2013, 20:21
Поправил выше. Пробуйте.

kolumb 8034
21-02-2013, 21:08
Теперь другая ошибка

http://i52.fastpic.ru/thumb/2013/0221/c4/2eb5d2a99a69c0517fc1a56cf9aa33c4.jpeg (http://fastpic.ru/view/52/2013/0221/2eb5d2a99a69c0517fc1a56cf9aa33c4.jpg.html)

SMTP рабочий 100% на примере первого скрипта работает четко !

Iska
21-02-2013, 22:51
kolumb 8034, наиболее вероятная причина — Ваше письмо было сочтено спамом или содержащим подозрительные файлы. Я легко добился аналогичного ответа, поместив в папку обычный пакетный файл, скрипт vbs и hta. В то же время попытка отправки простых текстовых файлов, документов Word и Excel не вызвала у SMTP-сервера Mail.RU ни малейших возражений, и письма были доставлены по адресу.

Следом: у Яndex'а нашлась инструкция по поведению — Почтовый сервер получателя принимает письма за спам (http://help.yandex.ru/mail/?id=1117077#spamrejected), в том числе и для Mail.RU.

kolumb 8034
22-02-2013, 10:54
Спасибо действительно блокирует антивирус почты ! Подскажите тогда как можно прописать какие именно расширения брать с папки ?

Iska
22-02-2013, 15:22
Какие Вам, например, нужны?

kolumb 8034
24-02-2013, 16:08
txt, js, vbs

Iska
24-02-2013, 17:37
kolumb 8034, есть ненулевая вероятность — как мы уже видели — что данное письмо будет банально «отфутболено» или «завёрнуто» вобрат. Рациональный вариант — помещать потребные файлы в архив под паролем с обязательным шифрованием оглавления («имён файлов»), дабы содержимое архива было неизвестно. Пароль можно произвольно генерировать из ASCII и просто вкладывать в тело письма. Можно пользовать 7-zip или WinRAR.

Как смотрите на такой вариант?




© OSzone.net 2001-2012