Empfänger auswählen und Standard-E-Mail verschicken?

  • Hallo Leute,

    in einer ini-Datei in Section [Empfaenger] habe ich ca. 30 e-Mail Adressen stehen.
    Gibt es die Möglichkeit ein Auswahl der dadrin eingetragenen Empfänger zu bekommen und mit Hilfe der Checkbox's zu entscheiden, wer die e-Mail bekommt.
    Der Betreff und der Nachrichtentext sind immer gleich.

    Besten Dank im Voraus!

    Viele Grüße,
    Dino

    Einmal editiert, zuletzt von Dino (11. Februar 2010 um 22:08)

  • Ein beispiel zum ini einlesen und daraus einen verteiler basteln hab ich dir mal gemacht.

    ps: es ist egal wieviele einträge unter der Section [Emails] stehen. gui wird automatisch angepasst.

    Script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $section
    $section = IniReadSection("Email.ini", "Emails")
    Dim $Checkbox[$Section[0][0]+1]

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

    $Form1 = GUICreate("Email Prog", 200, $section[0][0]*30+35)
    For $i = 1 To $Section[0][0]
    $Checkbox[$i] = GUICtrlCreateCheckbox($Section[$i][0], 5, 5 + ($i - 1)*30, 190, 25)
    Next
    $Input1 = GUICtrlCreateInput("", 5, 5 + ($i - 1)*30, 190, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox[1] To $Checkbox[$Section[0][0]]
    $emails = ""
    For $i = 1 To $Section[0][0]
    If BitAnd(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then
    $emails &= $Section[$i][1] & "; "
    EndIf
    Next
    Guictrlsetdata($Input1, $emails)
    EndSwitch
    WEnd

    [/autoit]

    Ini:

    Spoiler anzeigen
    Code
    [Emails]
    Klaus=klaus@anbieter.de
    Peter=peter@anbieter.de
    Claudia=claudia@anbieter.de
    Susi=susi@anbieter.de
  • iwie fällts mir gerade furchtbar leicht ;)
    ich hoffe mal es funktioniert

    geändertes script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $section
    $section = IniReadSection("Email.ini", "Emails")
    Dim $Checkbox[$Section[0][0]+1]

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

    $Form1 = GUICreate("Email Prog", 400, Round($section[0][0]/2)*30+35)
    For $i = 1 To $Section[0][0]
    $Checkbox[$i] = GUICtrlCreateCheckbox($Section[$i][0], 205 - Mod($i, 2)*200, 5 + (Round($i/2) - 1)*30, 190, 25)
    Next
    $Input1 = GUICtrlCreateInput("", 5, 5 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox[1] To $Checkbox[$Section[0][0]]
    $emails = ""
    For $i = 1 To $Section[0][0]
    If BitAnd(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then
    $emails &= $Section[$i][1] & "; "
    EndIf
    Next
    Guictrlsetdata($Input1, $emails)
    EndSwitch
    WEnd

    [/autoit]

    Edit1: kleiner bug bei ungeraden zahlen wurde behoben

  • Kann ich in INI-Datei den Betreff und Nachrichtentext auch schreiben?

    öh ja klar kannst du.

    du darfst halt nur nicht in die sektion "Emails" schreiben.
    mach dir am besten eine neue sektion und schreib da rein die keys und die jeweiligen werte.

  • ne gui kannst du dir nach belieben basteln.
    musst halt dann mein kleines beispiel iwie miteinbauen.

    für mich wirds jetz zeit fürs bett. aber evtl könnt ich dir morgen ne kleine gui basteln ;)

  • Ich habs jetz mal so einigermaßen hingepfuscht:
    hab dir noch nen button Standards eingefügt damit du einen anderen StandardText und Standardbetreff speichern kannst

    skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $section
    $section = IniReadSection("Email.ini", "Emails")
    Dim $Checkbox[$Section[0][0]+1]

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

    $Form1 = GUICreate("Email Prog", 400, Round($section[0][0]/2)*30+290)
    For $i = 1 To $Section[0][0]
    $Checkbox[$i] = GUICtrlCreateCheckbox($Section[$i][0], 205 - Mod($i, 2)*200, 5 + (Round($i/2) - 1)*30, 190, 25)
    Next
    $label1 = GUICtrlCreateLabel("_________________________________________________________________", 5, (Mod($section[0][0], 2) +Round($i/2) - 1)*30 - 5, 390, 25)
    $label2 = GUICtrlCreateLabel("Betreff:", 5, 13 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Input1 = GUICtrlCreateInput(IniRead("Email.ini", "Standards", "Betreff", ""), 5, 35 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    $label2 = GUICtrlCreateLabel("Nachrichttext:", 5, 73 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Edit1 = GUICtrlCreateEdit(StringReplace(IniRead("Email.ini", "Standards", "Nachricht", ""), " |@CRLF| ", @CRLF) , 5, 95 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 100)
    $label3 = GUICtrlCreateLabel("Empfänger:", 5, 208 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Input2 = GUICtrlCreateInput("", 5, 230 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    $Button1 = GUICtrlCreateButton("Standards speichern", 30, 260 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 120, 25)
    $Button2 = GUICtrlCreateButton("Email senden", 230, 260 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 120, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox[1] To $Checkbox[$Section[0][0]]
    $emails = ""
    For $i = 1 To $Section[0][0]
    If BitAnd(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then
    $emails &= $Section[$i][1] & "; "
    EndIf
    Next
    Guictrlsetdata($Input2, $emails)
    Case $Button1
    IniWrite("Email.ini", "Standards", "Betreff", GUICtrlRead($Input1))
    IniWrite("Email.ini", "Standards", "Nachricht", StringReplace(GUICtrlRead($Edit1), @CRLF, " |@CRLF| "))
    Case $Button2
    MsgBox(0,"", "Fehlt nur noch die Funktion zum versenden!")
    EndSwitch
    WEnd

    [/autoit]

    Ini:

    Spoiler anzeigen
    Code
    [Emails]
    Klaus=klaus@anbieter.de
    Peter=peter@anbieter.de
    Claudia=claudia@anbieter.de
    Susi=susi@anbieter.de
    Rodi=rodi@anbieter.de
    [Standards]
    Betreff=Standard Betreff
    Nachricht=Standart Nachricht |@CRLF| Zeile 2 |@CRLF| Zeile 3
  • Hallo Dino.

    Bin zwar kein "Schnitzel", aber die Funktion hast Du hier:

    Spoiler anzeigen
    [autoit]


    Func _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $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 StringLeft($as_Body,6) = "<html>" And StringRight($as_Body,7) = "</html>" 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] = StringReplace($S_Files2Attach[$x],'"','')
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    If @error = 0 Then ConsoleWrite("Datei erfolgreich angehaengt: "&$S_Files2Attach[$x] & @CRLF)
    Else
    ConsoleWrite('!> Dateianhang wurde nicht gefunden: ' & $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 "Hoch", "hoch"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
    Case "Normal", "normal"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
    Case "Niedrig", "niedrig"
    $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

    [/autoit]

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Alina,

    wo muss ich genau die Funktion einbauen?

    hier?

    [autoit]

    Case $Button2
    ;MsgBox(0,"", "Fehlt nur noch die Funktion zum versenden!")
    _INetSmtpMailCom()

    [/autoit]

    Viele Grüße,
    Dino

  • Case $Button2 ;MsgBox(0,"", "Fehlt nur noch die Funktion zum versenden!") _INetSmtpMailCom()

    *g* ja genau da ;)

    und wenn du diese funktion verwendest würde ich mir ein paar sachen wieder in die ini schreiben ;)

  • ich bekomme folgende Fehlermeldung:

    "G:\mail.au3(47,253) : ERROR: _INetSmtpMailCom() called by a previous line with 0 arg(s). Min = 5. First previous line calling this Func is 42.
    Func _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $IPPort = 25, $ssl = 0)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    G:\mail.au3(104,26) : WARNING: $oMyRet: possibly used before declaration.
    Return $oMyRet[1]
    ~~~~~~~~~~~~~~~~~~~~~~~~~^
    G:\mail.au3(104,26) : ERROR: $oMyRet: undeclared global variable.
    Return $oMyRet[1]
    ~~~~~~~~~~~~~~~~~~~~~~~~~^
    G:\mail.au3 - 2 error(s), 1 warning(s)"

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $section
    $section = IniReadSection("Email.ini", "Emails")
    Dim $Checkbox[$Section[0][0]+1]

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

    $Form1 = GUICreate("Email Prog", 400, Round($section[0][0]/2)*30+290)
    For $i = 1 To $Section[0][0]
    $Checkbox[$i] = GUICtrlCreateCheckbox($Section[$i][0], 205 - Mod($i, 2)*200, 5 + (Round($i/2) - 1)*30, 190, 25)
    Next
    $label1 = GUICtrlCreateLabel("_________________________________________________________________", 5, (Mod($section[0][0], 2) +Round($i/2) - 1)*30 - 5, 390, 25)
    $label2 = GUICtrlCreateLabel("Betreff:", 5, 13 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Input1 = GUICtrlCreateInput(IniRead("Email.ini", "Standards", "Betreff", ""), 5, 35 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    $label2 = GUICtrlCreateLabel("Nachrichttext:", 5, 73 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Edit1 = GUICtrlCreateEdit(StringReplace(IniRead("Email.ini", "Standards", "Nachricht", ""), " |@CRLF| ", @CRLF) , 5, 95 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 100)
    $label3 = GUICtrlCreateLabel("Empfänger:", 5, 208 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    GUICtrlSetColor(-1, 0x1B79D9)
    $Input2 = GUICtrlCreateInput("", 5, 230 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 390, 25)
    $Button1 = GUICtrlCreateButton("Standards speichern", 30, 260 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 120, 25)
    $Button2 = GUICtrlCreateButton("Email senden", 230, 260 + (Mod($section[0][0], 2) +Round($i/2) - 1)*30, 120, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox[1] To $Checkbox[$Section[0][0]]
    $emails = ""
    For $i = 1 To $Section[0][0]
    If BitAnd(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then
    $emails &= $Section[$i][1] & "; "
    EndIf
    Next
    Guictrlsetdata($Input2, $emails)
    Case $Button1
    IniWrite("Email.ini", "Standards", "Betreff", GUICtrlRead($Input1))
    IniWrite("Email.ini", "Standards", "Nachricht", StringReplace(GUICtrlRead($Edit1), @CRLF, " |@CRLF| "))
    Case $Button2
    ;MsgBox(0,"", "Fehlt nur noch die Funktion zum versenden!")
    _INetSmtpMailCom()
    EndSwitch
    WEnd

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

    Func _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $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 StringLeft($as_Body,6) = "<html>" And StringRight($as_Body,7) = "</html>" 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] = StringReplace($S_Files2Attach[$x],'"','')
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    If @error = 0 Then ConsoleWrite("Datei erfolgreich angehaengt: "&$S_Files2Attach[$x] & @CRLF)
    Else
    ConsoleWrite('!> Dateianhang wurde nicht gefunden: ' & $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 "Hoch", "hoch"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
    Case "Normal", "normal"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
    Case "Niedrig", "niedrig"
    $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

    [/autoit]
  • hast du die Funktion überhaupt mit den Parametern aufgerufen?

    [autoit]

    _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $IPPort = 25, $ssl = 0)

    [/autoit]
  • Bei mir kommt folgender Fehler:

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Das Script posten brings nicht, denn es besteht nur aus einer Zeile , nämlich _INetSmtpMailCom(*****), und der Funktion. Der Fehler liegt irgendwo in der Funktion...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"