Вызов процедуры Outlook с помощью VBScript
у меня есть процедура в Outlook, которая отправляет все сохраненные сообщения в .
Ниже код:
Public Sub SendMail()
Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder
Dim olDraft As Outlook.MAPIFolder
Dim strfoldername As String
Dim i As Integer
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(olFolderInbox)
strfoldername = olFolder.Parent
Set olDraft = olNS.Folders(strfoldername).Folders("Drafts")
If olDraft.Items.Count <> 0 Then
For i = olDraft.Items.Count To 1 Step -1
olDraft.Items.Item(i).Send
Next
End If
End Sub
выше код работает нормально.
вопрос:
я хочу использовать Task Scheduler
чтобы запустить эту процедуру в указанное время.
1. Где я помещу процедуру в Outlook, Module или ThisOutlookSession?
2. Я не хорош в vbscript
так я тоже не знаю, как ее назвать Процедура Мировоззрение. Я сделал вызов процедуры Excel, но Outlook не поддерживает .Run
собственность.
так что это не работает:
Dim olApp
Set olApp = CreateObject("Outlook.Application")
olApp.Run "ProcedureName"
Set olApp = Nothing
я также читал о Session.Logon
такой:
Dim olApp
Set olApp = CreateObject("Outlook.Application")
olApp.Session.Logon
olApp.ProcedureName
Set olApp = Nothing
но он выдает ошибку, говоря object ProcedureName
не поддерживается.
Надеюсь, кто-нибудь прольет свет.
устранение:
хорошо, я понял, что 2 работает, чтобы избежать или получить пройти это выскочить.
1-я: как указал Казджав.
предполагая, что у вас есть другая программа (например. Excel, VBScript), который включает отправку почты через Outlook
в порядок.
Вместо использования .Send
, просто .Save
почта.
Он будет сохранен в .
Затем, используя код ниже, отправьте черновик, который срабатывает с помощью Outlook Task Reminder
.
Option Explicit
Private WithEvents my_reminder As Outlook.Reminders
Private Sub Application_Reminder(ByVal Item As Object)
Dim myitem As TaskItem
If Item.Class = olTask Then 'This works the same as the next line but i prefer it since it automatically provides you the different item classes.
'If TypeName(Item) = "TaskItem" Then
Set my_reminder = Outlook.Reminders
Set myitem = Item
If myitem.Subject = "Send Draft" Then
Call SendMail
End If
End If
End Sub
Private Sub my_reminder_BeforeReminderShow(Cancel As Boolean)
Cancel = True
Set my_reminder = Nothing
End Sub
выше код пожары, когда Task Reminder
показывает с темой "отправить проект".
Но мы не хотим, чтобы он показывался, так как весь смысл заключается в том, чтобы просто вызвать SendMail
процедуры.
Поэтому мы добавили процедуру, которая Cancels
отображение напоминания, которое имеет olTask
класса или TaskItem
тип.
для этого Outlook
работает конечно.
Вы можете держать его работает 24 часа, как я сделал или, создать VBscript
это открывает его по расписанию через Task Scheduler
.
2-я: использовать API для программного нажатия на разрешить кнопка при появлении всплывающего окна безопасности.
Кредиты Сиддартруту за помощь.
Вот это ссылке, который поможет вам программно нажать на разрешить.
Конечно, вы должны немного подправить его.
3 ответов
Пробовал И Протестирован!
предполагая, что у вас всегда работает приложение Outlook (в соответствии с комментарием ниже вашего вопроса), Вы можете сделать то, что вам нужно, в следующих шагах:
добавьте новую задачу в Outlook, задайте тему: "запустить макрос YourMacroName" и установите время (плюс циклы), когда должен запускаться макрос.
-
перейдите в Редактор VBA, открыт
ThisOutlookSession module
и добавьте следующий код внутри (плюс см. комментарии внутри код):Private Sub Application_Reminder(ByVal Item As Object) If TypeName(Item) = "TaskItem" Then Dim myItem As TaskItem Set myItem = Item If myItem.Subject = "run macro YourMacroName" Then Call YourMacroName '...your macro name here End If End If End Sub
где я помещу процедуру в Outlook, Module или ThisOutlookSession?
ни. Вставьте ниже код в текстовый файл и сохраните его как . Затем вызовите этот файл VBS из Планировщик Задач как показано здесь
Dim olApp, olNS, olFolder, olDraft, strfoldername, i
Set olApp = GetObject(, "Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(6)
strfoldername = olFolder.Parent
Set olDraft = olNS.Folders(strfoldername).Folders("Drafts")
If olDraft.Items.Count <> 0 Then
For i = olDraft.Items.Count To 1 Step -1
olDraft.Items.Item(i).Send
Next
End If
Если вы используете Outlook Office ' 07 или новее, я обнаружил, что вы можете легко устранить всплывающее окно безопасности, упомянутое выше, при запуске сценария, выполнив следующие действия:
1) в Outlook 2007 Trust Center перейдите в раздел Безопасность макросов - выберите "Нет проверки безопасности макросов"
2) в центре доверия Outlook 2007 перейдите к Programatic Access - выберите "никогда не предупреждать меня о подозрительной деятельности.
конечно, это технически оставляет вас открытым для удаленного возможность для кого-то отправить вам по электронной почте какой-то вредоносный скрипт электронной почты или что-то в этом роде, я предполагаю. Я верю, что моя компания справилась, хотя и это работает для меня. Я могу использовать скрипты VBS в Outlook, Access, Excel для отправки писем с небезопасным всплывающим окном.
Другой Вариант: Если вы не хотите этого делать, еще один вариант, который хорошо работал для меня до этого здесь: http://www.dimastr.com/redemption/objects.htm
в основном перенаправление dll это не включает всплывающее окно. Он оставляет вашу другую безопасность по умолчанию на месте, и вы пишете \ вызываете свой VBA для него и sned mail без всплывающих окон безопасности.