我在Outlook中有一个程序,可以在Drafts
文件夹中发送所有已保存的邮件
以下是代码:
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
不擅长,所以我也不知道如何编写代码来调用Outlook程序。我已完成调用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
但它会引发错误,说不支持对象ProcedureName
希望有人可以解释一下。
SOLUTION:
好的,我已经找到了2个可以避免或者通过弹出窗口的工作。
第一个:就像KazJaw指出的那样。
假设您有另一个程序(例如Excel,VBScript),其中包括在程序中通过Outlook
发送邮件。
而不是使用.Send
,只需.Save
邮件
它将保存在Outlook's Draft
文件夹中
然后使用下面的代码,使用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
进行安排。
第二个:是在出现安全弹出窗口时使用API以编程方式单击允许按钮。
积分给SiddarthRout寻求帮助。
这是LINK,它将帮助您以编程方式单击允许按钮。
当然你需要调整一下。
答案 0 :(得分:4)
尝试过&amp;测试<!/强>
假设您的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
答案 1 :(得分:2)
我将把程序放在Outlook,Module或ThisOutlookSession中?
都不是。将以下代码粘贴到文本文件中,并将其另存为.VBS
文件。然后从任务计划程序调用此VBS文件,如图HERE
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
答案 2 :(得分:1)
如果您正在使用Outlook Office '07或更新版本,我发现您可以通过执行以下操作轻松消除上面提到的安全性弹出窗口:
1)在Outlook 2007信任中心中,转到宏安全性 - 选择“无安全检查宏”
2)在Outlook 2007信任中心,转到Programatic Access - 选择“从不警告我可疑的活动。”
当然,从技术上讲,你可以通过电子邮件向某人发送一些恶意电子邮件脚本或我认为具有某种性质的东西。我相信我的公司有管理,这对我有用。我可以在Outlook,Access,Excel中使用VBS脚本发送非安全弹出的电子邮件。
另一种选择: 如果您不想这样做,那么在此之前对我有用的另一个选项是: http://www.dimastr.com/redemption/objects.htm
基本上是一个不包含弹出窗口的dll重定向。它保留了你的其他默认安全性,你可以编写\调用你的VBA和没有安全弹出窗口的sned邮件。