LoginSignup
0
1

More than 5 years have passed since last update.

Outlookのメール本文中にurlリンクを簡単・イイ感じに貼り付けたいっ!

Last updated at Posted at 2016-09-24

背景

メーラとしてOutlookを利用しています。
メールを作成している時、本文中にurlリンクを貼り付けたいです。

勿論、書式はHTML形式にするとか、url文字列をCopy&Pasteすれは良いとか、基本的な項目を押さえた上でハイパーリンクを作成できる事は理解しています。

でも、諸々めんどくさいんだよー

方針

  • InternetExplorerのコンテキストメニューをカスタマイズして「Send to Outlook」を追加する
  • このメニューが選ばれたら、Outlookのメール作成中ウィンドウのカレントカーソル位置にページタイトルを挿入し、その位置にurlリンクを割り当てる

ね?
イイ感じでしょ?

要件

実現に必要な要素は以下の通り。

  • IEのコンテキストメニューを追加する方法
  • Outlookの作成中ウィンドウを捕まえる方法
  • HyperLinkを挿入する方法

だな。

要素

IEのコンテキストメニューを追加する

  • レジストリHKCU\Software\Microsoft\Internet Explorer\MenuExtの下にキーを追加すると、そのキー名がIEのコンテキストメニューに追加される
  • メニュー項目が選択されると、上記キーのDefault項目に登録されているhtmlファイルが実行されるので、ここにscriptを書いておけばそれが実行されるって訳
  • 上記キーのContentsの値により、IEのどの表示部品上でこのメニュー項目が表示されるかが決まる

という事らしいですが詳細はここら辺を参照して下さい。

Outlookの編集中ウィンドウを捕まえる

var outlook = new ActiveXObject("Outlook.Application");
var inspector = outlook.ActiveInspector();

で、Outookのアクティブなウィンドウを捕まえられる、けど…

  • アクティブウィンドウが存在しないかも知れないし
  • アクティブウィンドウが、メールアイテムじゃないかも知れないし
  • 編集可能じゃないかも知れない

ってのを織り込んで、以下のコードを追加しましょう。

if (inspector==null ||
    inspector.CurrentItem.Class!=43 ||
    inspector.CurrentItem.Sent) {
    outolook.CreateItem(0).Display();            //    新しいメールアイテムを開いちゃいましょう
    inspector = outlook.ActiveInspector();
}

HyperLinkを挿入する

文字列を挿入しても何ともならんので、WordEditorってのを捕まえて、そいつにHyperLinkを直接挿入しちゃえばオッケ。
こんな感じ。

var doc = external.menuArguments.document;
var word = inspector.WordEditor;
var win = word.Windows(1);

var url = doc.URL;
var title = doc.title;
if (title==undefined ||
    title==null ||
    title=="")
    title = url;        //    タイトルがなければurlで代替する

word.Hyperlinks.Add(win.Selection.Range, url, "", "", title);

仕上げ

全体を纏めちゃうと、こんなん。
軽~くエラートラップも入れてあります。

SendToOutlook.htm
<script Language="JavaScript" defer>
var outlook = new ActiveXObject("Outlook.Application");
var inspector = outlook.ActiveInspector();
if(inspector==null ||
   inspector.CurrentItem.Class != 43 ||
   inspector.CurrentItem.Sent) {
   outlook.CreateItem(0).Display();
   inspector = outlook.ActiveInspector();
}
var doc = external.menuArguments.document;
var word = inspector.WordEditor;
var win = word.Windows(1);
try {
   var url = doc.URL;
   var title = doc.title;
   if(title==undefined || title==null || title=="")
      title = url;
   word.Hyperlinks.Add(win.Selection.Range, url, "", "", title);
}
catch(e) {
   window.Alert(e.message);
}
finally {
   outlook = word = win = null;
}
</script>

セットアップ

えーっと、配置に色々面倒臭いものがあるからセットアップスクリプトを作っちゃいましょう。
やってる事はユーザのTemplatesフォルダにhtmファイルをコピーして、レジストリにそいつを登録しているだけです。

Setup.js
var wsh = WScript.CreateObject("WScript.Shell");
var fso = WScript.CreateObject("Scripting.FileSystemObject");

try {
    var key = "HKCU\\Software\\Microsoft\\Internet Explorer\\MenuExt\\Send to Outlook\\";
    var template = wsh.SpecialFolders("Templates") + "\\";
    var scrFolder = fso.getParentFolderName(WScript.ScriptFullName) + "\\";
    var htm = "SendToOutlook.htm";

    wsh.RegWrite(key, "file://" + template + htm, "REG_SZ");
    wsh.RegWrite(key + "Contexts", 127, "REG_DWORD");

    if (fso.FileExists(template + htm))
        fso.DeleteFile(template + htm, true);

    fso.CopyFile(scrFolder + htm, template);
    }
finally {
    wsh = fso = null;
}

Setup.jsSendToOutlook.htmを同じフォルダに置いて(デスクトップで充分です)、Setup.jsをダブルクリックすれば設定完了です。もし、以下の画面が出たら、Windows Based Script Hostを選んでOKを押して下さい。

image

先のSetup.jsSendToOutlook.htmはもう用済みなので削除しちゃってイイです。

実行

Internet Explorerのウィンドウ上で右クリックすると、、コンテキストメニューが表示されます。
Send to Outlookが追加されていることが確認できました。

image

多分、一番最初は以下のセキュリティ警告が出ると思います。

image

今後、このプログラムに関する警告を表示しないにチェックを入れて「許可する」を押せば良いでしょう。
すると、Outlookのメール作成ウィンドウにリンクが挿入されます。

image

ん、イイ感じだー

※ 尚、動作確認が取れているOutlookのバージョンは20162010です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1