Textdatei einlesen und als Mail versenden...

  • Huhu zusammen.

    Folgende Problematik:

    Ich erstelle via

    [autoit]

    ShellExecuteWait("msinfo32", " /report C:\TEMP\TEST.txt", "") ;@SW_HIDE,6)

    [/autoit]

    eine Textdatei mit Systeminformationen.

    Diese möchte ich mit

    [autoit]

    $eid = FileRead("C:\TEMP\TEST.txt")

    [/autoit]

    einlesen und als Mailbody versenden...

    Lasse ich mir $eid als MsgBox ausgeben, stimmt alles...

    Nur der Inhalt der TEST.txt wird nicht in die Mail übernommen ?(

    Hier Mal das Skript:

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=D:\Tools\Iconsammlung\active Ports.ico
    #AutoIt3Wrapper_Outfile=SysInfo-Mailer2.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Comment=SysInfo-Mailer ist ein Programm zum Senden von Systeminformationen via Mail
    #AutoIt3Wrapper_Res_Description=SysInfo-Mailer ist ein Programm zum Senden von Systeminformationen via Mail
    #AutoIt3Wrapper_Res_Fileversion=1.0.1.0
    #AutoIt3Wrapper_Res_LegalCopyright=2011 - mike280399
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <INet.au3>
    $rueckip = " "
    $fehler = ""
    ShellExecuteWait("msinfo32", " /report C:\TEMP\TEST.txt", "") ;@SW_HIDE,6)
    MsgBox(64, "Einlesevorgang", "Das Einlesen der Daten in die Mail wird nun durchgeführt." & @CRLF & "Dieser Vorgang kann mehrere Minuten in Anspruch nehmen" & @CRLF & "Bitte warten Sie auf die Meldung, ob der Vorgang erfolgreich durchgeführt werden konnte.", 20)

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

    $eid = FileRead("C:\TEMP\TEST.txt")

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

    ;MsgBox(0, "", $eid)
    $iid = Run(@ComSpec & " /k ipconfig /all", "", @SW_HIDE, 6)
    While 1
    $rueckip &= StdoutRead($iid)
    If @error Then ExitLoop
    $fehler &= StderrRead($iid)
    Sleep(10)
    WEnd
    ;GUICtrlSetData($edit, $Rueckgabe)
    Local $Response
    ; $Response = $rueckgabe
    $s_SmtpServer = "smtp.mike280399.de"
    $s_FromName = @UserName
    $s_FromAddress = "syscheck@mike280399.eu"
    $s_ToAddress = "info@mike280399.eu"
    $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[4] = $eid
    $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 Herrn Mountain und nennen Sie den Fehlercode: " & $err)
    EndIf

    [/autoit]

    Die Netzwerkeinstellungen die ich via IPCONFIG auslese stehen in der Mail drin. :wacko:

  • über einen "normalen" SMTP-Server wirst Du Dich mit diesem Script schwer tun, da Du so keinen User und kein Passwort angeben kannst.
    Versuche es doch mal mit diesem Script... (PS: der body sollte dabei ein String und kein Array sein ;) )
    dafür kannst Du auch HTML-Emails versenden. Musst halt nur dem entsprechend formatieren.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    $rc = _INetSmtpMailCom("MailServer", "Your Name", "your@Email.Address.com", "CCadress1@test.com;CCadress2@test.com", "Test Subject", "Test <b>Body</b>", "test.au3;test3.au3")
    ;
    ;
    ;
    ;
    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Cc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
    $objEmail.HTMLBody = $as_Body
    Else
    $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
    Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
    For $x = 1 To $S_Files2Attach[0]
    $S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    Else
    $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
    SetError(1)
    return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Sent the Message
    $objEmail.Send
    if @error then
    SetError(2)
    return $oMyRet[1]
    EndIf
    EndFunc ;==>_INetSmtpMailCom
    ;
    ;
    ; Com Error Handler
    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description,3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
    EndFunc ;==>MyErrFunc

    [/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. ;)

  • Urgs!
    Das is mir zu hoch!
    Bin doch noch in den "AutoIT-Kinderschuhen" :D
    Mein Skript funzt ja, bis auf die Tatsache das der TEST.txt-Inhalt nicht mitgesandt wird wunderbar...
    Wie gesagt, die IPCONFIG-Geschichte kommt ja an.

    #EDIT: Ok, habs soweit hinbekommen das die Textdatei erstellt wird und diese auch versandt wird... :D
    Mein armes vernachlässigtes Hirn musste ganz schön leiden :P
    Was ich nich Check grad, ist wo genau ich nu meine "Feddichmeldung" einbauen kann...

    #EDIT2: Ok, das läuft nu auch :D
    Kannst Du mir nur noch kurz erklären wie ich da meine IPCONFIG /all - Abfrage mit einbaue ?
    Die Netzwerkinformationen sind mir sehr wichtig

    3 Mal editiert, zuletzt von Mike280399 (25. Oktober 2011 um 22:45)

  • Hallo mike,

    ich habe dein Skript etwas abgeändert, so sollte es funktionieren:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=D:\Tools\Iconsammlung\active Ports.ico
    #AutoIt3Wrapper_Outfile=SysInfo-Mailer2.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Comment=SysInfo-Mailer ist ein Programm zum Senden von Systeminformationen via Mail
    #AutoIt3Wrapper_Res_Description=SysInfo-Mailer ist ein Programm zum Senden von Systeminformationen via Mail
    #AutoIt3Wrapper_Res_Fileversion=1.0.1.0
    #AutoIt3Wrapper_Res_LegalCopyright=2011 - mike280399
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <INet.au3>
    #include <File.au3>
    #include <array.au3>
    $rueckip = " "
    $fehler = ""
    MsgBox(64, "Einlesevorgang", "Das Einlesen der Daten in die Mail wird nun durchgeführt." & @CRLF & "Dieser Vorgang kann mehrere Minuten in Anspruch nehmen" & @CRLF & "Bitte warten Sie auf die Meldung, ob der Vorgang erfolgreich durchgeführt werden konnte.", 20) ;<=========
    ShellExecuteWait("msinfo32", " /report " & @TempDir & "\TEST.txt", "") ;@SW_HIDE,6) ;<=========

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

    Dim $eid[1] ;<=========
    _FileReadToArray(@TempDir & "\TEST.txt", $eid) ;<=========
    $iid = Run(@ComSpec & " /k ipconfig /all", "", @SW_HIDE, 6)
    While 1
    $rueckip &= StdoutRead($iid)
    If @error Then ExitLoop
    $fehler &= StderrRead($iid)
    Sleep(10)
    WEnd
    ;GUICtrlSetData($edit, $Rueckgabe)
    Local $Response
    ; $Response = $rueckgabe
    $s_SmtpServer = "smtp.mike280399.de"
    $s_FromName = @UserName
    $s_FromAddress = "syscheck@mike280399.eu"
    $s_ToAddress = "info@mike280399.eu"
    $s_Subject = "Systeminformationen von " & @UserName
    Dim $as_Body[$eid[0] + 7]
    $as_Body[0] = "Systeminformationen von:"
    $as_Body[1] = @UserName
    $as_Body[2] = "Workstation:"
    $as_Body[3] = @ComputerName
    For $i = 1 To $eid[0] ;<========= von hier
    $as_Body[$i + 4] = $eid[$i]
    Next
    $as_Body[$i + 5] = $rueckip ;<========= bis hier

    [/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 Herrn Mountain und nennen Sie den Fehlercode: " & $err)
    EndIf

    [/autoit]

    die Änderungen sind mit ;<===== gekennzeichnet,

    mfg autoBert

  • Wow, vielen Dank für Deine Mühe autoBert ! :thumbup:
    Das sieht alles ziemlich schlüssig aus, nur leider kommt keine Mail an, obwohl alles richtig eingestellt ist und auch keine Fehlermeldung ausgespuckt wird ?(
    Eigenwillig das Ganze...
    SMTP hab ich übrigends `nen Eigenen, da brauche ich keinen Usernamen und PW für ;)

  • Dann schalte einmal den trace-Modsu ein:

    [autoit]

    $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, "EHLO " & @ComputerName, True)

    [/autoit]

    vielleicht kann man ja im Trce-Fenster erkennen woran es scheitert,

    mfg autoBert

  • Äh.... Mal `ne blöde Frage, wo is das Trace - Fenster ? :whistling:
    Ist dass das Fenster was ich unten sehe wenn das Skript ausgeführt wird ?
    Wenn ja, dann steht da nix aussergewöhnliches drin...