Jump to content
Jewtus

Hyperlink with arguments

Recommended Posts

Jewtus

I have a compiled tool that has a few options for command line arguments to kick off specific functions. I've tested them via the cmd line and they work great. What I'd like to do next is make it so my email notification contains a hyperlink to the file with the argument included. This is what I have for my email function that DOES work:

Func SendEmails($addAddressee,$id)
    IsOutLookOpen()
    $olApp = ObjCreate("Outlook.Application")
    $objMail = $olApp.CreateItem(0) ;$olMailItem
    With $objMail
        .Save
        .Subject = ("A form needs review - ID: "&$id)
        .HTMLBody = ('Please open the tool by clicking <a href="'&@ScriptDir&"\"&@ScriptName&'">HERE</a>.')
        $oRecipients=.Recipients
        .Display
    EndWith
    For $z=0 to UBound($addAddressee)-1
        If $addAddressee[$z]<> ''  Then
            $resolver=$oRecipients.Add($addAddressee[$z])
            $resolver.Resolve
        EndIf
    Next
EndFunc

and this works without issue but I want to make it so when they click the link, it also passes the command line arg:

.HTMLBody = ('Please open the tool by clicking <a href="'&@ScriptDir&"\"&@ScriptName&" -CMD "&$id&'">HERE</a>.')

Does anyone know how I can achieve this?

Share this post


Link to post
Share on other sites
water

I think you need to encode the spaces. Try %20 for a space.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Jewtus

Ok so I messed around with it a bit:

.HTMLBody = ('Please open the tool by clicking <a href='&StringReplace(@ScriptDir,' ','%20')&'\'&@ScriptName&'%20-CMD%20'&$id&'">HERE</a>.')

and this generates the link but when I open the link it says the file isn't found... Something like this

Cannot find the file '\\host\path\files\Test.exe -CMD 1'. Please verify the path or internet address is correct

So I tried to put quotes around the path and put the -CMD outside the quotes:

.HTMLBody = ('Please open the tool by clicking <a href="'&StringReplace(@ScriptDir,' ','%20')&'\'&@ScriptName&'"%20-EMC%20'&$id&'">HERE</a>.')

and when I do that, it just opens the EXE and doesn't pass the arg to the exe.

Edited by Jewtus
formatting

Share this post


Link to post
Share on other sites
water

I searched the web and got to the conclusion that it is not possible to call an exe and pass parameters using a link.

I'd suggest to just start the exe without parameters and then use Outlook to grab the ID from the subject line of the current mail item.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Jewtus

I'm not sure what you mean. I want the tool to operate normally, but I have a notifications section so when X action is performed, it notifies someone that they need to open the tool and go to a specific section. I was hoping to jump right to that section from the email. If I launch the tool normally, how would I go about grabbing the id from the email and passing it through to the application?

Share this post


Link to post
Share on other sites
water

When the tool is started you should

  • Check that Outlook is running
  • A mail item is active
  • the mail item has a subject of format "A form needs review - ID: "

If this is True then grab the ID from the subject and jump to the section needed. Else run the program normally.
This approach only works when the mail is being opened by Outlook.

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Jewtus

hmmm seems it could leave room for a lot of potential errors... I did figure out a simple solution that does seem to work though... Build a bat and link to the bat file:

Func SendEmails($addAddressee,$id)
    IsOutLookOpen()
    $olApp = ObjCreate("Outlook.Application")

    ;Build Launcher
    If FileExists(@ScriptDir&"\CMD\")=0 then DirCreate(@ScriptDir&"\CMD\")
    $cmdFile=@ScriptDir&"\CMD\"&$id&@MON&@MDAY&@YEAR&@HOUR&@MIN&@SEC&".bat"
    FileWrite($cmdFile,'"'&@ScriptDir&"\"&@ScriptName&'" -CMD '&$id)

    $objMail = $olApp.CreateItem(0) ;$olMailItem
    With $objMail
        .Save
        .Subject = ("A new form needs review - Project ID: "&$id)
        .HTMLBody = ('Please open the tool by clicking <a href="'&$cmdFile&'">HERE</a>.')
        $oRecipients=.Recipients
        .Display
    EndWith
    For $z=0 to UBound($addAddressee)-1
        If $addAddressee[$z]<> ''  Then
            $resolver=$oRecipients.Add($addAddressee[$z])
            $resolver.Resolve
        EndIf
    Next
EndFunc

 

Edited by Jewtus

Share this post


Link to post
Share on other sites
water

But this only works when the bat file is created on the recipients machine.
But why would you create a mail then?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Jewtus

The tool is actually on a shared network dir so everyone is using the same folder structure. The mail is because no one will actually keep an eye on it because users suck. They want the system to send emails if anything ever changed and I told them they would get 20-30 notifications an hour if they did that so they settled to me just sending a summary email telling them to check.

 

The launching the bat is just a way of accommodating users who are lame and don't want to do their job or read anything.

Share this post


Link to post
Share on other sites

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

  • Similar Content

    • nooneclose
      By nooneclose
      Good morning everyone, I thought I had already solved this issue but it turns out I did not. 
      My code finds unread emails with this specific subject line of "request" but when I change the subject to SKIPPED + "request" = ("SKIPPED request") the program still finds the email and tries to process it. I only want to process emails with the exact match subject of "request".
      Here is my code that "finds" the unread emails with the subject of "request" or so I thought. 
      Func ListUnreadEmails() ;******************************************************************************* ; Lists all unread E-mails from the folder Outlook-UDF-Test ;******************************************************************************* ; Stores all the unRead emails into an array Global $aItems = _OL_ItemFind($oOutlook, "*\Outlook-UDF-Test", $olMail, _ "[UnRead]=True", "Subject", "request", "EntryID,Subject", "", 1) ; Displays the array of unRead emails If IsArray($aItems) Then ;_ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind - Unread mails") Else MsgBox(48, "OutlookEX UDF: _OL_ItemFind Example Script", _ "Could not find an unread mail. @error = " & @error & ", @extended: " & @extended) EndIf ; Gets the number of unread emails Global $numberOfUnRead = UBound($aItems, $UBOUND_ROWS) - 1 ;MsgBox("", "Number of Unread emails", $numberOfUnRead) EndFunc It acts as if any part of the subject containing the word "request" and the email is unread that it will try to process it. (I think)
    • nooneclose
      By nooneclose
      Good afternoon, I am in need of some help. I am sure this is a stupid question requiring only one or two lines of code. However, I would greatly appreciate the help I cannot figure this out. I also tried searching for the answer on the internet but no one except me apparently seems to be having a hard time figuring this out and or is asking about it. 
      I simply want to change the "status" of an email from unread to read once I have processed it. My code is over 500 lines and I would like not to clutter this post with it. Assume I have all my includes and connections properly defined and stuff. 
      Here is the bit of code where I am trying to change the email that was used from unread to read:
      Func ChangeEmailStatus() ;******************************************************************************* ; changes the status of an email from unread to Read ;******************************************************************************* Local $iRows = UBound($aItems, $UBOUND_ROWS) MsgBox("", "Number of Unread emails (Before Change)", $iRows) _OL_ItemModify($oOutlook,$aItems[$i][0], Default, "Read=True") MsgBox("", "Array Display 1", $aItems[1][0]) MsgBox("", "Array Display 2", $aItems[2][0]) Local $iRows = UBound($aItems, $UBOUND_ROWS) MsgBox("", "Number of Unread emails (After Change)", $iRows) EndFunc  
    • nooneclose
      By nooneclose
      Hello again everyone, I am trying to make a simple bot/AI to help me at work. I need it to read the subject line of emails, open them if a certain subject line is found, and then copy the contents of the said email and paste it in a different program. 
      Can the Autoit outlook UDF help me achieve this? 
      Also, I have tried the Outlook UDF and so far I have only figured out how to find all the unread emails (thanks to one of water's example scripts. @water you are a genius just saying).
      I am very new to this UDF and would love any help that would guide me into making this bot/AI a reality at work.   
    • water
      By water
      Extensive library to control and manipulate Microsoft Outlook.
      Theads: Development - General Help & Support - Example Scripts - Wiki
      BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort

      KNOWN BUGS (last changed: 2018-09-01)
      None
    • Gowrisankar
      By Gowrisankar
      Dear members of the forum,
      I need to open the attachments from mails without downloading them. Is it possible using OutlookEx UDF ?
×