прочитать текст и отправить последнюю строку на адрес электронной почты - vbscript

Привет,

Я вернулся, ха-ха :-) так что у меня есть следующий вопрос, и я надеюсь, что кто-то может мне помочь... Я знаю, что у меня много вопросов, но я попытаюсь выучить vbscript :-)

Ситуация: этот скрипт считывает (каждые 5 минут) последнюю строку txt и отправляет ее на мой адрес электронной почты.

Проблема: Проверяю txt все 5 мин, но на данный момент каждые 5 мин приходит мэйл. Буду стараться получать только новую почту, когда в txt будет что-то новое.

Option Explicit

Dim fso, WshShell, Text, Last, objEmail

Const folder = "C:\test.txt"

Set fso=CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

Do
    Text = Split(fso.OpenTextFile(Datei, 1).ReadAll, vbCrLF)
    Letzte = Text(UBound(Text))
                       Set objEmail = CreateObject("CDO.Message")
                    objEmail.From = "[email protected]"
                    objEmail.To = "[email protected]"
                    objEmail.Subject = "Control" 
                    objEmail.Textbody = Last
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
                            "smtpip" 
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
                    objEmail.Configuration.Fields.Update
                    objEmail.Send

                    WScript.Sleep 300000
Loop

Кто-нибудь может мне помочь?

Сорри за мой плохой английский...


person Sebastian    schedule 17.06.2010    source источник


Ответы (2)


попробуй это

Option Explicit

Dim fso, WshShell, Text, Last, objEmail, linecount

Const folder = "C:\test.txt"
linecount = 0

Set fso=CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

Do
    Text = Split(fso.OpenTextFile(Datei, 1).ReadAll, vbCrLF)
    if UBound(Text) > linecount Then
         linecount = UBound(Text)
         Letzte = Text(UBound(Text))
                       Set objEmail = CreateObject("CDO.Message")
                    objEmail.From = "[email protected]"
                    objEmail.To = "[email protected]"
                    objEmail.Subject = "Control" 
                    objEmail.Textbody = Last
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
                            "smtpip" 
                    objEmail.Configuration.Fields.Item _
                        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
                    objEmail.Configuration.Fields.Update
                    objEmail.Send
     End If

                    WScript.Sleep 300000
Loop
person Tester101    schedule 17.06.2010

Причина, по которой вы получаете только одно письмо, заключается в том, что UBound дает вам только последний элемент массива.

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

Option Explicit 

Dim fso, WshShell, Text, Last, objEmail 

Const folder = "C:\test.txt" 

Set fso=CreateObject("Scripting.FileSystemObject") 
Set WshShell = WScript.CreateObject("WScript.Shell") 

dim index = 1

Do 
    Text = Split(fso.OpenTextFile(Datei, 1).ReadAll, vbCrLF) 
    Letzte = Text(UBound(Text)) 

                WScript.Sleep 300000 

for i = index to UBound(Text) 
                   Set objEmail = CreateObject("CDO.Message") 
                objEmail.From = "[email protected]" 
                objEmail.To = "[email protected]" 
                objEmail.Subject = "Control"  
                objEmail.Textbody = Last 
                objEmail.Configuration.Fields.Item _ 
                    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
                objEmail.Configuration.Fields.Item _ 
                    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ 
                        "smtpip"  
                objEmail.Configuration.Fields.Item _ 
                    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
                objEmail.Configuration.Fields.Update 
                objEmail.Send 
Next 

index = UBound(Text) 

Loop 
person Aidan    schedule 17.06.2010
comment
каждые 5 минут приходит письмо с последней строчкой test.txt! Моя проблема сейчас, я буду получать почту только тогда, когда в txt есть что-то новое. Так что я буду проверять txt все 5 минут и если в нем будет что-то новое (только последняя строка), мне придет письмо. Мне жаль мой английский. отметка времени ключевого слова, например - person Sebastian; 17.06.2010
comment
спасибо, но это одна и та же проблема, все 5 минут я стал почтой ... но я получу почту только тогда, когда в txt появится новая строка ... - person Sebastian; 17.06.2010