Variable in Body einer E-Mail einfügen

  • Hallo zusammen,

    ich habe folgendes Problem. Ich habe ein Script was Systeminformationen ausliest und in einer Variable speichert. Diese Informationen sollen jetzt in den Body einer E-Mail eingefügt werden und dann verschickt werden.

    Der Hintergrund ist, dass ich eine Art Inventur über die Konfiguration der PCs im Unternehmen machen will. Die Kollegen sollen nur einen Button drücken und schon werden die Informationen in einem versteckten Fenster ausgelesen und sollen nun noch in die E-Mail eingefügt werden, dass sie die Mail abschicken können.

    Zum öffnen der E-Mail nutze ich den Befehl: _INetMail($Addr, $Subj, $Body)

    Adresse, Betreff ist ja klar, das geb ich als Text ein. Nur kann man auch irgendwie in den Body den Inhalt der Variable einfügen mit der ich die Informationen ausgelesen habe?

    Die Alternative wäre Send($Sysinfo) aber das ist ja auch irgendwie Banane wenn der User 2 Minuten da sitzt bis da alles drinsteht. Außerdem müsste ich ja dann die Tastatur und Mauseingabe sperren und ein Teil der Leute würden dem dann sicher irgendwie nicht trauen und den PC ausschalten. :D

    Als blutiger Anfänger bin ich natürlich für jeden Tip dankbar. :)


    Gruß,

    Martin

  • Du kannst doch bei Body einfach deine Variable einfügen. Das müsste eigentlich gehen. Oder sonst musst du dein Problem genauer beschreiben.

  • Das geht leider nicht. Oder ich kappier irgendwas nicht, was ich eher glaube.
    Das Skript habe ich so in abgewandelter Form im Forum gefunden:

    [autoit]

    #include <INet.au3>
    $rueckgabe = " "
    $fehler = ""
    GUICreate("Systeminfo",500,500)
    $edit = GUICtrlCreateEdit("Systeminformationen laden",0,0,500,500)
    GUISetState()
    $pid = run(@comspec & " /k systeminfo","", @SW_HIDE,6)
    While 1
    $rueckgabe &= StdOutRead($pid)
    If @error Then ExitLoop
    $fehler &= StdErrRead($pid)
    sleep(10)
    Wend
    GUICtrlSetData($edit, $Rueckgabe)
    $Addr = "name@domain.de"
    $Subj = "Systeminformationen von " & @UserName & " an Administrator senden"
    $Body = "??"
    _INetMail($Addr, $Subj, $Body)
    WinClose("Systeminfo")

    [/autoit]

    Ich bin jetzt davon ausgegangen es müsste $Body = $rueckgabe heißen. Aber das funktioniert nicht.

    Wenn ich das Skript laufen lasse steht im meiner Betreffzeile: Systeminformationen von USERNAME an Administrator senden&body=

    Schon da kann doch irgendetwas nicht stimmen.

    Gruß,
    Martin

  • Mir ist noch nicht ganz klar für was das GUI ist, aber so wie du das beschrieben hast müsste es eigentlich gehen. Hast du schon geprüft ob dein Rückgabewert überhaupt stimmt?

  • also bei mir funzt das einwandfrei mit Outlook 2010 ;)

    [autoit]

    #include <INet.au3>
    $rueckgabe = " "
    $fehler = ""
    GUICreate("Systeminfo",500,500)
    $edit = GUICtrlCreateEdit("Systeminformationen laden",0,0,500,500)
    GUISetState()
    $pid = run(@comspec & " /k systeminfo","", @SW_HIDE,6)
    While 1
    $rueckgabe &= StdOutRead($pid)
    If @error Then ExitLoop
    $fehler &= StdErrRead($pid)
    sleep(10)
    Wend
    GUICtrlSetData($edit, $rueckgabe)
    $Addr = "name@domain.de"
    $Subj = "Systeminformationen von " & @UserName & " an Administrator senden"
    $Body = $rueckgabe
    _INetMail($Addr, $Subj, $Body)
    WinClose("Systeminfo")

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Die GUI ist nur dafür da, dass ich sehe was passiert. Sie wird dann später entfernt. Dafür fehlt mir momentan nur noch etwas Vorstellungskraft. :)

    Der Rückgabewert stimmt aber definitiv, denn ich habe es auch so probiert, dass ein notepad geöffnet wird und dann mit dem Send Befehl der Inhalt der Variable in das Notepad geschrieben wird und das hat super funktioniert. Was mich am meisten wundert ist, dass im Betreff am Ende "&body= " steht.

    Kann es vielleicht sein, dass es zu schnell geht und irgendwohin ein sleep muss?

    Gruß,
    Martin

  • Wie Schnuffel schon gesagt hat, bei mir funktioniert es auch. Aber bei dir scheint ja gar nichts zu gehen. Kann es sein das es an Outlook liegt? Hast du schon mal probiert ein weiteres Script zu schreiben, in dem du nur ein E-Mail sendest mit einem definierten Text? Wenn das auch nicht klappt, liegt das Problem wohl anderswo.

  • Einzelne Werte in den Body zu schreiben ist kein Problem.

    Also sowas wie Send @Username etc.. nur das mit der Variable funktioniert nicht.

    Allerdings benutzen wir auch Lotus Notes und nicht Outlook, aber daran kann es ja eigentlich nicht liegen.

  • Na ich denke genau daran wird es liegen. ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Eine andere Möglichkeit wäre ja die Variable in eine Textdatei zu speichern die man dann anhängen kann.

    Kann man sowas realisieren?

  • [autoit]

    _FileReadToArray($f_log_file,$as_Body)
    $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body,"EHLO " & @computername, -1)

    [/autoit]

    ich verschicke so Mails an unseren Exchange 2010 ohne Outlook, wozu auch ne Mail öffnen wenn es so geht.
    $as_body ist übrigens ein Array, nachdem es zuvor aus einer textdatei eingelesen wurde.

    benötigt wird noch

    [autoit]

    #include <INet.au3> ; für Mailversand ohne Client

    [/autoit]

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • So hab ich es jetzt auch mal ausprobiert.

    [autoit]

    #include <INet.au3>
    $rueckgabe = " "
    $fehler = ""
    GUICreate("Systeminfo",500,500)
    $edit = GUICtrlCreateEdit("Systeminformationen laden",0,0,500,500)
    GUISetState()
    $pid = run(@comspec & " /k systeminfo","", @SW_HIDE,6)
    While 1
    $rueckgabe &= StdOutRead($pid)
    If @error Then ExitLoop
    $fehler &= StdErrRead($pid)
    sleep(10)
    Wend
    GUICtrlSetData($edit, $Rueckgabe)
    $Response = $rueckgabe
    $s_SmtpServer = "10.11.11.10"
    $s_FromName = @UserName
    $s_FromAddress = "blub@blub.com"
    $s_ToAddress = "bla@bla.com"
    $s_Subject = "subject"
    $as_Body = "body"

    [/autoit][autoit][/autoit][autoit]

    $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body,"EHLO " & @computername, -1)
    WinClose("Systeminfo")

    [/autoit]

    Als Ergebis bekomme ich lediglich eine Mail mit korrektem Absender und korrektem Betreff.
    Mehr leider nicht. :(

    Liegt also wirklich an Lotus Notes wie es aussieht.

  • Zitat aus der Hilfe:
    "$as_Body [optional] Baut den Inhalt der Email als 1-dimensionales Array aus Strings auf. Jeder Wert innerhalb des Arrays wird in der Email mit @CRLF beendet."

    $as_Body muss also ein Array aus Strings sein und nicht ein einzelner String. Am besten machst du das also so:
    $as_Body = StringSplit($rueckgabe, @CRLF, 2)

    Und bei dieser Funktion liegt es definitiv nicht an Lotus Notes.

    Gruss Shadowigor

  • Danke euch :) ich habs auch vorhin gemerkt.

    [autoit]

    #include <INet.au3>
    $rueckgabe = " "
    $rueckip = " "
    $fehler = ""
    ;GUICreate("Systeminfo",500,500)
    ;$edit = GUICtrlCreateEdit("Systeminformationen laden",0,0,500,500)
    ;GUISetState()
    $sid = run(@comspec & " /k systeminfo","", @SW_HIDE,6)
    $iid = run(@comspec & " /k ipconfig /all","", @SW_HIDE,6)
    While 1
    $rueckgabe &= StdOutRead($sid)
    If @error Then ExitLoop
    $fehler &= StdErrRead($sid)
    sleep(10)
    Wend
    While 1
    $rueckip &= StdOutRead($iid)
    If @error Then ExitLoop
    $fehler &= StdErrRead($iid)
    sleep(10)
    Wend
    ;GUICtrlSetData($edit, $Rueckgabe)
    Local $Response
    ; $Response = $rueckgabe
    $s_SmtpServer = "10.11.11.10"
    $s_FromName = @UserName
    $s_FromAddress = "bla@blacom"
    $s_ToAddress = "blub@blub.com"
    $s_Subject = "Systeminformationen von " & @UserName
    Dim $as_Body[6]
    $as_Body[0] = "Systeminformationen von:"
    $as_Body[1] = @UserName
    $as_Body[2] = "Workstation:"
    $as_Body[3] = @ComputerName
    $as_Body[4] = $rueckgabe
    $as_Body[5] = $rueckip

    [/autoit][autoit][/autoit][autoit]

    $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body,"EHLO " & @computername, -1)
    $err = @error
    If $Response = 1 Then
    MsgBox(0, "Informationen gesendet", "Die E-Mail wurde versandt")
    Else
    MsgBox(0, "Fehler!", "Das versenden der E-Mail schlug fehl. Bitte kontaktieren Sie die Hotline und nennen Sie den Fehlercode: " & $err)
    EndIf
    WinClose("Systeminfo")

    [/autoit]

    Funktioniert echt spitze!!!