適用環境:XP or 2000
言語:VB6.0
動作環境には、ノートン先生が入っています。
いつもこちらを拝見し、勉強させていただいています。
早速ですが、標題の件について質問させていただきます。
今回、UI無しのタイマーをトリガとした定周期で動作するプログラムに、
エラーが発生した際に、自動でメールを送信する機能を実装したいと
考えています。
で、CDOを採用してメール送信を組み込んだのですが、以下問題が発生。
1.SENDメソッドを使用した後に、すぐにメールを送信しない。
2.動作確認の為、5分毎に同じエラーが発生するようにしているが、
次のSENDメソッドかCDOを使うタイミングで、メール送信処理が始まり、
ノートン先生で「メールおくれないよ」という警告が表示されます。
(一つ前のメールは、確実に送信されない)
※送れる/送れないはノートン先生のチェックでとりあえず判定しています。
ここから、本題となりますが、
なぜ、1ですぐ送信できないのでしょうか??
サンプルで、簡易メーラもどきを作った際は、
このような問題は発生せず、すぐに送信されております。
・・・ただ、それを含むクリックイベントが完了したタイミングで
送信されているようです。
非同期/同期のような設定があるのでしょうか。。
今回の定周期タスクに画面を持たしてみて、そこからボタンイベントで、
イベントを発生させた場合に、下記ステップでメール送信を実行している
ことと、どうやらその時に一つ前のメールを送っているようです。
Set cdoConf = New CDO.Configuration
→なんとなく、CDO用の送信キューにためるだけで終わっている?
ユーザイベントを使わないと、送れない?
という感じを持っています。
2.については、上記解決すれば、おのずと消去されるので、重要視していません。
以下に、ソースを抜粋します。
'=================
'CDO変数
'=================
'参照設定
Private cdoMsg As CDO.Message
Private cdoConf As CDO.Configuration
''実行時
'Private cdoMsg As Object
'Private cdoConf As Object
'===============================================================================
'メンバ変数
'
' ※複数指定する場合は、タブでアイテム間を区切ること。
'
'===============================================================================
Private m_SndMethod As enmSendMethod
Private m_strSmtpSv As String 'SMTPサーバ名(IPも可)
Private m_strMailTo As String 'To
Private m_strMailFrom As String 'From
Private m_strCC As String 'CC
Private m_strBCC As String 'BCC
Private m_blnAuth As Boolean '認証有無
Private m_strUserName As String '認証名
Private m_strUserPass As String '認証パス
Private m_strSubject As String '主題
Private m_strTextBody As String '本文
Private m_strAttachment As String '添付ファイル(フルパス)
'===============================================================================
'関数ステップ
'
'
'===============================================================================
Private Function SendMailCdo(ByRef FeedBack As String) As Long
Dim strRet As String
Dim lngRet As Long
Dim strWork() As String
On Error GoTo ErrHandler
SendMailCdo = -1
' Set cdoMsg = CreateObject("CDO.Message")
' Set cdoConf = CreateObject("CDO.Configuration")
Set cdoMsg = New CDO.Message
Set cdoConf = New CDO.Configuration ’←なんで、ここで送信?
With cdoConf.Fields
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServer) = m_strSmtpSv
If m_blnAuth Then
.Item(cdoSMTPAuthenticate) = 1
.Item(cdoSendUserName) = m_strUserName
.Item(cdoSendPassword) = m_strUserPass
End If
.Update
End With
With cdoMsg
Set .Configuration = cdoConf
'宛先
'複数はカンマ区切り
.To = Replace(m_strMailTo, vbTab, ",")
.CC = ""
.BCC = ""
.From = m_strMailFrom
.Subject = m_strSubject
.TextBody = m_strTextBody
.Send
End With
SendMailCdo = 0
Exit Function
ErrHandler:
SendMailCdo = Err.Number
FeedBack = Err.Description
Exit Function
exit function
=======================================================
ご存知の方、おられましたら
ぜひ御教授願います。
以上です。
すみません、追記です。
CDOは、「参照設定」の名称でいくと、
"Microsoft CDO for Windows 2000 Library"とあり、
cdosys.dllを参照しています。
最終的には、2000/2003サーバにも導入する予定なので、
デバッグ後、実行時バインドに切り替えて使用するつもりです。
以上です。
ツイート | ![]() |