Jump to content

Recommended Posts

Posted
I played around a little with http://www.chilkatsoft.com/ ActiveX components.
Here is an example based on examples from this page.
 
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>


;~ http://www.chilkatsoft.com/downloads_ActiveX.asp
;~ http://www.chilkatsoft.com/support.asp
;~ http://www.chilkatsoft.com/refdoc/activex.asp
;~ http://www.chilkatsoft.com/refdoc/xChilkatCertStoreRef.html
;~ http://www.chilkatsoft.com/refdoc/xChilkatCertChainRef.html

;~ Email ActiveX Reference Documentation
;~ http://www.chilkatsoft.com/refdoc/xChilkatEmailRef.html

;~ http://www.example-code.com/vbscript/emailObj.asp
;~ http://www.example-code.com/vbscript/pop3.asp

Global $_sPOP3_Server = 'xxxxxx'
Global $_sPOP3_UserName = 'xxxxxx'
Global $_sPOP3_Password = 'xxxxxx'

_Example_1_Version()
_Example_2_Get_number_of_mesages()
_Example_3_Retrieve_UIDLs_from_POP3_Server()
_Example_4_Save_Email_Attachments_to_Filesystem()

Func _Example_1_Version()
    Local $oCrypt = ObjCreate("Chilkat_9_5_0.Crypt2")
    MsgBox(0, '', $oCrypt.Version)

EndFunc   ;==>_Example_1_Version

Func _Example_2_Get_number_of_mesages()
    ; http://www.example-code.com/vbscript/pop3_mailboxCount.asp
    ;  The mailman object is used for receiving (POP3)
    ;  and sending (SMTP) email.
    ; This ObjCreate statement uses the new single-DLL ActiveX for v9.5.0
    Local $oMailman = ObjCreate("Chilkat_9_5_0.MailMan")

    ;  Any string argument automatically begins the 30-day trial.
    $success = $oMailman.UnlockComponent("30-day trial")
    If ($success <> 1) Then
        MsgBox(0, 'UnlockComponent', $oMailman.LastErrorText)
        Return
    EndIf

    ;  Set the POP3 server's hostname
    $oMailman.MailHost = $_sPOP3_Server

    ;  Set the POP3 login/password.
    $oMailman.PopUsername = $_sPOP3_UserName
    $oMailman.PopPassword = $_sPOP3_Password

    ;  Get the number of messages in the mailbox.

    Local $iNumMessages = $oMailman.GetMailboxCount()
    MsgBox(0, '', $iNumMessages)

EndFunc   ;==>_Example_2_Get_number_of_mesages

Func _Example_3_Retrieve_UIDLs_from_POP3_Server()
    ; Retrieve UIDL's from POP3 Server
    ; http://www.example-code.com/vbscript/pop3_getUidls.asp

    ;  The mailman object is used for receiving (POP3)
    ;  and sending (SMTP) email.
    ; This ObjCreate statement uses the new single-DLL ActiveX for v9.5.0
    Local $oMailman = ObjCreate("Chilkat_9_5_0.MailMan")

    ;  Any string argument automatically begins the 30-day trial.
    $success = $oMailman.UnlockComponent("30-day trial")
    If ($success <> 1) Then
        MsgBox(0, 'UnlockComponent', $oMailman.LastErrorText)
        Return
    EndIf

    ;  Set the POP3 server's hostname
    $oMailman.MailHost = $_sPOP3_Server

    ;  Set the POP3 login/password.
    $oMailman.PopUsername = $_sPOP3_UserName
    $oMailman.PopPassword = $_sPOP3_Password

    ; sa is a Chilkat_9_5_0.StringArray
    Local $oSA = $oMailman.GetUidls()

    Local $iCount = $oSA.Count

    For $i = 0 To $iCount - 1
        ConsoleWrite($oSA.GetString($i) & @CRLF)
    Next

EndFunc   ;==>_Example_3_Retrieve_UIDLs_from_POP3_Server

