Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите новичку разобраться со скриптом(vbs). (http://forum.oszone.net/showthread.php?t=256350)

Vector101 15-03-2013 10:15 2111625

Помогите новичку разобраться со скриптом(vbs).
 
Есть код. Украденный с кого то форума. Я честно пытался разобраться несколько дней, но ничего не вышло, он не работает даже в оригинальной версии.

Суть такова: скрипт должен проверять последние изменение в файле (дату или время) сопоставлять с текущем временем и если это время на 20 часов или 1 день меньше настоящего, то отправлять сообщение по внешней почте, в моем случае маил.

Код:

Dim objFSO, objFile, strFilePath, lngDifference

strFilePath = "с:\text.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.fileexists(strFilePath)
Then ExitScript()
Set objFile = objFSO.getfile(strFilePath)
lngDifference = DateDiff("h", objFile.DateLastModified, Now)

If CLng(lngDifference) < 20 Then
MsgBox "разница: " & lngDifference, ,"не посылать письмо"
ExitScript()
Else MsgBox "разница: " & lngDifference, ,"послать письмо"
'SendMail()
ExitScript()

End If Sub
ExitScript()
MsgBox "выход"
Set objFile = Nothing
Set objFSO = Nothing
Wscript.quit
End Sub

Sub SendMail()
Const cdoSendUsingPickup = 1
Set objMessage = CreateObject("CDO.Message")
objMessage.emailFrom = "******@mail.ru"
objMessage.Subject = "тема"
objMessage.From = emailFrom
objMessage.To = "***@al.ru"
objMessage.TextBody = "текст"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.ru" objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = emailFrom objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "******"
objMessage.Configuration.Fields.Update
objMessage.Send
End Sub

А теперь о проблемах, их 2 (условно разделим скрип на проверить и отправить письмо)

1. Чего я вообще понять не могу это с письмом, оно отправляться вообще не хочет, даже когда отдельным скриптом пишу, может быть дело в mail.ru?

2. Как видно из кода, сначала проверяем разницу (всплывает окно), потом отправляем или нет (всплывает окно), так вот проверка работает отлично, но второе окно не всплывает, вместо него вылетает пустое с надписью "выход".

gora 15-03-2013 13:57 2111731

Цитата:

Цитата Vector101
о проблемах »

Плохо скопипастили... :)
Код:

Dim objFSO, objFile, strFilePath, lngDifference

strFilePath = "C:\text.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.fileexists(strFilePath) Then ExitScript()
Set objFile = objFSO.getfile(strFilePath)
lngDifference = DateDiff("h", objFile.DateLastModified, Now)

If CLng(lngDifference) < 20 Then
        MsgBox "разница: " & lngDifference, ,"не посылать письмо"
        ExitScript()
Else
        MsgBox "разница: " & lngDifference, ,"послать письмо"
        SendMail()
        ExitScript()
End If

Sub ExitScript()
        MsgBox "выход"
        Set objFile = Nothing
        Set objFSO = Nothing
        Wscript.quit
End Sub

Sub SendMail()
        Const EmailFrom = "gora***@list.ru"                ' от кого будет отправляться e-mail
        Const EmailPassword = "12345678"                ' пароль от e-mail
        Const strSmtpServer = "smtp.list.ru"                ' smtp сервер
        Const EmailTo = "gora***@list.ru"                ' кому будет отправляться e-mail
        Set objEmail = CreateObject("CDO.Message")
       
        objEmail.From = EmailFrom
        objEmail.To = EmailTo
        objEmail.Subject = "Здесь должен быть текст заголовка"
        objEmail.Textbody = "Текста Вашего письма"
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
        objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        objEmail.Configuration.Fields.Update
        objEmail.Send
End Sub

Ящики и пароль впишите свои, у меня ящик на list.ru (из семейства mail.ru), все отправилось и пришло.

Vector101 15-03-2013 14:53 2111766

т.е. получается нужно было кое где поставить пробелы и табуляцию?)

Однако по конкретно вашему коду новая ошибка, проблема с выводом второго окна не решена (письмо слать или не слать) - это не столь важно, главное что работает. Но зато я теперь уверен что при выполнение нужных условий он пытается отправить.

А с почтой тоже самое :( Когда делаю отдельным скриптом - ошибки нет, но и письма нет, а вот в этой общей картине ругаеться на 44 строку, 2 символ, код ошибки 80040213 ( objEmail.Send) - вот эта буква "о" получается.

gora 15-03-2013 15:40 2111804

Цитата:

Цитата Vector101
эта буква "о" получается »

Нет, дело не в букве. Не может выполнить отправку сообщения. У меня такая ошибка возникает при попытке установить номер порта из Вашего сообщения 465. У меня номер порта 25, проверьте у себя в настройках почты номер порта, а также правильность заполнения всех полей настроек почты и особенно параметра strSmtpServer на соответствие настройкам Вашей почты.

Цитата:

Цитата Vector101
получается нужно было кое где поставить пробелы и табуляцию »

Нет. У Вас там много ошибок.
Цитата:

Цитата Vector101
strFilePath = "с:\text.txt" »

Буква диска кириллицей
Цитата:

Цитата Vector101
Else MsgBox "разница: " & lngDifference, ,"послать письмо" »

Цитата:

Цитата Vector101
End If Sub »

Цитата:

Цитата Vector101
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.ru" objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = emailFrom objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "******" »

Слипшиеся строки
Лишние концевые пробелы во всех строках
Переменная emailFrom вовсе не определена.

Vector101 15-03-2013 16:08 2111829

Огромное Вам спасибо gora! Все работает на 25ом порте. Что самое интересное - это то что я эти настройки проверял 100500 раз, на самом mail.ru!!! Уж не знаю в чем беда, но теперь все работает!

СПАСИБО!!!!!


Время: 05:38.

Время: 05:38.
© OSzone.net 2001-