views:

3300

answers:

5

I would like to send email from Microsoft Access unattended using VBA. I understand that the built-in method “SendObject” uses MAPI meaning security prompts and something like Outlook configured. Since I want to use the Task Scheduler to kick off different reports, I’m leaning away from MAPI and would prefer some other solution. Not an application for shipping but just in-house. Ideas?

+1  A: 

You'll need an SMTP server that will allow you to send email. Then you need to use the CDO message object.

Jeff O
I thought CDO came with IIS - I use it on the client? For the SMTP server would I be able to use something like gmail?
Knox
Yes, use it in the VBA. I haven't found anything that limits this to IIS or even Exchange, but you may have issues with your provider. I don't know enough about gmail. I'm guessing if they let you connect with Outlook through SMTP (I know you don't want to do this with your application, but it would be a good connection test.).
Jeff O
I was really using gmail as an example; I think they use an unusual port or something. I'll give CDO a try.
Knox
+2  A: 

You might find Tony Toews's Access EMail FAQ handy.

David-W-Fenton
+2  A: 

Here's the test code that worked for me with CDO and gmail.

Sub mtest()

Dim cdoConfig
Dim msgOne

Set cdoConfig = CreateObject("CDO.Configuration")
With cdoConfig.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "gmailname"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yourpw"

.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

.Update
End With

Set msgOne = CreateObject("CDO.Message")
Set msgOne.Configuration = cdoConfig
msgOne.To = "[email protected]"
msgOne.From = "[email protected]"
msgOne.Subject = "Test email"
msgOne.TextBody = "It works just fine"
msgOne.send

End Sub

Knox
A: 
Ronnie
I didn't want to use Outlook because this will be running unattended possibly in an account with no outlook installed.
Knox
A: 

Outlook Redemption is free and very widely used: http://www.dimastr.com/redemption/

It is very very close to the original outlook object model, so the learning curve is cake:)

Oorang
Thanks for the suggestion.
Knox