ACCESSだけでメール送受信(Winsock,CDO,ADOの連携)するサンプルを紹介します。

送信には、CDO(Microsoft Collaboration Data Objects)を利用しています。
受信は、Winsock(WSOCK32.DLL)です。(一般的なPOP3サーバから受信できるよう、Winsockを使いました。)
独自コーディングでデコードするサンプルも、Winsockで受信しますが、デコード独自のロジックです。
それに対し、このサンプルは、CDOADO(Active Data Object)のStreamを使ってデコードしています。
Winsock(WSOCK32.DLL)とCDO,ADOが必要ですが、これらは全てWindows標準的機能です。

    CDOを使ったデコードのテクニックについて、上原様から貴重なアドバイスを頂きました。
    上原様のお陰で、挫折しかけた状況から脱出できました。
    心より感謝致します。

一般的なインターネットプロバイダなどのPOP3サーバから、CDOでメールを受信することは困難なようです。
マイクロソフトが積極的に推奨するのは、エクスチェンジ(Exchange)への統合だと理解できます。
しかし、ユーザの状況によっては、一気にエクスチェンジ(Exchange)の導入にに踏み切れるとは限りません。
ストレートな道ではありませんが、下記のような選択肢が残されていることに感謝します。

Winsockを使ってPOP3サーバと交信すれば、バイト型の構造体(変数)にメールを受信することは可能です。
受信した構造体は、バイナリーのまま何の変換もせず、eml形式でディスクに保存できます。
保存したファイルをADODBStreamとしてロードすると、CDOを介して参照できるようになります。
参照した時点で、自動的にデコードされているので、コーディングでデコードを意識することはありません。
つまり、デコードは「Windowsにお任せ!」ということになります。
根拠の無い推測ですが、Outlookなどと同等のデコード性能が期待されます。
試しに使っていますが、問題は見つかっていません。その上、「速い!」と実感しました。
テストした環境は、Windows2000XP-Proです。

受信の処理速度をもう少し詳しく比較してみます。
パソコンや通信回線、メール(POP3)サーバなどの環境によって、違った結果が出ることもあります。
単に弊社の(貧弱な)環境で僅かなテストを行った印象程度の情報です。何の保障もありません
毎日、やってくるスパムの山は、そのほとんどが添付ファイルを含まない文字ベースのメールです。
(HTML形式でリンクした画像などを含む場合もありますが、受信時点では文字だけです。)
ちょうど良いので、このスパム(数十件以上)を受信してテストしました。
BASP21を利用したケースに比べ、受信に要する時間は半分以下と圧倒的な速さでした。
「OutlookExpress」とは同程度の所要時間でした。

次に、比較的大きな添付ファイルを伴うメールで、試してみました。
約8MBのLZH形式のファイルを添付してWindows2000の環境で受信するとBASP21の方が高速でした。
時間的に5%程度速く、さすがBASP21だと思いました。
XPでも同じ比較をしてみると、今度はこのサンプルの方が10%程度高速でした。
ただし、CPUやメモリも違うので、正確な比較ではありません
個人的な意見ですが、添付ファイル付はBASP21とほぼ『互角』でしょう。
「OutlookExpress」で同じメールを受信してみると、「OutlookExpress」の方が10%以上短い時間で受信しました。
しかし、「OutlookExpress」は、受信した時点で、添付ファイルのデコードはしていないと予測されます。
受信に要する時間の比較対象としては適当でないと思われます。
その分を差し引くと、独断とヤマ勘で、ほぼ同等と割り切ります。

以上のような多少雑なテスト結果から、乱暴に判断し、『使えそう!』という結論に達しました。
また、BSMTP.DLL(BASP21)の添付ファイルの処理について、その研ぎ澄まされた性能を再認識しました。
独自のデコードを試みて解ったのですが、文字のデコードについてCDOは大変優秀な通訳です。
優秀な助っ人としてのCDOくんに感謝しつつ、彼に頼むのは現実的な選択だと思います。

メールの送受信の仕方を理解して頂く目的でフリーサンプルを掲載しています。
内容は、以下の動作のみに絞って、できるだけシンプルにしてあります。
 @ AccessからJPEGなどの添付ファイル付きEメールを送信する。
 A Accessで添付ファイル付きEメールを受信し、内容をテーブルに保存する。
ご希望なら、ダウンロードしてご覧下さい。
ダウンロード(Access2000版)
あくまでもサンプル無保証ですが、自分で作ろうと思っている方には、参考になるでしょう。
ソースコードは、完全公開です。
Windowsの機能だけで、ここまでできるとは、遅れ馳せながら驚きました。

この仕組みを使ったメーラーもどきもあります。          サンプルの一覧.....
http://www.ynsk.co.jp/nsk/knowhow/nskdcm/nskdcm5.htm
ハードディスク上のファイルをメールに添付したり、受信した添付ファイルをハードディスクに保存するするステップを含みます。
多少複雑ですが、添付ファイルの扱い方を知りたい方には参考になると思います。
このサンプルで動作確認ができ、更に連携した使い方を模索される方にお勧め致します。

独自コーディングでデコードするサンプルもあります。
エンコード,デコードの仕組みを理解するには、独自コーディングでデコードするサンプルの方が適しています。
向学心』の旺盛な方は、挑戦してみて下さい。

●操作方法
 ・ ファイルはLZH形式で圧縮されています。
 ・ 解凍後にMDBファイルが1つ作成されます。
 ・ このファイルをダブルクリックして起動して下さい。(単独で動作します)