Func _Example_4_Save_Email_Attachments_to_Filesystem()
    ; Save Email Attachments to Filesystem
    ; http://www.example-code.com/vbscript/emailObject_saveAttachments.asp
    Local $oEmail = ObjCreate("Chilkat_9_5_0.Email")

    ;  Load an email object containing attachments.
    ;  This .eml can be downloaded from:
    ;  http://www.example-code.com/testData/HtmlEmail.eml

    Local $sEML_FileFullPath = FileOpenDialog('Choose EML File', @ScriptDir, 'EML file (*.eml)', $FD_FILEMUSTEXIST)
    If @error Then
        ; Display the error message.
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.")
        Return 0
    EndIf

    Local $iSuccess = $oEmail.LoadEml($sEML_FileFullPath)
    If ($iSuccess <> 1) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Return 0
    EndIf

    ;  If OverwriteExisting is turned on, files with the same
    ;  name are overwritten.  If turned off, new/unique filenames
    ;  are automatically generated.  The filenames actually saved
    ;  are accessible via the GetAttachmentFilename method.
    $oEmail.OverwriteExisting = 1

    ;  Save all attachments to the "myAttachments" subdirectory
    ;  found under the calling process;s current working directory.
    ;  This directory is automatically created if it does not already
    ;  exist.
    $iSuccess = $oEmail.SaveAllAttachments("myAttachments")
    If ($iSuccess <> 1) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Return 0
    EndIf

    ;  List the attachment filenames:

    For $i = 0 To $oEmail.NumAttachments - 1
        ConsoleWrite($oEmail.GetAttachmentFilename($i) & @CRLF)
    Next

EndFunc   ;==>_Example_4_Save_Email_Attachments_to_Filesystem

Best regards

mLipok

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

Loz

Thanks for like.

btw.

I think I made a separate UDF.
But it takes time.

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

New examples and functions:

  Quote

 

_Example_5_Unpack_HTML_Email_to_Files()

_EMAIL_html_Viewer_Example()
_INI_SETUP()
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>

Global $_sPOP3_Server = _INI_SETUP('POP3_Server')
Global $_sPOP3_UserName = _INI_SETUP('POP3_UserName')
Global $_sPOP3_Password = _INI_SETUP('POP3_Password')

_Example_1_Version()
_Example_2_Get_number_of_mesages()
_Example_3_Retrieve_UIDLs_from_POP3_Server()
_Example_4_Save_Email_Attachments_to_Filesystem()
_Example_5_Unpack_HTML_Email_to_Files()
_EMAIL_html_Viewer_Example()

Func _Example_1_Version()
    Local $oCrypt = ObjCreate("Chilkat_9_5_0.Crypt2")
    MsgBox(0, '', $oCrypt.Version)

EndFunc   ;==>_Example_1_Version

Func _Example_2_Get_number_of_mesages()
    ; http://www.example-code.com/vbscript/pop3_mailboxCount.asp
    ;  The mailman object is used for receiving (POP3)
    ;  and sending (SMTP) email.
    ; This ObjCreate statement uses the new single-DLL ActiveX for v9.5.0
    Local $oMailman = ObjCreate("Chilkat_9_5_0.MailMan")

    ;  Any string argument automatically begins the 30-day trial.
    $success = $oMailman.UnlockComponent("30-day trial")
    If ($success <> 1) Then
        MsgBox(0, 'UnlockComponent', $oMailman.LastErrorText)
        Return
    EndIf

    ;  Set the POP3 server's hostname
    $oMailman.MailHost = $_sPOP3_Server

    ;  Set the POP3 login/password.
    $oMailman.PopUsername = $_sPOP3_UserName
    $oMailman.PopPassword = $_sPOP3_Password

    ;  Get the number of messages in the mailbox.

    Local $iNumMessages = $oMailman.GetMailboxCount()
    MsgBox(0, '', $iNumMessages)

EndFunc   ;==>_Example_2_Get_number_of_mesages

Func _Example_3_Retrieve_UIDLs_from_POP3_Server()
    ; Retrieve UIDL's from POP3 Server
    ; http://www.example-code.com/vbscript/pop3_getUidls.asp

    ;  The mailman object is used for receiving (POP3)
    ;  and sending (SMTP) email.
    ; This ObjCreate statement uses the new single-DLL ActiveX for v9.5.0
    Local $oMailman = ObjCreate("Chilkat_9_5_0.MailMan")

    ;  Any string argument automatically begins the 30-day trial.
    $success = $oMailman.UnlockComponent("30-day trial")
    If ($success <> 1) Then
        MsgBox(0, 'UnlockComponent', $oMailman.LastErrorText)
        Return
    EndIf

    ;  Set the POP3 server's hostname
    $oMailman.MailHost = $_sPOP3_Server

    ;  Set the POP3 login/password.
    $oMailman.PopUsername = $_sPOP3_UserName
    $oMailman.PopPassword = $_sPOP3_Password

    ; sa is a Chilkat_9_5_0.StringArray
    Local $oSA = $oMailman.GetUidls()

    Local $iCount = $oSA.Count

    For $i = 0 To $iCount - 1
        ConsoleWrite($oSA.GetString($i) & @CRLF)
    Next

