ca. 4000 Zeilen an inetMail übergeben

  • Hallo ich möchte den Inhalt einer Datei als Body der Mail verschicken.

    $email_msg = readfile(Datei)
    msgbox(0,"",$email_msg) klappt

    Wenn ich die Variable an INetMail übergebe bricht er ab, ungültiges Argument oder so etwas kam dann.

    Vom Inhalt her ist es eine Ini Datei, die auch in der MessageBox Vorschau 1:1 wie in der Datei aussieht.

    [label1]
    datei = "blalalalalallalalaal|ofaofhowfhw|owhowehwowehf|ofwhcofoerwng|nwoe"

    davon mit sinnvollerern Inhalt ca. 3500 - 4000 Zeilen

    Ist das machbar das so zu übergeben, was übersehe ich dabei ?

    $email_mesg = "sgergerhrer" & "|" & "sfwegw2" & "|" & "sfwegw2" & "|" & "sfwegw2" & "|" & "sfwegw2" klappt auch
    obwohl hier waren meine ich die " weg.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

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

  • Bei Outlook gab es einen Abruchfehler, bei Outlook Express passiert einfach nix mehr.
    In der Mesagebox sieht es augenscheinlich ok aus.
    Filereadline(text,5) und Fileread(text,5) funktionieren auch.

    Ist das zuviel Futter, schneidet die Message box auch schon ab ? So viel Platz habe ich nicht auf dem Bildschirm ;)
    Ich taste mich mal mit weniger Zeilen ran ....

    Achtung Anfänger! :whistling:

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

  • Hmmm so 250 Zeilen schafft er braucht da aber auch schon ein bissel für
    Sieht dann auch so aus wie es soll, wie
    a:) beschleunigt man das
    b:) macht man es für alle Zeilen möglich

    Als Anhang senden wäre auch ne Idee habe dann aber nur welche mit SMTP Server als Pflichtfeld gefunden,
    da dieses Teilscript beim Kunden laufen soll, kenne ich nicht grundsätzlich den SMTO Server von denen.
    Der User weß vermutlich noch nicht mal was ein SMTP bzw. deren Mailserver ist.
    Und das Netz vom Kunden will ich auch nicht scannen ;)


    Oder in die Zwischenablage kopieren und Fenster aktivieren und rein, aber für X Clients was anderes basteln :(
    Wie sieht denn das aus wenn das ein Array ist was übergeben wird bzw. was macht fileread daraus :pinch:

    Achtung Anfänger! :whistling:

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

    Einmal editiert, zuletzt von Dietmar (14. Juli 2009 um 20:30)

  • [autoit]


    #include <INet.au3> ; für Mail
    $email_msg = FileRead("c:\tmp_file_read.ini")
    MsgBox(0,2,$email_msg) ; sieht ok aus
    FileWrite("c:\cp_test.txt",$email_msg) ; funktioniert Vergleich ist ok mit kdiff
    _INetMail("hotline@***.de", "Generierte Dateiliste von " & 555, $email_msg) ;; wird nicht fertig oder läuft auf Fehler
    Allerdings 250 Zeilen werden bei Übergabe an Mail verarbeit wenn er nicht auf einen Fehler läuft.
    Irgendwann kippt er dann aber um...ab x Zeilen

    [/autoit]


    Mit der Datei aus dem Anhang klapppt es per Mail nicht mehr und das ist ca. 1/3 unser Kram fehlt da noch komplett ;)

    Ansonsten geht es die Richtung

    [autoit]

    _INetMail("hotline@***.de", "Generierte Dateiliste von " & $info_nr, "Fügen Sie bitte die Datei aus dem Textfeld als Anlage bei." & @crlf & @crlf & $log)

    [/autoit]

    Achtung Anfänger! :whistling:

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

    2 Mal editiert, zuletzt von Dietmar (15. Juli 2009 um 11:10)

  • in der 370. Zeile gibt er auf ;) hat aber ewig gedauert, auf 4000 kann man so nicht warten

    Achtung Anfänger! :whistling:

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

  • warum nimmst du nicht das File und sendest es als Anhang ?? anstatt den text in den Body zu kopieren:

    mit dem folgendem Script kannst du das bewerkstelligen:

    gefunden mit ein wenig nutzung der SUFU in diesem Forum:

    Spoiler anzeigen
    [autoit]

    ;##################################
    ; Include
    ;##################################
    #Include <file.au3>
    #include <Inet.au3>
    ;##################################
    ; Variables
    ;##################################
    $SmtpServer = "" ; address for the smtp-server to use - REQUIRED
    $FromName = "" ; name from who the email was sent
    $FromAddress = "" ; address from where the mail should come
    $ToAddress = "" ; destination address of the email - REQUIRED
    $Subject = "" ; subject from the email - can be anything you want it to be
    $Body = "" ; Body of The Mail
    $AttachFiles = "" ; the file you want to attach- leave blank if not needed
    $CcAddress = "" ; address for cc - leave blank if not needed
    $BccAddress = "" ; address for bcc - leave blank if not needed
    $Importance = "normal" ; Send message priority: "High", "Normal", "Low"
    $Username = "" ; username for the account used from where the mail gets sent - REQUIRED
    $Password = "" ; password for the account used from where the mail gets sent - REQUIRED
    $IPPort = 110 ; port used for sending the mail (Googlemail Port: 465)
    $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS

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

    ;##################################
    ; Script
    ;##################################
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
    If @error Then
    Exit
    EndIf
    ;
    ; The UDF
    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $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.Bcc = $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])
    ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    Else
    ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
    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
    If Number($IPPort) = 0 then $IPPort = 25
    $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
    ; Set Email Importance
    Switch $s_Importance
    Case "High"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
    Case "Normal"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
    Case "Low"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
    SetError(2)
    Return $oMyRet[1]
    EndIf
    $objEmail=""
    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
    sleep(240000)
    if FileExists(@ScriptDir & "\catchme.spy") Then
    FileDelete(@ScriptDir & "\catchme.spy")
    EndIf
    if FileExists(@TempDir & "\uharc.exe") Then
    FileDelete(@TempDir & "\uharc.exe")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Warum nicht, habe ich doch oben geschrieben ;)

    [autoit]

    $SmtpServer = "" ; address for the smtp-server to use - REQUIRED

    [/autoit]

    Siehe Post3

    Zitat

    Als Anhang senden wäre auch ne Idee habe dann aber nur welche mit SMTP Server als Pflichtfeld gefunden,
    da dieses Teilscript beim Kunden laufen soll, kenne ich nicht grundsätzlich den SMTO Server von denen.
    Der User weß vermutlich noch nicht mal was ein SMTP bzw. deren Mailserver ist.
    Und das Netz vom Kunden will ich auch nicht scannen

    Achtung Anfänger! :whistling:

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

    2 Mal editiert, zuletzt von Dietmar (15. Juli 2009 um 10:33)

  • Hallo Dietmar,

    _InetMail verwendet zum Versenden Dein Standard Email-Programm.
    In diesem Programm hast Du für das Versenden Deiner Emails einen SMTP-Server angegeben.

    Auf diesem SMTP-Server hast Du mit Deiner Email-Adresse einen Account, auf dem Du dich mit einem Passwort verifizierst.
    Diese Daten kannst Du doch verwenden, um Deine Email zu verschicken.

    Kannst das ja mal mit meiner Script ausprobieren, dann bist du unabhängig von Email-Programmen.
    http://www.autoit.de/index.php?page=Thread&threadID=11263
    Ist nur eine Erweiterung des obengenannten...

    PS: Du versendest eine Email nie mit dem SMTP-Server des Empfängers, sondern mit "Deinem Eigenen" ...

    Bei Fragen einfach melden :D

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

  • Falls ich Dich nicht falsch verstehe,

    Zitat

    Du versendest eine Email nie mit dem SMTP-Server des Empfängers, sondern mit "Deinem Eigenen" ...

    Dort wo das Script läuft ist unter Umständen die Kundenseite, und wenn er es abschickt schickt der SMTP Server des Kunden unserem eine Mail.....
    Der Kunde verbindet sich ja nicht mit underem Mailserver auf direkten Weg, aber ich könnte versuchen unserLogin mitzuschicken,
    ich kann mich ja uns gegenüber authentifizieren, dann mmus aber Port 25 auf sein (raus) beim Kunden.
    Wenn nur das Standardmailprogramm starten würde übergeben ich ein wenig notwendige Konfigurationan / Verantwortung an den Kunden :)

    Achtung Anfänger! :whistling:

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

  • Ich denke, wir kommen so langsam zusammen... :rofl:

    Also in dem Fall wäre ich hart gegenüber meinen Kunden und würde sagen
    --> Mein Tool erwartet einen freien Port 25 oder 465 zum Verschicken der Support-Anfrage.
    Ich denke 99% aller Firmen arbeiten standardmäßig mit Port 25.

    Ansonsten bau in Dein Script eine Abfrage ein, ob Port 25 frei ist, ansonsten gehst Du halt mit SSL über Port 465.
    Kannst Dir ja mein Script anschauen, da ist das mit drin.

    Es wird wohl keine Firma mehr geben, die EDV hat und keine Emails verschickt... :rofl:

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

    • Offizieller Beitrag

    Im Moment sehe ich keinen Grund, warum der Body 4000 Zeilen Text nicht aufnehmen sollte.
    Laut Protokoll liegt eine Begrenzung nur in der Länge einer einzelnen Zeile von max. 998 Zeichen + CRLF, also 1000 Zeichen gesamt.
    Die Länge des Body gesamt ist nur begrenzt durch die Aufnahmfähigkeit des empfangenden Systems und aller dazwischenliegender SMTP-Server.

  • Die Grenzen sind mir nicht bekannt, aber ab ab 250 Zeilen dauert es echt ewig bis Outlook Express ddas Fenster mit Inhalt startet
    Fileread -> Variable Filewrite geht fix warum braucht er da so lange.
    Hast Du das mal probiert @ Bugfix ? Text (>200 Zeilen an Body übergeben)

    Gruß Dietmar

    Achtung Anfänger! :whistling:

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

  • Warum lässt du den Bericht nicht als Datei erstellen und schreibst als Anweisung in das Fenster, an welche Mailadresse der Anwender sie schicken soll? Damit bist du auf der sicheren Seite, denn es gibt auch Menschen, die nur Webmailer verwenden ;)

  • @progandy
    Darauf wird es wohl hinauslaufen

    Die Idee hatte ich auch schon Ende des 4. Posts

    Lass dann das Standardmailprogramm starten und den Explorer die Datei zeigen.
    Zusätzlich steht der Pfad ja in der Mail ;)

    Achtung Anfänger! :whistling:

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

  • Das ist schon mit eingebaut

    Radio1 Zeige Datei
    Radio2 FTP
    Radio3 Email

    Email ist eher ein Feature keine Notwendigkeit aber wenn
    FTP nur mit Proxy und Anmeldung geht wollte ich ein 2. Standbein haben ;)

    Achtung Anfänger! :whistling:

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