●MDBファイルの内容
 ・ メールユーザ(テーブル)……利用するメールアカウントの情報を保存します。
 ※ 以下のように設定して下さい。
     メールアドレス
     POP3サーバ
     ユーザ
     パスワード
     SMTPサーバ
     リターン ← 受信時にサーバなどから通知されるメッセージが設定されます。
     受信要求 ← 0(受信しない)または-1(受信する)を設定して下さい。
     仮受信 ← -1(メールをサーバから消さない)または0(消す)を設定して下さい。
 ※ 複数レコードを格納できます。
     複数レコードを格納すると複数ユーザのメールを受信できます。
 ・ 受信メールW(テーブル)……受信したメールはこのテーブルに保存されます。
 ・ 受信メール添付W(テーブル)……受信したメールに添付ファイルがあった場合、
     このテーブルに保存されます。
 ・ 送信メールW(テーブル)……送信するメールの内容をこのテーブルに設定します。
 ※ 以下のように設定して下さい。
     メール番号 ← 送信するメールに任意の番号を指定して下さい。
     宛先アドレス ← 宛先のメールアドレス
     CCアドレス ← CCのメールアドレス
     BCCアドレス ← BCCのメールアドレス
     差出人アドレス ← 差出人のメールアドレス
     件名 ← メールの件名
     宛先名 ← メールの宛先名(本文の先頭の位置に表示されます。)
     本文 ← メールの本文
     署名 ← メールの署名(本文の末尾の位置に表示されます。)
     リターン ← メール送信時にサーバなどから通知されるメッセージが設定されます。
 ※ 複数レコードを格納できます。
     複数レコードを格納すると複数件のメールを一度に送信できます。
 ・ 送信メール添付W(テーブル)……送信するメールに添付ファイルがある場合、
     このテーブルに保存して下さい。
 ※ 以下のように設定して下さい。
     メール番号 ← 送信メールW(テーブル)のメール番号と同じ値を指定して下さい。
     添付ファイル番号 ← 添付ファイルの連番
     添付ファイル名 ← 添付ファイルの名前(例:XXXX.JPG)
     添付ファイル ← 添付ファイルをロングバイナリーデータの形式で保存して下さい。
     添付ファイル長さ ← 添付ファイルの長さをバイト単位で設定して下さい。
 ※ 添付ファイルの保存方法は、 http://www.ynsk.co.jp/nsk/knowhow/binfld/binfld.htm
     の説明と同様にして下さい。
 ※ 添付ファイルを送信する場合のみ、送信メール添付W(テーブル)にレコードを作成して下さい。
 ・ Q_メール受信(更新クエリ)……このクエリを実行するとメールが受信されます。
 ※ メールユーザ(テーブル)の受信要求(フィールド)に
     -1を設定したメールユーザが対象となります。
 ※ メールは、受信メール(テーブル)に保存されます。
     添付ファイルがあった場合、受信メール添付(テーブル)に保存されます。
 ・ Q_メール送信(更新クエリ)……このクエリを実行するとメールが送信されます。
 ※ Autoexec(マクロ)などは作っていません。
    各テーブルとモジュールの内容を設定して、直接クエリを実行して下さい。
 ・ B_POP3(モジュール)……メールの受信とデコードを行います。
 ※ このモジュールを実行するためには、作業用のフォルダが必要です。
    B_POP3(モジュール)の中のコーディング
    「Private Const BWorkDir As String = "c:\maildata"」と
    「Private Const BWorkTempDir As String = "c:\maildata\temp"」で
    作業用のフォルダを指定しています。
    ダウンロードしたままの設定で操作する場合、
    Cドライブ直下にmaildataというフォルダとmaildataフォルダのなかに
    tempというフォルダを作成して下さい。
    別のフォルダを利用する場合、フォルダの指定を変更して下さい。
    「Private Const c_WorkDir非消去 As Integer = -1」というコーディングがあります。
    -1のままだと、1メールごとに上記作業用のフォルダの中身を削除しません。
    1ユーザのメールが複数あって、それを受信した場合、作業用のフォルダには全件分のファイルを残しています。
    デバック時に1ユーザごとに受信すれば、中間結果を追えるので、有効なことがあります。
    ファイルには、「mail1.txt」,「mail2.txt」.....などの番号を付けています。
    ファイルと受信したメールを照合させるため、テーブルに保存したメールの「件名」にも番号を付けています。
    0にすると、作業用のフォルダには最後の1件分のファイルしか残りません。
    安定した運用段階に入れば、0にした方がディスク負荷は小さくなります。
 ・ B_SMTP(モジュール)……メールの送信を行います。
 ※ このモジュールを実行するためには、作業用のフォルダが必要です。
    B_SMTP(モジュール)の中のコーディング
    「Private Const BWorkTempDir As String = "c:\maildata\temp"」で
    作業用のフォルダを指定しています。
    ダウンロードしたままの設定で操作する場合、
    Cドライブ直下にmaildataというフォルダとmaildataフォルダのなかに
    tempというフォルダを作成して下さい。
    別のフォルダを利用する場合、フォルダの指定を変更して下さい。
 ・ B_Winsock(モジュール)……WSOCK32.DLLに関連するプロシージャ群です。

  モジュール内に、コメント(説明)を書き加えました。
  参考にして頂ければ幸いです。



ご意見、お問い合わせは → 

ACCESSの使い方トップページ



〒745-0801 山口県周南市大字久米327-145
中川システム開発 ホームページ
Tel(0834)28-0205 Fax(0834)28-1272