EndFunc   ;==>_Example_3_Retrieve_UIDLs_from_POP3_Server

Func _Example_4_Save_Email_Attachments_to_Filesystem()
    ; Save Email Attachments to Filesystem
    ; http://www.example-code.com/vbscript/emailObject_saveAttachments.asp
    Local $oEmail = ObjCreate("Chilkat_9_5_0.Email")

    ;  Load an email object containing attachments.
    ;  This .eml can be downloaded from:
    ;  http://www.example-code.com/testData/HtmlEmail.eml

    Local $sEML_FileFullPath = FileOpenDialog('Choose EML File', @ScriptDir, 'EML file (*.eml)', $FD_FILEMUSTEXIST)
    If @error Then
        ; Display the error message.
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.")
        Return 0
    EndIf

    Local $iSuccess = $oEmail.LoadEml($sEML_FileFullPath)
    If ($iSuccess <> 1) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Return 0
    EndIf

    ;  If OverwriteExisting is turned on, files with the same
    ;  name are overwritten.  If turned off, new/unique filenames
    ;  are automatically generated.  The filenames actually saved
    ;  are accessible via the GetAttachmentFilename method.
    $oEmail.OverwriteExisting = 1

    ;  Save all attachments to the "myAttachments" subdirectory
    ;  found under the calling process;s current working directory.
    ;  This directory is automatically created if it does not already
    ;  exist.
    $iSuccess = $oEmail.SaveAllAttachments("myAttachments")
    If ($iSuccess <> 1) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Return 0
    EndIf

    ;  List the attachment filenames:

    For $i = 0 To $oEmail.NumAttachments - 1
        ConsoleWrite($oEmail.GetAttachmentFilename($i) & @CRLF)
    Next

EndFunc   ;==>_Example_4_Save_Email_Attachments_to_Filesystem

Func _Example_5_Unpack_HTML_Email_to_Files($sHTMLFilename = "thisEmail.html")
    ; Unpack HTML Email to Files
    ; http://www.example-code.com/vbscript/email_unpackHtml.asp

    ; This CreateObject statement uses the new single-DLL ActiveX for v9.5.0
    Local $oEmail = ObjCreate("Chilkat_9_5_0.Email")

    ;  Select EML File containing HTML content with images.
    Local $sEML_FileFullPath = FileOpenDialog('Choose EML File', @ScriptDir, 'EML file (*.eml)', $FD_FILEMUSTEXIST)
    If @error Then
        ; Display the error message.
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.")
        Return 0
    EndIf

    ;  Load an email object containing HTML content with images.
    Local $iSuccess = $oEmail.LoadEml($sEML_FileFullPath)
    If ($iSuccess <> 1) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Return 0
    EndIf

    ;  Is this an HTML email?
    If ($oEmail.HasHtmlBody() = 1) Then

        ;  Unpack the HTML to files.  The image and css URLs
        ;  in the HTML are modified to point to the files extracted to disk.
        Local $sUnpackDir = @ScriptDir & "\ExtractedHTML"
        Local $sHTMLFileFullPath = $sUnpackDir & '\' & $sHTMLFilename
        Local $sPartsSubdir = "images"

        $iSuccess = $oEmail.UnpackHtml($sUnpackDir, $sHTMLFilename, $sPartsSubdir)
        If ($iSuccess <> 1) Then
            ConsoleWrite($oEmail.LastErrorText & @CRLF)
            Return 0
        EndIf

        ;  If the UnpackHtml method was successful, the
        ;  HTML is written to /temp/thisEmail.html and
        ;  the image files are located in  /temp/images

        Return $sHTMLFileFullPath
    EndIf
EndFunc   ;==>_Example_5_Unpack_HTML_Email_to_Files


