Mail mit Anhang versenden macht Fehler / _INetSmtpMailCom

  • Hallo zusammen

    ich möchte Mails mit Anhang versenden. Dazu habe ich die Funktion _INetSmtpMailCom gefunden.
    Mail versenden geht, aber es nimmt den Anhang nicht mit. :(

    Ich erhalte den Fehler:

    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\Daten_xxxx\Arbeitszeit\neu\Send Mail 3.au3"
    @@ Debug(62) : $S_Files2Attach =
    >Error code: 0
    >Exit code: 0 Time: 12.4

    Manchmal geht das Mail ohne Anhang durch.

    Den Anhang habe ich auf veschiedene Varianten angegeben:
    $AttachFiles = "Vorname Name.xlsm" (habe auch ohne LeerZeichen probiert)

    im Skript habe ich zum Test auch den Pfad über Variable eingebaut
    $AttachFilesPath = "D:\Daten_xxxx\Arbeitszeit\neu"

    Original-Version und geändertes Skript bringe ich nicht zum laufen.

    Kann mir da jemand helfen?
    Danke

    Gruss

    Jack

    Spoiler anzeigen

    $SmtpServer = "smtp.quickline.com" ; address for the smtp-server to use - REQUIRED
    $FromName = "myName" ; name from who the email was sent
    $FromAddress = "mymail@yetnet.ch" ; address from where the mail should come
    $ToAddress = "tomail@xxxx.ch" ; destination address of the email - REQUIRED
    $Subject = "File für Arbeitszeiterfassung 2" ; subject from the email - can be anything you want it to be
    $Body = "gem. Mail File für Arbeitszeiterfassung" ; the messagebody from the mail - can be left blank but then you get a blank mail
    ;$AttachFiles = "Vorname Name.xlsm" ; the file you want to attach- leave blank if not needed
    ;$AttachFiles = "VornameNameKopie.xlsm;Vorname Name.xlsm"
    $AttachFilesPath = "D:\Daten_xxxx\Arbeitszeit\neu"


    $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 = "mymail@yetnet.ch" ; username for the account used from where the mail gets sent - REQUIRED
    $Password = "xxxxx" ; password for the account used from where the mail gets sent - REQUIRED
    $IPPort = 587 ; port used for sending the mail normaly 25
    $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
    ;~ $IPPort=465 ; GMAIL port used for sending the mail
    ;~ $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS


    ;
    ;##################################
    ; Include
    ;##################################
    #Include<file.au3>
    #include <Array.au3>
    ;##################################
    ; Variables
    ;##################################
    #cs
    $SmtpServer = "" ; address for the smtp-server to use - REQUIRED
    $FromName = "Test" ; name from who the email was sent
    $FromAddress = "" ; address from where the mail should come
    $ToAddress = "" ; destination address of the email - REQUIRED
    $Subject = "Userinfo" ; subject from the email - can be anything you want it to be
    $Body = "This Is The Body" ; the messagebody from the mail - can be left blank but then you get a blank 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 = 465 ; port used for sending the mail
    $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
    ;~ $IPPort=465 ; GMAIL port used for sending the mail
    ;~ $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS
    #ce


    ;##################################
    ; 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
    MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
    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])
    $S_Files2Attach[$x] = $AttachFilesPath & "\"& $S_Files2Attach[$x]
    _ArrayDisplay($S_Files2Attach)
    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
    MsgBox(1,"Mail",$objEmail)
    $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


    Send Mail Blog.au3

    3 Mal editiert, zuletzt von JackAm (31. Dezember 2016 um 00:52)

  • ist eine Excel mit Makros (xxx.xlsm) und die können offenbar nicht gemailt werden, auch nicht im ZIP (wie in Outlook!!)

    Datei in z.B. xxx.xlsm_ umbenennen und dann gehts (dann ist es kein Excel mit Makro)

    Danke für Deine Fragen, Du hast mich damit draufgebracht!

  • Erlaube mir kurz die Anmerkung, das es nicht daran liegen kann, wie die Datei heißt. Ich sende fast täglich zahlreiche
    Exceldateien und auch mit Macro. Ich packe sie immer als Zip-Datei, aber auch hier schreibst Du ja, das Du da mkit dem
    senden ein Problem hast. Für mich somit nicht nachvollziehbar, wieso es geht, wenn Du die Dateiendung änderst und es
    bei mir auch ohne die Datei zu packen oder die Dateiendung umzubenennen geht. Habe es gerade via Script ausprobiert,
    eine Exceldatei incl. Macro zu senden. Habe es dann via Fernferbindung nachgeschaut und es ist binnen Sekunden in Däne-
    mark auf dem Mailserver angekommen. Aus Sicherheitsgründen in einem separaten Ordner, aber das ist eine Sache der
    Einstellung nicht nicht des sendens.

    Aber super das Du es so dann gelöst hast und wie mein Vorschreiben geschrieben hat, das Du ohne Aufforderung das Thema
    geschlossen hast. Daumen hoch !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl