ACCESSから直接メール送信
- (2009-02-20 19:23:08)
-------------------------------
●紙の「領収書」よりメールによる通知を望む声が多くなっている。
コンビニ決済に関しては支払い時にコンビニにて半券の領収書が返ってくる。領収書があるので入金確認通知メール」は発行していなかった。ところが「メールでも入金確認の通知がほしい」という要望が多くなった。メールユーザーは増加の一方。使い方もより生活密着型になってきている。日常生活の活動記録をメールに依存するユーザーも多く、紙切れ「領収書」より、「デジタル」での記録の方が好まれるようになったのだろうか?紙切れは紛失するし、検索ができないことが理由ではなかろうか。
●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 "送信完了しました。"