Make Microsoft Exchange 2007 Outlook Web App The Default Mail Client For Mailto Hyperlinks, And Even Pass Some Body Text, Too.

[ 2 ] Comments
Share

Prompted by the interest in my similar article about making OWA 2003 the default mail client for mailto: hyperlinks, here is one for OWA 2007. As it turned out, removing the mailto: part from the address displayed in the new message window was much harder than it used to be. I think the solution below works okay, though. This code will also allow you to pass some body text by including a &body= parameter, something that normal OWA will not allow. It will also accept multiple email addresses separated by a semi-colon ; (something else that normal OWA will not allow). This all means that you can now use a mailto: URL like this: mailto:user1@domain.com;user2@domain.com&subject=hello&body=hi%20thereto pre-populate the OWA new email form.

First, you need to get the computer to use OWA as the mailto: client. Note that you do not need to do this if a direct http OWA URL is supplied in another manner, such as an http link to your OWA from an existing web page. You only need this part in order to respond to mailto: URLs. Use Notepad to create a file named OWAMailto.vbs, containing the code below, and then double-click it to create the required registry values. Remember to change the value of strURL to your normal OWA URL before you double-click it.

' Insert your OWA URL between the quotes below, assigning a value to strURL.
' Remember to begin the URL with https if you use SSL
' Examples: "http://owa.mydomain.com/owa", "https://192.168.1.1/owa"
strURL = ""
If strURL <> "" Then
  Set objWSHShell = WScript.CreateObject("WScript.Shell")
  With objWSHShell
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\", _
      "Outlook Web Access", "REG_SZ"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\Protocols\mailto\", _
      "URL:MailTo Protocol", "REG_SZ"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\Protocols\mailto\URL Protocol", _
      "", "REG_SZ"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\Protocols\mailto\EditFlags", _
      &H00000002, "REG_BINARY"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\Protocols\mailto\DefaultIcon\", _
      "%ProgramFiles%\Outlook Express\msimn.exe,-2", "REG_EXPAND_SZ"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\shell\open\command\", _
      """%ProgramFiles%\Internet Explorer\iexplore.exe"" ", "REG_EXPAND_SZ"
    .RegWrite "HKLM\SOFTWARE\Clients\Mail\OWA\Protocols\mailto\shell\open\command\", _
      """%ProgramFiles%\Internet Explorer\iexplore.exe""" & _
      " " & strURL & "/?ae=Item&t=IPM.Note&a=New&to=%1", "REG_EXPAND_SZ"
    .RegWrite "HKLM\SOFTWARE\Classes\mailto\shell\open\command\", _
      """%ProgramFiles%\Internet Explorer\iexplore.exe""" & _
      " " & strURL & "/?ae=Item&a=New&t=IPM.Note&to=%1", "REG_EXPAND_SZ"
  End With
  Set objWSHShell = Nothing
  WScript.Echo "Registry entries successfully created"
Else
  WScript.Echo "You must edit this file in Notepad" & _
  ", and assign a valid OWA URL to the variable strURL"
End If

Unfortunately, the New Mail page ends up being populated with an address that still has mailto: at the beginning.

To get rid of the mailto: part, you will need to edit one of your server-side OWA .js files. Locate the file named uglobal.js . At the time of writing, it is in Program Files\Microsoft\Exchange Server\ClientAccess\Owa\8.1.393.1\scripts\premiumalthough that numbered folder name will change with future service packs (look for the highest numbered folder name). Make a copy of the file (in case something goes wrong), and then open it in Notepad. Scroll down to the function window.onload, which should look like this:

function window.onload(){chkScrpts();}

Insert the code below after the opening brace, so that it looks like this:

function window.onload()
{
  chkScrpts();
  var strHref = window.location.href;
  if(strHref.toUpperCase().indexOf("?AE=ITEM&A=NEW&T=IPM.NOTE") != -1)
  {
    if(strHref.toUpperCase().indexOf("&TO=") != -1)
    {
      var strMsgTo = document.all.spnR.innerText;
      if(strMsgTo.toUpperCase().substring(0, 7) == "MAILTO:")
        strMsgTo = strMsgTo.substring(7);
      document.all.divTo.innerText = "";
      var arrMsgTo = strMsgTo.split(";");
      for(i = 0; i < arrMsgTo.length; i++)
      {
        if(i != 0)
          document.all.divTo.innerText = document.all.divTo.innerText + ";";
        document.all.divTo.innerText = document.all.divTo.innerText + arrMsgTo[i];
      }
    }
    var objRegEx = new RegExp("[\\?&]body=([^&]*)");
    var strBody = objRegEx.exec(strHref);
    if(strBody != null)
      document.getElementById("ifBdy").contentWindow.document.body.innerHTML = unescape(strBody[1]);
  }
}

Now the mailto: part of the email address should disappear soon after the form is displayed.

Note – your clients will need to clear their Temporary Internet Files before this will work because the original .js file is usually cached client-side.

As with most of these type of modifications, you will need to check that they still function after each product update. Sometimes your modified file will be replaced by a new one from the update.


2 Responses to Make Microsoft Exchange 2007 Outlook Web App The Default Mail Client For Mailto Hyperlinks, And Even Pass Some Body Text, Too.

  1. Tim Rodman says:

    You mention that you do not need to do this if you have a direct link to OWA (not utilizing mailto).

    I just want to be able to put a link on an internal webpage that automatically opens a OWA new email window with pre-filled To and Subject fields. Any ideas?




Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>