Hey, Scripting Guy!

Hey, Scripting Guy!

新しい TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

今日の質問 : CDO を使用して送信メールにファイルを添付するにはどうすればよいでしょうか。


CDO を使用して送信メールにファイルを添付するにはどうすればよいでしょうか。

Q

Scripting Guy さん、よろしくお願いします。CDO を使用して電子メールを送信する方法は知っていますが。添付ファイルをその電子メールに含めるにはどうすればよいでしょうか。

-- RT

A

RT さん、こんにちは。そして、タイミングよく、この質問をしてくださり、ありがとうございます。Scripting Guy の構成員のうち少なくとも 1 人は、感謝祭の週末の大半を食事ばかりで過ごし、食事以外のごくわずかな時間には甥っ子たちの集団とフットボールで遊んでいました。甥っ子たちは Scripting Guy よりもずっと大きく、そして、–はあ (ため息)–、ずっと若かったです。その Scripting Guy は気を取り直すため、仕事に戻りたいと思っていましたが、今回の質問は仕事始めにはちょうどよいと言えるでしょう。

CDO (Collaboration Data Objects の略) を知らない人のために説明しておくと、このテクノロジはスクリプトから電子メールを送信する手段の 1 つです。ネットワーク上のどこかに SMTP サーバーがあれば、次のようなコードを使用して電子メールを作成し、送信できます。

Set objEmail = CreateObject("CDO.Message")

objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down" 
objEmail.Textbody = "Server1 is no longer accessible over the network."

objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpmailer" 
objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update

objEmail.Send

このスクリプトについて今ここで詳しく説明することはしませんが、この中で使用している個々のプロパティの簡単な概要については、『Microsoft Windows 2000 Scripting Guide』(英語) を参照してください。FromToSubjectTextbody の各プロパティについては、それほど悩まずに理解できると思います。http://schemas.microsoft.com/cdo/configuration/sendusing などの URI は決まり文句のようなもので、普通はそのままで大丈夫です。ほとんどの場合、変更しなければならないのは smtpserver だけです。このサンプル コードでは、smtpmailer と名付けた SMTP メール サーバーを参照しました。この部分を、あなたが利用している SMTP メール サーバーの名前に置き換える必要があります。

ところで、これらの URI について、たくさんの人が疑問を持つと思います。なぜ電子メールを送信するために Microsoft に接続する必要があるのでしょうか。実は、Microsoft に接続するのではありません。これらの URI は単なるプロパティです。ではなぜこのように参照するのでしょうか。正直言って、私たちにもわかりません。でも心配することはありません。メールが Microsoft を経由して送られることはないし、そこでだれかに閲覧されることもありません。信じてください。私たちは自分たちの電子メールを読むことで精一杯で、まして他のだれかのメールを読んでいる時間などありませんから。

さて、この電子メールに添付ファイルを追加するにはどうすればよいでしょうか。次のような 1 行のコードを追加するだけで、ファイル C:\Scripts\Output.txt が電子メールに添付されます。

objEmail.AddAttachment "C:\Scripts\Output.txt"

以上です。このコード行をスクリプトに追加すれば、添付ファイルを利用できます。スクリプトの全体を示すと、次のようになります。

Set objEmail = CreateObject("CDO.Message")

objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down" 
objEmail.Textbody = "Server1 is no longer accessible over the network."
objEmail.AddAttachment "C:\Scripts\Output.txt"

objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpmailer" 
objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update

objEmail.Send

この質問に関連して、SMTP サーバーで認証を必要とする場合はどのように電子メールを送信すればよいかという質問も、たくさんの人から寄せられています。正直に言うと、この質問に答えることはとても大変です。いろいろな理由があって、このような事例をテストする方法がないからです。とはいえ、まずはユーザー名とパスワードをスクリプトに追加することから始めましょう。

objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "fabrikam\kenmyer"
objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "&gr54#wgha"

このコードでは、ユーザー名 fabrikam\kenmyer、パスワード &gr54#wgha で、SMTP サーバーにログオンします。この場合、ユーザー名とパスワードはクリア テキストで送信されます。したがって、多くの場合、管理者のアカウントを使用して電子メールを送信したいとは思わないでしょう。代わりに、電子メールを送信する権限 (他に何かあっても少しだけ) を持つユーザー アカウントを作成し、そのアカウントを使用してログオンします。詳細については、MSDN で公式の『CDO ドキュメント』(英語) を参照してください。


関連情報

Hey, Scripting Guy! - アーカイブ もチェックしてください。

ページのトップへページのトップへ