_INetMail verträgt kein '&' im Body

  • Hallo,

    darf ich im body von _inetmail kein "&" verwenden??

    [autoit]

    _INetMail("test@test.de", "betreff", "a & b")

    [/autoit]

    öffnet eine mail mit nur dem a im Body..
    Weiß jemand rat wie man das verhindert?

    Danke

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    Einmal editiert, zuletzt von franzp (23. August 2010 um 10:58)

  • ok. und wie genau meinst du?

    [autoit]

    _INetMail("test@test.de", "betreff", "a & b")

    [/autoit]

    ?(

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • geht bei mir nicht. Nur das a im body der mail.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • geht bei mir nicht. Nur das a im body der mail.


    Hallo Franz,

    der Grund dafür wird bei einem Blick in die Funktion "_INetExplorerCapable" der UDF "inet.au3" ersichtlich.

    Hier wird ein "mailto"-String erzeugt, wie Du Ihn auch in einem voherigen Thread benutzt hattest, welcher dann von der Funktion "_inetMail" an den Standard-Mailclient übergeben wird.

    Das "&" wird hierbei allerdings als Beginn einer Option gesehn, wie z.B. "&body=". Bei unbekannten Optionen wird der Rest des Strings einfach ignoriert. Damit dies nicht geschieht, müssen alle "&"-Zeichen, die keine Option einleiten, in %26 umgewandeltet werden.

    Eine Möglichkeit wäre, die Funktion "_INetExplorerCapable" entsprechend zu erweitern:

    [autoit]

    $s_IEReturn = StringRegExpReplace($s_IEReturn, "&(?!cc|bcc|body)", "%26")

    [/autoit]

    Komplette Funktion:

    Spoiler anzeigen
    [autoit]

    Func _INetExplorerCapable($s_IEString)
    If StringLen($s_IEString) <= 0 Then Return SetError(1, 0, '')
    Local $s_IEReturn
    Local $n_IEChar
    For $i_IECount = 1 To StringLen($s_IEString)
    $n_IEChar = '0x' & Hex(Asc(StringMid($s_IEString, $i_IECount, 1)), 2)
    If $n_IEChar < 0x21 Or $n_IEChar = 0x25 Or $n_IEChar = 0x2f Or $n_IEChar > 0x7f Then
    $s_IEReturn = $s_IEReturn & '%' & StringRight($n_IEChar, 2)
    Else
    $s_IEReturn = $s_IEReturn & Chr($n_IEChar)
    EndIf
    Next
    ; ersetzt alle "&"-Zeichen, denen nicht "cc", "bcc" oder "body" folgt, in %26
    $s_IEReturn = StringRegExpReplace($s_IEReturn, "&(?!cc|bcc|body)", "%26")
    Return $s_IEReturn
    EndFunc

    [/autoit]

    Gruß
    Moctezuma III.

  • super danke. das funktioniert!

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---