![[tips][Perl] OLEを使ってPerlからOutlookのメールを送信する方法](https://casualdevelopers.com/wp-content/uploads/2014/02/outlooklogo-700x300.jpg)
WindowsにはOLEオートメーションというWindowsのアプリケーションにアクセスするインターフェースがあります。OLEを使えばOffice製品をすべてプログラムから操作することができるわけです。PerlのOLEモジュールは「Win32::OLE」と言います。
今回は、PerlのWin32::OLEを使って、Outlookメールを送信してみましょう。
以下が、コードです。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode qw/encode decode/; my $enc = 'cp932'; sub d($) { decode($enc, shift) } sub e($) { encode($enc, shift) } use POSIX qw/strftime/; use Win32::OLE::Const 'Microsoft Outlook'; # 宛先 my @to_addresses = ('hoge@fuga.com','hoge@fuga.com'); my @cc_addresses = ('hoge@fuga.com','hoge@fuga.com','hoge@fuga.com'); my @bcc_addresses = ('hoge@fuga.com'); # 今日の日付取得 my $today = strftime "%Y-%m-%d %H:%M:%S", localtime; # Outlook起動 my $outlook; my $is_opened; eval {$outlook = Win32::OLE->GetActiveObject('Outlook.Application')}; die "Error : Outlook is not installed." if $@; unless (defined $outlook) { $outlook = Win32::OLE->new('Outlook.Application') or die "Error : Could not get OLE object for Outlook."; $is_opened=0; }else{ $is_opened=1; } # メール送信 my $mail_item = $outlook->CreateItem(0); $mail_item->{'Subject'} = e('['.$today.'] Greeting mail'); $mail_item->{'Body'} = e('Hello, how are you?'); $mail_item->{'To'} = e(join ';', @to_addresses); $mail_item->{'Cc'} = e(join ';', @cc_addresses); $mail_item->{'Bcc'} = e(join ';', @bcc_addresses); $mail_item->Send(); $mail_item->Quit; # Outlookが起動していた場合はあえて終了しない。 unless ($is_opened) { # Outlook終了 $outlook->Quit; }
「use Win32::OLE::Const ‘Microsoft Outlook’;」がOutlookのOLEを呼び出す宣言になります。Outlookが起動している場合は起動しているインスタンスを使い、起動していない場合は新しくインスタンスを作成しています。メールを送信後、Outlookが最初から起動していた場合はOutlookを終了させず、Outlookが起動していなかった場合は終了するようにしています。
定期タスクにして、定期的に自動メールを送信する時などに使えますよ。
<環境>
OS : Windows7
Office : 2010
Perl : 5.16.3
The following two tabs change content below.

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

コメントを残す