Func _EMAIL_html_Viewer_Example($sHTMLFileFullPath = @ScriptDir & "\ExtractedHTML\thisEmail.html")

        If Not FileExists($sHTMLFileFullPath ) Then Return SetError(1,0,0)

        Local $oIE = _IECreateEmbedded()
        GUICreate("Embedded Web control Test", 640, 580, _
                (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
                $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
        GUICtrlCreateObj($oIE, 10, 40, 600, 360)
        GUISetState(@SW_SHOW) ;Show GUI

        Local $sUnpackDir = StringRegExp($sHTMLFileFullPath,'(?i)(.+)\\.+?',3)[0]

        Local $hFileOpen = FileOpen($sHTMLFileFullPath, $FO_READ)
        Local $sHTML = FileRead($hFileOpen)
        FileClose($hFileOpen)

        _html_imgSrcToLocalPath($sHTML,$sUnpackDir)

        _IENavigate($oIE, "about:blank")
        _IEDocWriteHTML($oIE, $sHTML)
;~      _IEAction($oIE, "refresh")

        ; Waiting for user to close the window
        While 1
            Local $msg = GUIGetMsg()
            Select
                Case $msg = $GUI_EVENT_CLOSE
                    ExitLoop
            EndSelect
        WEnd

        GUIDelete()


EndFunc


; #FUNCTION# ====================================================================================================================
; Name ..........: _html_imgSrcToLocalPath
; Description ...: Change relative Path to direct local path in HTML source
; Syntax ........: _html_imgSrcToLocalPath(Byref $sHTML[, $sPath = @ScriptDir])
; Parameters ....: $sHTML               - [in/out] a string value.
;                  $sPath               - [optional] a string value. Default is @ScriptDir.
; Return values .: None
; Author ........: SmOke_N
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/167535-iedocwritehtml-extractedhtml/#entry1225920
; Example .......: No
; ===============================================================================================================================
Func _html_imgSrcToLocalPath(ByRef $sHTML, $sPath = @ScriptDir)

    Local $aImgFiles = StringRegExp($sHTML, "(?is)(<\s*img\s+src=[""'](.+?)[""'])", 3)
    If @error Then ; no img files
        Return SetError(1, 0, 0)
    EndIf

    $sPath = StringReplace(StringRegExpReplace($sPath, "[\\/]+$", ""), "\", "/", 0, 1)
    Local $sRepl
    For $i = 0 To UBound($aImgFiles) -1 Step 2
        If StringRegExp($aImgFiles[$i + 1], "^(?i)\s*(http|s?ftp|file:///)") Then ContinueLoop
        $sRepl = StringReplace($aImgFiles[$i], $aImgFiles[$i + 1], _
            "file:///" & $sPath & "/" & $aImgFiles[$i + 1])
        $sHTML = StringReplace($sHTML, $aImgFiles[$i], $sRepl, 1, 0)
    Next

    Return 1
EndFunc


Func _INI_SETUP($sKey)
    Local $sINIFileFullPath = @ScriptFullPath & '.INI'
    Local $sINI_Value = IniRead( $sINIFileFullPath, "POP3", $sKey, 'Default' )
    If $sINI_Value = 'Default' Or $sINI_Value = '' Then
        $sINI_Value = InputBox('INI Setup for Key: ' & $sKey, 'Enter value for ini Key: ' & $sKey &'=','')
        IniWrite( $sINIFileFullPath, "POP3", $sKey, IniRead( $sINIFileFullPath, "POP3", $sKey, Default ) )
        Return $sINI_Value
    Else
        Return $sINI_Value
    EndIf

EndFunc

Thanks to @SmOke_N for:

; #FUNCTION# ====================================================================================================================
; Name ..........: _html_imgSrcToLocalPath
; Description ...: Change relative Path to direct local path in HTML source
; Syntax ........: _html_imgSrcToLocalPath(Byref $sHTML[, $sPath = @ScriptDir])
; Parameters ....: $sHTML               - [in/out] a string value.
;                  $sPath               - [optional] a string value. Default is @ScriptDir.
; Return values .: None
; Author ........: SmOke_N
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/167535-iedocwritehtml-extractedhtml/#entry1225920
; Example .......: No
; ===============================================================================================================================
Func _html_imgSrcToLocalPath(ByRef $sHTML, $sPath = @ScriptDir)

    Local $aImgFiles = StringRegExp($sHTML, "(?is)(<\s*img\s+src=[""'](.+?)[""'])", 3)
    If @error Then ; no img files
        Return SetError(1, 0, 0)
    EndIf

    $sPath = StringReplace(StringRegExpReplace($sPath, "[\\/]+$", ""), "\", "/", 0, 1)
    Local $sRepl
    For $i = 0 To UBound($aImgFiles) -1 Step 2
        If StringRegExp($aImgFiles[$i + 1], "^(?i)\s*(http|s?ftp|file:///)") Then ContinueLoop
        $sRepl = StringReplace($aImgFiles[$i], $aImgFiles[$i + 1], _
            "file:///" & $sPath & "/" & $aImgFiles[$i + 1])
        $sHTML = StringReplace($sHTML, $aImgFiles[$i], $sRepl, 1, 0)
    Next

    Return 1
EndFunc

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

  • 1 year later...
Posted

Few new examples:
 

Func _Example_12_JsonObject_PrettyPrint()
    _Log_Chilkat('_Example_12_JsonObject_PrettyPrint')
    ; https://www.example-code.com/vbscript/json_pretty_print.asp
    Local $oJSON = ObjCreate("Chilkat_9_5_0.JsonObject")

    $sJSON_String = "{""name"": ""donut"",""image"":{""fname"": ""donut.jpg"",""w"": 200,""h"": 200},""thumbnail"":{""fname"": ""donutThumb.jpg"",""w"": 32,""h"": 32}}"

    $iSuccess = $oJSON.Load($sJSON_String)
    If ($iSuccess <> 1) Then
        ConsoleWrite($oJSON.LastErrorText & @CRLF)
        Return
    EndIf

    ;  To pretty-print, set the EmitCompact property equal to 0
    $oJSON.EmitCompact = 0

    ;  If bare-LF line endings are desired, turn off EmitCrLf
    ;  Otherwise CRLF line endings are emitted.
    $oJSON.EmitCrLf = 0

    ;  Emit the formatted JSON:
    ConsoleWrite($oJSON.Emit() & @CRLF)
EndFunc   ;==>_Example_12_JsonObject_PrettyPrint

Func _Example_13_JsonObject_IterateMembers()
    _Log_Chilkat('_Example_13_JsonObject_IterateMembers')
    ; https://www.example-code.com/vbscript/json_iterate_members.asp
    Local $oJSON = ObjCreate("Chilkat_9_5_0.JsonObject")

    $sJSON_String = "{ ""id"": 1, ""name"": ""A green door"", ""tags"": [""home"", ""green""], ""price"": 125 }"

    $iSuccess = $oJSON.Load($sJSON_String)
    If ($iSuccess <> 1) Then
        ConsoleWrite($oJSON.LastErrorText & @CRLF)
        Return
    EndIf

    $iNumMembers = $oJSON.Size

    For $iMember_idx = 0 To $iNumMembers - 1

        $sName = $oJSON.NameAt($iMember_idx)
        $sValue = $oJSON.StringAt($iMember_idx)

        ConsoleWrite($sName & ": " & $sValue & @CRLF)

        $iValue = $oJSON.IntAt($iMember_idx)
        ConsoleWrite($sName & " as integer: " & $iValue & @CRLF)
    Next
EndFunc   ;==>_Example_13_JsonObject_IterateMembers

Func _Example_14_JsonObject_CreateDocument()
    _Log_Chilkat('_Example_14_JsonObject_CreateDocument')
    ; https://www.example-code.com/vbscript/create_json.asp
    Local $oJSON = ObjCreate("Chilkat_9_5_0.JsonObject")
    Local $iSuccess
    $iSuccess = $oJSON.AddStringAt(-1,"Title","Pan's Labyrinth")
    $iSuccess = $oJSON.AddStringAt(-1,"Director","Guillermo del Toro")
    $iSuccess = $oJSON.AddStringAt(-1,"Original_Title","El laberinto del fauno")
    $iSuccess = $oJSON.AddIntAt(-1,"Year_Released",2006)
    $oJSON.EmitCompact = 0
    ConsoleWrite($oJSON.Emit() & @CRLF)
EndFunc   ;==>_Example_13_JsonObject_IterateMembers

 

test_CHillkat.au3

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

Here is an Chilkat.au3 UDF - modest begining.
I will soon post an update as separate thread.

 

Chilkat_example.au3

Chilkat.au3

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

  • 1 month later...
Posted

Finally Chillkat.au3 UDF is released:

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...