Jim Dettman
jimdettman at verizon.net
Tue Dec 30 14:20:11 CST 2008
It is a .DLL, but it does not need to be registered. Just placed in the same directory as the DB. It does need a reference set in code however, so if you change install directories, that will be a problem. If so, I would place it in something like \Windows\System32 Here's the URL for it: http://www.freevbcode.com/ShowCode.Asp?ID=109 Below is the wrapper I wrote for it. Jim. Option Compare Database Option Explicit Const ModuleName = "clsOCS_SendMail" ' Wrapper class for vbSendMail, which provides a simplified ' interface for sending e-mail from a application. ' ' Most of the properties for vbSendMail are set via ' a call to .SetParams(), which reads table tblemailtemplates in the SYS database. ' Notes: ' 1. Send() is the only method that returns a status. Other methods failing ' will cause the send() method to fail. ' ' 2. SetParams() must be called first in order to send an e-mail message. ' ' 3. Once a Send() is attempted, you must call SetParams() again and ' set any other parameters before trying to send again. ' ' Example of use: ' Dim oSendMail As New OCS_SendMail ' ' oSendMail.SetParams("Test", ".", ".") ' Set default parameters via template ' oSendMail.ShowStatus = True ' Tells send mail to display progress form. ' varRet = oSendMail.Send ' Send the e-mail. ' ' If varRet = Null then ' Msgbox "Mail Sent" ' Else ' MsgBox "Main Send Failed" ' End If Private WithEvents oVBSendMail As vbSendMail.clsSendMail Public Enum MAIL_PRIORITY HIGH_PRIORITY = 1 NORMAL_PRIORITY = 3 LOW_PRIORITY = 5 End Enum Private bShowStatus As Boolean Private bSetParamsCalled As Boolean Private varErrorMessage As Variant Public Property Get Attachment() As String 10 Attachment = oVBSendMail.Attachment End Property Public Property Let Attachment(ByVal strNewValue As String) 10 oVBSendMail.Attachment = strNewValue End Property Public Property Get AsHTML() As Boolean 10 AsHTML = oVBSendMail.AsHTML End Property Public Property Let AsHTML(ByVal bNewValue As Boolean) 10 On Error Resume Next 20 oVBSendMail.AsHTML = bNewValue End Property Public Property Get Message() As String 10 Message = oVBSendMail.Message End Property Public Property Let Message(ByVal strNewValue As String) 10 oVBSendMail.Message = strNewValue End Property Public Property Get Priority() As MAIL_PRIORITY 10 Priority = oVBSendMail.Priority End Property Public Property Let Priority(ByVal NewValue As MAIL_PRIORITY) 10 On Error Resume Next 20 oVBSendMail.Priority = NewValue End Property Public Property Get Recipient() As String 10 Recipient = oVBSendMail.Recipient End Property Public Property Let Recipient(ByVal strNewValue As String) 10 oVBSendMail.Recipient = strNewValue End Property Public Property Get RecipientDisplayName() As String 10 RecipientDisplayName = oVBSendMail.RecipientDisplayName End Property Public Property Let RecipientDisplayName(ByVal strNewValue As String) 10 oVBSendMail.RecipientDisplayName = strNewValue End Property Public Property Get ShowStatus() As Boolean 10 ShowStatus = bShowStatus End Property Public Property Let ShowStatus(ByVal bNewValue As Boolean) 10 On Error Resume Next 20 bShowStatus = bNewValue 30 Forms![frmSendMailStatus].Visible = bShowStatus End Property Public Property Get Subject() As String 10 Subject = oVBSendMail.Subject End Property Public Property Let Subject(ByVal strNewValue As String) 10 oVBSendMail.Subject = strNewValue End Property Private Sub Class_Initialize() Const RoutineName = "Class_Initialize" Const Version = "1.0.0" 10 On Error Resume Next 20 bShowStatus = False 30 DoCmd.OpenForm "frmSendMailStatus", acNormal, , , acFormEdit, acHidden 40 bSetParamsCalled = False 50 varErrorMessage = Null End Sub Private Sub Class_Terminate() Const RoutineName = "Class_Terminate" Const Version = "1.0.0" 10 On Error Resume Next 20 DoCmd.Close acForm, "frmSendMailStatus" End Sub Public Function Send() As Variant Const RoutineName = "Send" Const Version = "1.0.0" 10 On Error GoTo Send_Err ' If SetParams called, then try sending message. 20 If IsNull(varErrorMessage) Then 30 If bSetParamsCalled = True Then 40 DoCmd.Hourglass True 50 oVBSendMail.Send 60 Else 70 varErrorMessage = "OCS Send Mail Failure - Send Called without prior call to SetParams" 80 End If 90 End If Send_Exit: 100 Send = varErrorMessage 110 Exit Function Send_Err: 120 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SEND - Error: " & Err.Number & " - " & Err.Description 130 Resume Send_Exit End Function Public Sub SetParams(strReference As String, strCompany As String, strLocation As String) Const RoutineName = "SetParams" Const Version = "1.0.0" 10 On Error GoTo SetParams_Err ' Get an instance of vbSendMail 20 Set oVBSendMail = New clsSendMail ' Set parameters for e-mail based on template record. Dim dbCur As DAO.Database Dim rstemailtemplates As DAO.Recordset Dim qdfPassthrough As DAO.QueryDef ' Find parameter record in tblemailtemplates 30 Set dbCur = CurrentDb() 40 Set qdfPassthrough = dbCur.CreateQueryDef("") 50 qdfPassthrough.Connect = dbCur.TableDefs("tblemailtemplates").Connect 60 qdfPassthrough.sql = "Select * From tblemailtemplates WHERE Reference = '" & strReference & "' AND Company = '" & strCompany & "' AND Location = '" & strLocation & "'" 70 Set rstemailtemplates = qdfPassthrough.OpenRecordset() 80 If rstemailtemplates.RecordCount = 0 Then 90 varErrorMessage = "OCS_SENDMAIL::SETPARAMS - Error: Template for company " & strCompany & " template name " & strReference & " not found." 100 Else ' Now Set parameters 110 With oVBSendMail 120 .UserName = Nz(rstemailtemplates![UserName], "") 130 .Password = Nz(rstemailtemplates![Password], "") 140 .POP3Host = Nz(rstemailtemplates![POP3Host], "") 150 .SMTPHost = Nz(rstemailtemplates![SMTPHost], "") 160 .from = Nz(rstemailtemplates![FromLine], "") 170 .FromDisplayName = Nz(rstemailtemplates![FromDisplayName], "") 180 .Recipient = Nz(rstemailtemplates![ToLine], "") 190 .RecipientDisplayName = Nz(rstemailtemplates![ToDisplayName], "") 200 .CcRecipient = Nz(rstemailtemplates![ccLine], "") 210 .CcDisplayName = Nz(rstemailtemplates![CcDisplayName], "") 220 .BccRecipient = Nz(rstemailtemplates![bccLine], "") 230 .ReplyToAddress = Nz(rstemailtemplates![ReplyToAddress], "") 240 .Subject = Nz(rstemailtemplates![Subject], "") & " - " & Format$(Now(), "mm/dd/yy hh:mm ampm") & " (local)" 250 .Message = Nz(rstemailtemplates![Message], "") 260 .AsHTML = rstemailtemplates![HTMLFormat] 270 .ContentBase = rstemailtemplates![ContentBase] 280 .EncodeType = rstemailtemplates![EncodeType] 290 .Priority = rstemailtemplates![Priority] 300 .Receipt = rstemailtemplates![Receipt] 310 .UseAuthentication = rstemailtemplates![UseAuthentication] 320 .UsePopAuthentication = rstemailtemplates![UsePopAuthentication] 330 .ConnectTimeout = rstemailtemplates![ConnectTimeout] 340 .ConnectRetry = rstemailtemplates![ConnectRetry] 350 .MessageTimeout = rstemailtemplates![MessageTimeout] 360 .SMTPPort = rstemailtemplates![SMTPPort] 370 .PersistentSettings = False 380 End With 390 bSetParamsCalled = True 400 End If SetParams_Exit: 410 On Error Resume Next 420 rstemailtemplates.Close 430 Set rstemailtemplates = Nothing 440 qdfPassthrough.Close 450 Set qdfPassthrough = Nothing 460 Set dbCur = Nothing 470 Exit Sub SetParams_Err: 480 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SETPARAMS - Error: " & Err.Number & " - " & Err.Description 490 Resume SetParams_Exit End Sub Private Sub oVBSendMail_Status(Status As String) Const RoutineName = "Status" Const Version = "1.0.0" 10 On Error GoTo Status_Err 20 Forms![frmSendMailStatus]![txtStatus] = Status & IIf(Len(Trim(Forms![frmSendMailStatus]![txtStatus])) > 0, vbCrLf & Forms![frmSendMailStatus]![txtStatus], "") Status_Exit: 30 Exit Sub Status_Err: 40 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::STATUS - Error: " & Err.Number & " - " & Err.Description 50 Resume Status_Exit End Sub Private Sub oVBSendMail_Progress(lngPercentComplete As Long) Const RoutineName = "Progress" Const Version = "1.0.0" 10 On Error GoTo Progress_Err 20 Forms![frmSendMailStatus]![lblProgress].Caption = lngPercentComplete & "% complete" Progress_Exit: 30 Exit Sub Progress_Err: 40 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::PROGRESS - Error: " & Err.Number & " - " & Err.Description 50 Resume Progress_Exit End Sub Private Sub oVBSendMail_SendFailed(strExplanation As String) Const RoutineName = "SendFailed" Const Version = "1.0.0" Dim strMsg As String 10 On Error GoTo SendFailed_Err 20 Forms![frmSendMailStatus].Caption = "Send Failed!" 30 DoCmd.Hourglass False 40 varErrorMessage = "XYR Send Mail - Send Failed for the following reason:" & vbCrLf & strExplanation SendFailed_Exit: 50 Set oVBSendMail = Nothing 60 Exit Sub SendFailed_Err: 70 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SENDFAILED - Error: " & Err.Number & " - " & Err.Description 80 Resume SendFailed_Exit End Sub Private Sub oVBSendMail_SendSuccesful() Const RoutineName = "SendSuccesful" Const Version = "1.0.0" 10 On Error GoTo SendSuccesful_Err 20 Forms![frmSendMailStatus].Caption = "" 30 DoCmd.Hourglass False 40 varErrorMessage = Null SendSuccesful_Exit: 50 Set oVBSendMail = Nothing 60 Exit Sub SendSuccesful_Err: 70 varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SENDSUCCESFUL - Error: " & Err.Number & " - " & Err.Description 80 Resume SendSuccesful_Exit End Sub -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: Tuesday, December 30, 2008 3:03 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Application Error logging This is a DLL correct? Which means a DLL register on any machine it runs on? John W. Colby www.ColbyConsulting.com Jim Dettman wrote: > John, > > <<I have asked about a generic email and so far haven't found > anything that "just works, every where, every time".>> > > Basically, you need to talk directly to a SMTP server. Even that however > is not foolproof, but it gets rid of about 90% of the hassle. > > You can use BLAT (script and shell out to call the command line or use the > DLL) or something like vbSendMail. > > I use the latter. Wrapped a class around it with a template table to set > defaults for all the options and then call that from my apps. > > Jim. > > -----Original Message----- > From: accessd-bounces at databaseadvisors.com > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby > Sent: Tuesday, December 30, 2008 1:34 PM > To: Access Developers discussion and problem solving > Subject: Re: [AccessD] Application Error logging > > I have been looking for an email function that is generic, > i.e. can just be written in code and work anywhere, any > time. ATM I do email lots of stuff, but it is always done > through Outlook automation, which of course requires Outlook > to be available at the time the email is generated. > > I have asked about a generic email and so far haven't found > anything that "just works, every where, every time". > > John W. Colby > www.ColbyConsulting.com > > > Heenan, Lambert wrote: >> Me too! :-) >> >> Been logging errors since the beginning of time. My error logger also > emails the error information to me. I also use MS Tools every day. Don't > leave home without it. >> Lambert >> >> P.S. Welcome back John. >> -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com