64bit版のACCESS(2010以降)でメール送受信(Winsock2,CDO,ADOの連携)するサンプル(accdb)を紹介します。

送信には、CDO(Microsoft Collaboration Data Objects)を利用しています。
受信は、Winsock2(ws2_32.dll)です。
64bit版のACCESSで動作するaccdbのサンプルです。32bit版のACCESS(2010以降)でも動きます。

Winsockを使うサンプルは、64bit版のACCESSで動きませんでした。
64bit版では、Winsockのgethostbyname関数が正しく動作しないようです。
仕方なく、この個所をWinsock2のgetaddrinfo関数に代えました。
ついでに、他の部分でWinsock(wsock.dll)を使っていたのをWinsock2(ws2_32.dll)に代えました。
テストした環境は、Windows710です。

Winsock2(ws2_32.DLL)とCDO,ADOが必要ですが、これらは全てWindows標準的機能です。

フリーサンプルをダウンロードできます。
内容は、以下の動作のみに絞って、できるだけシンプルにしてあります。
 @ AccessからJPEGなどの添付ファイル付きEメールを送信する。
 A Accessで添付ファイル付きEメールを受信し、内容をテーブルに保存する。
ご希望なら、ダウンロードしてご覧下さい。
ダウンロード(Access2010以降対応)
あくまでもサンプル無保証ですが、自分で作ろうと思っている方には、参考になるでしょう。
ソースコードは、完全公開です。

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

●操作方法
 ・ ファイルはLZH形式で圧縮されています。
 ・ 解凍後にaccdbファイルが1つ作成されます。
 ・ このファイルをダブルクリックして起動して下さい。(単独で動作します)
●accdbファイルの内容
 ・ メールユーザ(テーブル)……利用するメールアカウントの情報を保存します。
 ※ 以下のように設定して下さい。
     メールアドレス
     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.eml」,「mail2.eml」.....などの番号を付けています。
    ファイルと受信したメールを照合させるため、テーブルに保存したメールの「件名」にも番号を付けています。
    0にすると、作業用のフォルダには最後の1件分のファイルしか残りません。
    安定した運用段階に入れば、0にした方がディスク負荷は小さくなります。
 ・ B_SMTP(モジュール)……メールの送信を行います。
 ※ このモジュールを実行するためには、作業用のフォルダが必要です。
    B_SMTP(モジュール)の中のコーディング
    「Private Const BWorkTempDir As String = "c:\maildata\temp"」で
    作業用のフォルダを指定しています。
    ダウンロードしたままの設定で操作する場合、
    Cドライブ直下にmaildataというフォルダとmaildataフォルダのなかに
    tempというフォルダを作成して下さい。
    別のフォルダを利用する場合、フォルダの指定を変更して下さい。
 ・ B_Winsock(モジュール)……ws2_32.DLLに関連するプロシージャ群です。

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



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

ACCESSの使い方トップページ



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