Войти

Показать полную графическую версию : Помогите новичку разобраться со скриптом(vbs).


Vector101
15-03-2013, 10:15
Есть код. Украденный с кого то форума. Я честно пытался разобраться несколько дней, но ничего не вышло, он не работает даже в оригинальной версии.

Суть такова: скрипт должен проверять последние изменение в файле (дату или время) сопоставлять с текущем временем и если это время на 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
о проблемах »
Плохо скопипастили... :)
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
т.е. получается нужно было кое где поставить пробелы и табуляцию?)

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

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

gora
15-03-2013, 15:40
эта буква "о" получается »
Нет, дело не в букве. Не может выполнить отправку сообщения. У меня такая ошибка возникает при попытке установить номер порта из Вашего сообщения 465. У меня номер порта 25, проверьте у себя в настройках почты номер порта, а также правильность заполнения всех полей настроек почты и особенно параметра strSmtpServer на соответствие настройкам Вашей почты.

получается нужно было кое где поставить пробелы и табуляцию »
Нет. У Вас там много ошибок.
strFilePath = "с:\text.txt" »
Буква диска кириллицей
Else MsgBox "разница: " & lngDifference, ,"послать письмо" »
End If Sub »
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
Огромное Вам спасибо gora! Все работает на 25ом порте. Что самое интересное - это то что я эти настройки проверял 100500 раз, на самом mail.ru!!! Уж не знаю в чем беда, но теперь все работает!

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




© OSzone.net 2001-2012