ACCESSから直接メール送信
  • (2009-02-20 19:23:08)
ExcelやACCESSから直接メールを送信することで仕事の効率化とミスの軽減を目指す

-------------------------------

●紙の「領収書」よりメールによる通知を望む声が多くなっている。

コンビニ決済に関しては、支払い時にコンビニにて半券の領収書が返ってくる。領収書があるので入金確認通知メール」は発行していなかった。ところが「メールでも入金確認の通知がほしい」という要望が多くなった。メールユーザーは増加の一方。使い方もより生活密着型になってきている。日常生活の活動記録をメールに依存するユーザーも多く、紙切れ「領収書」より、「デジタル」での記録の方が好まれるようになったのだろうか?紙切れは紛失するし、検索ができないことが理由ではなかろうか。

●ACCESSからダイレクトに自動送信で作業負担軽減。失敗やミスも軽減。

当社では受注管理はACCESSで行っている。

「このACCESSから直接、入金確認通知メールを自動発行することは可能だろうか?」

が今日のテーマ。調べるとACCESSには「SendObject」というメソッドが準備されているではないか。これはACCESSから直接インターネット上のメールサーバーを呼び出し、データをそのサーバに渡すという作業をやってくれるプログラム。至極便利でありがたい。

SendObjectメソッドは、おそらくExcelにはなかったように思う。というのは商品の発送に関しては、ヤマト運輸送り状発行ソフトB2から管理番号をExcelにエクスポートし、Excelからダイレクトに「商品発送通知メール」を自動発行している。そのプログラム作成時に調べたことがあるが、SendObjectメソッド相当のものは発見できなかった。

それでExcelからの「商品発送通知メール」は有名な「Basp21」を利用させてもらっている。SendObjectオブジェクト(メソッドと呼ぶ方が適切か?)の存在はうれしかったが、ExcelとVBAコードをなるべく統一するために今回は「Basp21」を使用することにした。SendObjectは後日試したい。

●「Basp21」でACCESSからメール自動発行プログラムを組む。

当社の場合、コンビニ決済の決済データはネットからCSVデータで一括ダウンロード。これを一発インポートでテーブルに取り込みクエリに展開。受注テーブルと内部結合してメールアドレスやご注文日を抽出する。

下記コード内のstrTEXT.txtは、挨拶などが書かれたテキストファイル。これもVBで自動読み込みを行う。テキストファイルの読み込みに関しては、FileSystemObjectオブジェクト(メソッドとオブジェクトの違いは私には不明)という便利なプログラムが準備されている。感謝したい。下記がコードの骨格部分の抜粋。

'オブジェクト(Basp21、FileSystemObjecなど)を割り当て:

Set objBsp = CreateObject("Basp21")

Set FSO = CreateObject("Scripting.FileSystemObject")

Set objTs = FSO.OpenTextFile("C:\strTEXT.txt")

'挨拶文の全文読み込み:

Do While Not objTs.AtEndOfStream

strTEXT = objTs.ReadAll

Loop

'データベースとその中のクエリ(コンビニ決済データと受注データのダイナセット)を割り当て:

Dim DB As Database

Dim RS As Recordset

Set DB = CurrentDb

Set RS = DB.OpenRecordset("○○クエリ", dbOpenDynaset)

'1レコードごとに各フィールドを読み込み、Basp21にメール送信。

'送信結果として「入金確認メール」にフラグを立てる

Do Until RS.EOF

strFlg = RS![入金確認メール]

strTck = RS![トラッキングナンバー]

strAdr = RS![顧客メールアドレス]

strNam = RS![顧客氏名]

RS.Edit

If strFlg = "送信待ち" Then

strTo = strNam & "<" & strAdr & ">"

strBdy = strNam & "さま" & vbCrLf & vbCrLf & strTEXT

ret = objBsp.SendMail(strSvr, strTo, strFrm, strSbj, strBdy, strFle)

If ret = "" Then

RS![入金確認メール] = "送信完了"

Else

RS![入金確認メール] = "エラー"

End If

End If

RS.Update

RS.MoveNext

Loop

MsgBox "送信完了しました。"






<< ACCESSクエリ、演算フィールドで結合した際のデータ更新< | >CMSを試す・・・CMSimple >>
search
layout
admin

[▲page top]