Max Sherman
max at sherman.org.uk
Wed Aug 1 07:29:35 CDT 2007
Hi Rocky, I use CDO which does not need any client system. Code below, as you can see I hold the parameters in a table, but have put the defaults as comments on the lines. Got bits from the web some time ago and heavily modified it. I have been using it now for some time and it works perfectly everytime. No Outlook, etc, just an account that you can send mail through. Watch for word wraps. Max Sherman Option Compare Database Option Explicit Public Function pfEmailByCDO(strSubject As String, strBody As String, _ strTo As String, strCC As String, strBCC As String, bDisplay As Boolean, Optional strAttachment As String) On Error GoTo errhandler Dim gdatStarted As Date, gdatFinished As Date gdatStarted = Now Dim strFrom As String ', strAttachment As String Dim varPort As Variant, varSendVia As Variant, varAuthenticate As Variant Dim varServerPort As Variant, varSecs2Wait As Variant, sql2 As String Dim strUserName As String, strPwd As String, strUseSSL As String Dim sql As String Const conErr1 As String = "The server rejected one or more recipient addresses. The server response was: 550 " Const conErr2 As String = "The server rejected one or more recipient addresses. The server response was: 501 bad address syntax: <" Const ConErrX As String = "The transport failed to connect to the server" Dim strErr As String, strDomain As String, strEmailMaxail As String, strFind As String Call pfLogEvent("Function: 'pfEmailByCDO' - Started") ' for testing, ignore rst2 and just the test table Dim objMessage, SendTo Dim dbs As DAO.Database, rstParams As DAO.Recordset Dim rstErr As DAO.Recordset Set dbs = CurrentDb ' Set rstErr = Me.RecordsetClone gbSendEmails = True If gbSendEmails = False Then Call pfLogEvent("Function: 'pfEmailByCDO' - Not Sent gbSendEmails set to False") GoTo exithere End If ' get the params for this particular mailing Set rstParams = dbs.OpenRecordset("Select * from tblEmailCDOParams Where ParamsID=18") With rstParams strFrom = !objMessageName & <myname at mydomain.com> make sure you have it in brackets 'strSubject = !objMessageSubject ' your subject 'strBody = !objMessageTextBody ' your text 'strAttachment = Nz(!objMessageAddAttachment, "") ' path for attachment on drive strUserName = !objMessageConfigurationFieldsItemUserName ' pop account name eg pop.gmail.com strPwd = "xxxxxxxx" ' password for the pop account strUseSSL = !objMessageConfigurationFieldsItemUseSSL 'False varPort = !cdoSendUsingPort'2 varSendVia = !objMessageConfigurationFieldsItemDNSorIP ' eg smtp.gmail.com varServerPort = !objMessageConfigurationFieldsItemPort '25 for me varAuthenticate = !cdoBasic '1 varSecs2Wait = !objMessageConfigurationFieldsItemSec2Wait '60 End With Set objMessage = CreateObject("CDO.Message") ' Create the message object. objMessage.from = "server at yourdoma.org" ' or whatever you want the recipient to see objMessage.To = strTo 'email address objMessage.cc = strCC 'email address objMessage.bcc = strBCC 'email address objMessage.Subject = strSubject' your subject ' Now for the Message Options Part. objMessage.TextBody = strBody objMessage.AddAttachment strAttachment objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/sendusing") = varPort objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/smtpserver") = varSendVia objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/smtpauthenticate") = varAuthenticate objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/sendusername") = strUserName objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/sendpassword") = strPwd objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/smtpserverport") = varServerPort objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/smtpusessl") = strUseSSL objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/confi guration/smtpconnectiontimeout") = varSecs2Wait objMessage.Configuration.Fields.Update ' Update configuration If bDisplay Then MsgBox objMessage.GetStream.ReadText ' Use to show the message. End If objMessage.Send ' Send the message. DoEvents Call pfLogEvent("Function: 'pfEmailByCDO' - Completed OK") exithere: Set dbs = Nothing: Set rstErr = Nothing Exit Function errhandler: strErr = "pfEmailByCDO - Send Errors " & Err.Description If InStr(strErr, ConErrX) > 0 Then strErr = strErr & " No Email Sent" End If Debug.Print strErr Call pfLogEvent("Function: 'pfEmailByCDO' - SEND ERRORS " & strErr) GoTo exithere End Function -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin at Beach Access Software Sent: Wednesday, August 01, 2007 12:49 PM To: 'Access Developers discussion and problem solving' Subject: [AccessD] SMTP or Outlook? Dear List: I am developing a legal matter tracking app for a client. One of the features is to email reports on a regular schedule to clients regarding the various matters being handled. We can go with either Outlook or SMTP. There's already some SMTP code in the app (legacy app) and I've got some code for Outlook. Outlook, of course, has the disadvantage of thae nag messages requiring you to allow access to Outlook when sending from another app. I get around this by using Click Yes but that has a security problem, obviously, in that malware could then use Outlook. BTW, this isn't just for in-house use - he intends to make this a product. Any opinions? Is there a third alternative? MTIA Rocky -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com