Как отправить почту, когда внешний вид закрыт

У меня есть следующие строки кода. Он отлично работает, когда открывается внешний вид, но я хочу, чтобы он работал, несмотря на то, что перспективы закрыты. Я сохранил код в командной кнопке.

Private Sub btnSend_Click()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = GetObject("", Outlook.Application)
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
    .To = "[email protected]"
    .CC = ""
    .BCC = ""
    .Subject = "Test mail from Excel Sheet-OutLook Closed"
    .Body = "This is body of the mail"
    .Display
    .Send
    .ReadReceiptRequested = True
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

Я попробовал его с помощью методов GetObject и CreateObject. Если я запустил этот код после закрытия Outlook, он не будет показывать никаких ошибок, но он не отправит почту.

Следующие строки кода отправляют письма, но они находятся в очереди в outbox outlook. когда пользователь открывает внешний вид, тогда только они выходят из исходящих.

Private Sub btnSend_Click()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
    .To = "[email protected]"
    .CC = ""
    .BCC = ""
    .Subject = "Test mail from Excel Sheet-OutLook Closed"
    .Body = "This is body of the mail"
    .Display
    .Send
    .ReadReceiptRequested = True
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
1
nl ja de
Вместо GetObject ("", Outlook.Application) я использовал CreateObject (Outlook.Application), а остаточные строки - то же самое.
добавлено автор SaiKiran Mandhala, источник
Если я пишу так, то почта отправляется в очередь. Когда пользователь открывает внешний вид, тогда отправляются только письма. ``
добавлено автор SaiKiran Mandhala, источник
Sub btnSend_Click() Dim OutApp As Object Dim OutMail As Object Set OutApp = CreateObject («Outlook.Application») Установите OutMail = OutApp.CreateItem (0) В появившемся окне «Ошибка» Далее с OutMail .To = «[email protected]» .CC = "" .BCC = "" .Subject = "Проверить почту из Excel Sheet-OutLook Closed" .Body = "Это тело почты" .Display .Send .ReadReceiptRequested = True End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing End Sub `
добавлено автор SaiKiran Mandhala, источник
я не думаю, что это происходит из-за размера, почта не содержит много данных только одной строки информации.
добавлено автор SaiKiran Mandhala, источник
Привет, Сиддхарт, я обновил вопрос.
добавлено автор SaiKiran Mandhala, источник
Другое решение с технологией Microsoft CDO: stackoverflow.com/questions/26150041/…
добавлено автор v20100v, источник
Я не вижу код CreateObject? Это должно работать ...
добавлено автор Siddharth Rout, источник
Можете ли вы обновить свой вопрос с помощью вышеуказанного кода, который указан в комментарии?
добавлено автор Siddharth Rout, источник
Это может быть quering в Исходящие из-за размера, работает ли код, если вы не уничтожаете экземпляр OutLook?
добавлено автор brettdj, источник

2 ответы

Вы можете использовать команды оболочки для фактического открытия Outlook перед отправкой почты. Точно

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Sub OpenOutlook()
Dim ret As Long
 On Error GoTo aa
 ret = ShellExecute(Application.hwnd, vbNullString, "Outlook", vbNullString, "C:\", SW_SHOWNORMAL)
 If ret < 3 Then

 MsgBox "Outlook is not found.", vbCritical, "SN's Customised Solutions"
 End If
aa:
End Sub

сохраните это в отдельном модуле и вызовите модуль из кода, в котором вы отправляете почту. Часть, над которой я пытаюсь работать, заключается в том, как скрыть это, так что активация по-прежнему с excel

1
добавлено

Для Outlook 2013 это проблема с настройками Outlook, а не с кодом VBA.

  • Open OUTLOOK

  • Go To FILE -> OPTIONS -> ADVANCED

  • Scroll to 'Send and Receive' heading and click 'Send/Receive…' button

  • Under 'Setting for group 'All Accounts' ', ensure that 'Perform an automatic send/receive when exiting' is CHECKED

Это гарантирует, что все элементы в OUTLOOK «Исходящие» отправляются при закрытии Outlook. Это поставило вопрос для меня. Вероятно, похоже на другие версии Outlook.

0
добавлено