graudon
Goto Top

VBS Fehler bei WriteLine

Hallo zusammen,

ich verwende ein Script in OL2016, welches E-Mail -Inhalte in eine Textdatei schreibt. Das läuft schon seit Jahren!

Es schreibt den Mail-Betreff in die erste Zeile der Datei und den Body in die 2. Zeile.

Jetzt läuft das Script häufig in den Fehler 800A0005 - Ungültiger Prozeduraufruf oder ungültiges Argument.

Der Fehler tritt beim Schreiben der 2. Zeile auf. Ich habe das nun geändert und in mal in eine Zeile schreiben wollen - gleiches Ergebnis. Ich gehe davon aus, das der Inhalt des Bodys ein Problem verursacht.

Trivialtexte a „Das ist ein Test“ funktionieren. Längere Zufallszeichenfolgen gehen schief...

Hat jemand eine Idee?

Danke und Grüsse

Content-Key: 531434

Url: https://administrator.de/contentid/531434

Printed on: May 7, 2024 at 14:05 o'clock

Member: LukasD
LukasD Jan 04, 2020 at 13:20:19 (UTC)
Goto Top
Hi,

wäre hilfreich, wenn du das Script mal veröffentlichst.
Mitglied: 142232
142232 Jan 04, 2020 updated at 13:29:59 (UTC)
Goto Top
Vermutlich nutzt du das falsche Encoding beim Öffnen/Erstellen der Datei. Glaskugel da Code fehlt ...
Das FS Object beschwert sich dann mit d o.g. Fehler bei nicht supporteten Zeichen, per Default werden Files ja als Plain ASCII geöffnet.
https://www.devguru.com/content/technologies/vbscript/filesystemobject-o ...

Ich würde alles statt mit dem FS Object auszugeben, als UTF-8 wegschreiben, und zwar so
https://developer.rhino3d.com/guides/rhinoscript/read-write-utf8/
Member: Graudon
Graudon Jan 04, 2020 at 14:34:40 (UTC)
Goto Top
Klar, anbei schon mal der kritische Teil:

...
If prop.Value = "" And result.Count > 0 then

If VW=015 Then
LE=12
Else LE=11
END IF

