электронная почта с использованием Access и VBA без MAPI

Я хочу отправлять электронную почту из Microsoft Access без присмотра с помощью VBA. Я понимаю, что встроенный метод «SendObject» использует MAPI, что означает запросы безопасности и что-то вроде настроенного Outlook. Поскольку я хочу использовать планировщик задач для запуска различных отчетов, я отклоняюсь от MAPI и предпочитаю какое-то другое решение. Не заявка на отгрузку, а собственноручно. Идеи?


person Knox    schedule 20.04.2009    source источник


Ответы (5)


Вам понадобится SMTP-сервер, который позволит вам отправлять электронную почту. Затем вам нужно использовать объект сообщения CDO.

person JeffO    schedule 20.04.2009
comment
Я думал, что CDO идет с IIS - я использую его на клиенте? Могу ли я использовать что-то вроде Gmail для SMTP-сервера? - person Knox; 20.04.2009
comment
Да, используйте его в VBA. Я не нашел ничего, что ограничивало бы это IIS или даже Exchange, но у вас могут быть проблемы с вашим провайдером. Я недостаточно знаю о Gmail. Я предполагаю, позволят ли они вам подключиться к Outlook через SMTP (я знаю, что вы не хотите делать это со своим приложением, но это было бы хорошим тестом подключения). - person JeffO; 21.04.2009
comment
Я действительно использовал Gmail в качестве примера; Я думаю, они используют необычный порт или что-то в этом роде. Я попробую CDO. - person Knox; 21.04.2009

Вот тестовый код, который у меня работал с CDO и 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
person Knox    schedule 21.04.2009
comment
искал код, который отлично работает с Gmail. Я испортил конфигурацию smtpauthenticate. Благодарность! - person killerbarney; 26.11.2011

Возможно, вам пригодится Доступ к часто задаваемым вопросам по электронной почте Тони Тэйвса.

person David-W-Fenton    schedule 20.04.2009
comment
Я проголосовал против, потому что ответ был заглушкой, а страница, на которую вы ссылаетесь, имеет нерабочий код и некоторые советы, которые не нацелены на решения (даже в 2009 году). - person Henrik Erlandsson; 15.03.2019

Я делаю это так, обратите внимание, у вас должен быть установлен Outlook, чтобы он работал.


Sub btnSendEmail_Click()
    Dim OutApp As Object
    Dim OutMail As Object

    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    strBody = "<html><head></head><body>"
    strBody = strBody & "Your message goes here"
    strBody = strBody & "</body></html>"

    Set OutMail = OutApp.CreateItem(0)

    OutMail.To = "[email protected]"
    OutMail.BCC = "[email protected]"
    OutMail.Subject = "Test message"
    OutMail.HTMLBody = strBody


    OutMail.Send  'Send | Display
    Set OutMail = Nothing
End Sub
person Ron    schedule 21.04.2009
comment
Я не хотел использовать Outlook, потому что он будет работать автоматически, возможно, в учетной записи без установленного Outlook. - person Knox; 22.04.2009

Outlook Redemption является бесплатным и очень широко используемым: http://www.dimastr.com/redemption/

Это очень близко к исходной объектной модели Outlook, так что кривая обучения проста :)

person Oorang    schedule 11.06.2009