2017-12-17 3 views
-2

Ich habe eine TXT-Datei erstellt den Nachrichtentext des Vbscript zu unterstützen, aber es liest nur die letzte Zeile des messagebody.txthinzufügen die eine neue Zeile in Nachrichtentext mit folgenden Vbscript

WScript.Sleep 100 

    Set WshShell=WScript.CreateObject("WScript.Shell") 

    Set objShell=WScript.CreateObject("WScript.Shell") 
    set objOutlook=CreateObject("Outlook.Application") 
    Set objMail=CreateObject("CDO.Message") 

Set objMail=objOutlook.CreateItem(0) 
strDesktop = WshShell.SpecialFolders("Desktop") 


Set objFileToReadTo   = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDesktop + "\\send email with attachment\List_To.txt",1) 
Set objFileToReadCC   = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDesktop + "\\send email with attachment\List_CC.txt",1) 
Set objFileToReadSubject  = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDesktop + "\\send email with attachment\List_Subject.txt",1) 
Set objFileToReadBody  = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDesktop + "\\send email with attachment\Email Body.txt",1) 
Set objFileToReadAttachments = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDesktop + "\\send email with attachment\List_Attachments_withFileExtension.txt",1) 

Dim strLineTo 
Dim strLineCC 
Dim strLineSubject 
Dim strLineBody 
Dim strLineAttachments 

objMail.Display 

WScript.Sleep 10 

do while not objFileToReadTo.AtEndOfStream 
strLineTo = objFileToReadTo.ReadLine() 
objMail.To=strLineTo 
loop 
objFileToReadTo.Close 

WScript.Sleep 10 
do while not objFileToReadCC.AtEndOfStream 
strLineCC = objFileToReadCC.ReadLine() 
objMail.cc = strLineCC 
loop 
objFileToReadCC.Close 
'41 
WScript.Sleep 10 
do while not objFileToReadSubject.AtEndOfStream 
strLineSubject = objFileToReadSubject.ReadLine() 
objMail.Subject = strLineSubject 
loop 
objFileToReadSubject.Close 
'48 
WScript.Sleep 10 
do while not objFileToReadBody.AtEndOfStream 
strLineBody = objFileToReadBody.ReadLine() 
objMail.Body = strLineBody & vbCRLF 
loop 
objFileToReadBody.Close 
'55 
WScript.Sleep 10 
do while not objFileToReadAttachments.AtEndOfStream 
strLineAttachments = objFileToReadAttachments.ReadLine() 
objMail.Attachments.Add(strLineAttachments) 
loop 
objFileToReadAttachments.Close 
'62 

'objShell.Sendkeys "%s" 
WScript.Sleep 40 
'objShell.SendKeys "{TAB}" 
'objShell.SendKeys "{UP}" 
'objShell.SendKeys "{Enter}" 
'set MyEmail=nothing 
'objOutlook.Quit 
'Set objMail = Nothing 
'Set objOutlook = Nothing 

und hier ist mein messagebody.txt

Hi, 

Testing vbscript 

Regards, 

abcd 

Es liest nur die letzte ABCD und zeigt das gleiche auf dem oulook Fenster.

Wie kann ich dem Skript mehrere Zeilen zuordnen?

Antwort

2

Ich weiß wirklich nicht, warum Sie verschiedene Textdateien zum Speichern von ToList, CCList, Körper usw. verwendet haben. Aber wenn Sie sicher sind, diesen Ansatz zu verwenden, werde ich es nicht ändern.

Ich weise nur darauf hin, warum Sie nicht den vollständigen Text im E-Mail-Text erhalten. Ersetzen Sie den folgenden Code ein:

do while not objFileToReadBody.AtEndOfStream 
    strLineBody = objFileToReadBody.ReadLine()   'Here you are just overwriting the value contained in strLineBody in each loop iteration. Hence, in the end, only last line is left in this variable 
    objMail.Body = strLineBody & vbCRLF 
loop 

MIT

objMail.Body = objFileToReadBody.readAll 
+0

Eigentlich der Grund ist, dass sie den Text nicht an den Body anhängen, jede Zeile ersetzt den Bodytext, statt 'ReadAll' würde dies das Problem' objMail.Body = objMail.Body & strLineBody' beheben. – Lankymart

+0

@Lankymart was noch habe ich in den Kommentar Teil des Codes geschrieben. Ich habe gerade geschrieben, dass er bei jedem Readline-Aufruf die bestehende Zeile überschreibt. Eine bessere Möglichkeit, alle Inhalte zu integrieren, besteht darin, die readAll-Methode gleichzeitig zu verwenden und sie im E-Mail-Textkörper zu speichern. Was stimmt damit nicht? – Gurman

+0

Kein besserer Weg ist es, jede Zeile anzufügen, die Verwendung von 'ReadAll' ist ineffizient, besonders wenn die Textanforderungen an Größe zunehmen ... und es wird. – Lankymart

1

In der Schleife ersetzen Sie die Body mit jeder Zeile, die Sie lesen, wenn Sie es werden Anhängen sollte. Schalte diese Linie um;

objMail.Body = strLineBody & vbCRLF 

zu sein;

objMail.Body = objMail.Body & strLineBody & vbNewLine 

Wenn Sie die Schleife verzichten und verwenden ReadAll(wie @Gurman haben suggested), bedenken, dass während dieses für minimalen Text in Ordnung sein wird, größere Textdateien werden der Prozess weniger effizient dann durch jede Schleife machen Linie, wie Sie bereits begonnen haben.

Verwandte Themen