MSISDN = mid( vRN ,POS , LE )
Inhalt = LEFT(TRIM(objEMail.body),300)
prop.Value ="m"
objEMail.save
randomize
Set f = fso.OpenTextFile(PATH_SMS_DIR & "\" & Cstr(tmp) & "_" & Cstr(Int((9999 - 0 + 1) * Rnd + 5)) & ".txt", 2, True)
f.WriteLine MSISDN
f.WriteLine Inhalt
f.Close
END IF



Es handelt sich hier um einen Mail2SMS-Versand. Dazu muss erst die Rufnummer formatiert werden um die Rufnummer ordentlich zu formatieren und der Inhalt der SMS steht dann im Body. Dafür dreht das Script noch einige Runden. Bis zur MSISDN kommt es problemlos. Das File wird angelegt und die Rufnummer steht auch drin. Der Part mit dem Body ist das Problem. Aber er sieht such nicht anders aus, als andere Scripte an der Stelle auch. Wird noch mehr gebraucht?
Mitglied: 142232
142232 Jan 04, 2020 updated at 14:45:49 (UTC)
Goto Top
Erstens
Inhalt = LEFT(TRIM(objEMail.body),300)
erster Fehler, die Zeile geht davon aus das der Body mindestens 300 Zeichen lang ist, ist er das nicht wird dein Skript in einen Fehler laufen!

Zweitens
Set f = fso.OpenTextFile(PATH_SMS_DIR & "\" & Cstr(tmp) & "_" & Cstr(Int((9999 - 0 + 1) * Rnd + 5)) & ".txt", 2, True)
Definiert das File als ASCII, siehe Link von mir oben zum definieren des Encodings der Datei (Parameter 4)! Oder besser gleich wie im Link als UTF-8 kodiert weg schreiben.
Außerdem prüfst du nicht ob die Dateien schon existiert, du wirst sie also im Extremfall überschreiben.

Drittens
f.WriteLine Inhalt
Wenn Inhalt durch den Fehler leer ist, ebenfalls Exception.

Also nochmal VBS Grundkurs zur Fehlerbehandlung besuchen 😜.
Member: Graudon
Graudon Jan 04, 2020 at 15:22:12 (UTC)
Goto Top
Grundkurs würde schon mal gut sein und nein, ich habe von VBS eigentlich keine Ahnung - sorry ;-((

Aber ich habe deine Hinweise mal getestet:
Erstens: die 300 Zeichen sollen den Inhalt begrenzen. Ich habe mal auf 30 Zeichen reduziert und 50 geschickt.- hat aber keinen Effekt, bzw. Es hat einmal funktioniert, dann nicht mehr (gleicher Fehlercode an gleicher Stelle …
Zweitens: das habe ich jetzt noch nicht probiert - mache ich die Tage, wenn ich wieder mehr Zeit habe und die Files bekommen jedes Mal den Timestamp und eine Zufallszahl. Das geht so in Ordnung
Drittens: Wenn ich mir Inhalt in der MsgBox ausgeben lasse wird alles angezeigt, also Inhalt ist nie leer.

Interessanterweise funktionieren E-Mails, wenn sie z.B. von Outlook versendet werden. Meine Testmails kamen vom iPhone - also doch letztendlich so eine Formatproblem. rrr ;-((
Mitglied: 142232
142232 Jan 04, 2020 updated at 15:39:49 (UTC)
Goto Top
Deswegen gleich per UTF-8 wegschreiben wie ich gesagt habe dann bist du den Fehler sofort los.
Member: mayho33
mayho33 Jan 04, 2020 at 21:28:48 (UTC)
Goto Top
Zitat von @Graudon:
Erstens: die 300 Zeichen sollen den Inhalt begrenzen. Ich habe mal auf 30 Zeichen reduziert und 50 geschickt.- hat aber keinen Effekt, bzw. Es hat einmal funktioniert, dann nicht mehr (gleicher Fehlercode an gleicher Stelle …

LEFT(TRIM(objEMail.body),300)

Warum baust du dann nicht einfach ein If drumherum?

If len((TRIM(objEMail.body)) > 200 then
... 
End if
Member: Graudon
Graudon Jan 05, 2020 at 17:29:20 (UTC)
Goto Top
Moin, danke euch allen, leider kann ich deine Lösung lieber serial nicht nutzen, da das Zielprogramm mit mehreren Applikationen arbeitet und nur ein Standard versteht face-sad(

Ansonsten tritt das Problem nur bei iOS Mailclients auf, so dass ich das erst mal so hinbekomme - schönen Sonntag dann noch!

Grüsse
Mitglied: 142232
142232 Jan 05, 2020 updated at 19:32:23 (UTC)
Goto Top
Dann nutz halt Regex um ungültige Zeichen auszufiltern, oder eben ANSI 1252 face-wink.
Member: Graudon
Graudon Jan 05, 2020 at 19:34:15 (UTC)
Goto Top
wie sähe das aus?
Mitglied: 142232
142232 Jan 05, 2020 updated at 20:59:44 (UTC)
Goto Top
Ein Replace z.B.mit folgendem Regex
[^\w]
Damit werden alle Zeichen die nicht a-z A-Z 0-9 oder underscore sind gelöscht. Kannst du natürlich um weitere Zeichen ergänzen die du zusätzlich erlauben willst.
Oder als weiteres Beispiel alle Zeichen die keine ASCII Zeichen sind ersetzen
[^\x00-\x7F]

Weitere Info zu Regular Expressions findest du hier
https://docs.microsoft.com/de-de/dotnet/standard/base-types/regular-expr ...

Wie man mit VBS Regex anwendest kannst du hier nachlesen
https://developer.rhino3d.com/guides/rhinoscript/vbscript-regexp-objects ...