Sending Mail from Script using CDO object

今日は、ちょっとしたことを調べていて、CDOオブジェクトを使ってスクリプトでメール送信するやり方ではまってしまい少し時間を無駄に使ったので、忘れないうちにメモ。

調べたかったのは、CDOでメール送信する際にエンコーディングにiso-2022-jpを指定すると半角カナを全角カナに自動変換するんだったっけという疑問への回答。確か、そうだったはずと思ったんだけど、ググってもはっきり書いてあるサイトがMicrosoftを含めて見つからない。じゃあ、ちょっとスクリプトを書いて試せばはっきりするじゃんと、スクリプトのサンプルぐらいならググってどこかから引っ張ってきてやれば10分ぐらいで試せると思い手を付けたところでドツボにはまる。

大体がそんなに例が豊富ではない。CDOはドキュメント類がやけに少ないので有名なのは知っていたが、こんなにないとは思いもせず、何とか少ないサンプルをつなげたりしながら形になったところで、どうしても1行だけうまくランタイムエラーが取れない。試した環境がXPと2000 Serverだったのだが、両方とも英語版のせいなのか、CDO.TextBodyPartが存在しないと怒られてしまう。Microsoftのリファレンスを見ても動作するはずなのに、何も手がかりはなし。試行錯誤を重ねた上、CDO.BodyPart.Charsetにiso-2022-jpを設定してやることで一応メールは送信できるようになった。でも、なんでこんなことになってしまったのかは、なぞ。どなたか知っている人がいたら教えてください。

ちなみに動作確認に使ったスクリプトはJavaScriptで書いたもので下記のようなもの。適当な名前(例えばjsmail.js等)で保存してcscript jsmail.jsとコマンドライン実行してやるだけのものです。

var CDO = new ActiveXObject( "CDO.Message" );
var f = CDO.Configuration.Fields;
var s = "http://schemas.microsoft.com/cdo/configuration/";

f.Item( s + “sendusing” ) = 2;
f.Item( s + “languagecode” ) = “iso-2022-jp”;
f.Item( s + “smtpserver” ) = “smtp.gmail.com“;
f.Item( s + “smtpauthenticate” ) = 1;
f.Item( s + “sendusername” ) = “username@gmail.com“;
f.Item( s + “sendpassword” ) = “password”;
f.Item( s + “smtpserverport” ) = 465;
f.Item( s + “smtpusessl” ) = true;
f.Update();
CDO.MimeFormatted = true;
CDO.Fields.Update();
CDO.From = “ sender@gmail.com“;
CDO.To = “recipient@gmail.com“;
CDO.Subject = “てすと”;
// CDO.TextBodyPart.Charset はなぜか存在しない? XPでもWin2kでもダメ。両方とも英語版だからか?
// Shift-JISでも通るけど、一応Shift_JISの方が正式名だと思う。
CDO.BodyPart.Charset = “Shift_JIS”;
// CDO.BodyPart.Charset = “ISO-2022-JP”;
// 下記のように入力するとISO-2022-JPだと原則半角カナは使えないことになっているので、
// CDO内で勝手に全角カナに変換される。
// Shift_JISだと半角カナが使えると解釈され、勝手には変換されない。
CDO.TextBody = “これはテストメールです。\nココカラハハンカクカナデニュウリョクサレテイマス”;
CDO.Send();

This entry was posted in インターネット, コンピュータ, 技術 and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *