这是我到目前为止的代码:
Option Explicit
Call OpenOutlook()
Function OpenOutlook()
Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.Run("Outlook.exe")
Call SendEmail()
'I tried closing from here but this didn't work either
'ObjShell.Quit
End Function
Function SendEmail()
'Declaring variables used through out this function
Dim ObjOutlook
Dim objMail
Set ObjOutlook = CreateObject("Outlook.Application")
'CreateItem(0) opens a New Email window...MailItem
set objMail = ObjOutlook.CreateItem(0)
objMail.Display
'MailItem Options
objMail.to = "test@mail.com.com"
'objMail.cc = "test2@mail.com"
objMail.Subject = "Did it work!?"
objMail.Body = "If you got this email, my VBs test worked!"
'objMail.Attachments.Add("C:\Attachment\abc.jpg")
objMail.Send
'This didn't work either
'If objMail.Sent = True Then
'ObjOutlook.Quit
'End If
'Quit closes Outlook like I want but it doesn't wait for the email to send
'ObjOutlook.Quit
End Function
我尝试使用VBScript进行自动化:
我被困的地方:
首先,我无法打开Outlook。下面是我用来创建Outlook对象的代码:
Set ObjOutlook = CreateObject("Outlook.Application")
'CreateItem(0) opens a New Email window...MailItem
set objMail = ObjOutlook.CreateItem(0)
objMail.Display
我做了什么(甚至不确定这是否是正确的方法):
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.Run("Outlook.exe")
在调用ObjShell.Quit
函数后,为什么我不能SendEmail()
执行此操作?使用.Quit
会给我一个错误。
我只想在发送电子邮件后关闭Outlook应用程序,我无法弄清楚如何。
答案 0 :(得分:1)
MailItem
具有Sent
属性,用于指示邮件何时发送。试试这个:
...
objMail.Send
Do Until objMail.Sent
WScript.Sleep 500
Loop
' Safe to close...
ObjOutlook.Quit
答案 1 :(得分:0)
试试这个:
Option Explicit
Sub SendMail()
Dim outobj, mailobj
Set outobj = CreateObject("Outlook.Application")
Set mailobj = outobj.CreateItem(0)
With mailobj
.To = "user@test.com"
.Subject = "Testmail"
.Body = "If you got this email, my VBs test worked!"
.Send
End With
'Clear the memory
Set outobj = Nothing
Set mailobj = Nothing
End Sub
SendMail()
Msgbox("Done")
答案 2 :(得分:0)
首先,如果 用户 打开Outlook会怎么样?我认为任何用户都不会感谢您关闭Outlook的代码。在关闭Outlook之前,您可能希望检查Application.Explorers.Count
和Application.Inspectors.Count
都为零。如果没有打开的资源管理器或检查程序,即使您持有对Outlook对象的引用,也会自动存在最新版本的Outlook - 这样做是为了防止泄露引用的老年人行为不端的应用程序。为防止Outlook关闭,请对Explorer对象t进行引用(即使您没有显示它) - 调用Namespace.getDefaultFolder(olFolderInbox),然后保存对MAPIFolder.GetExplorer返回的对象的引用。
其次,在调用Send之后,使用Namespace,SyncObjects集合来检索第一个SyncObject。连接SyncObject.SyncEnd事件并调用SyncObject.Start。当SyncEnd事件触发时,您将完成所有操作。但我不认为你可以使用VB脚本中的事件...