我想修改代码,类似于以下内容:
Sub SendEmail()
Dim myOlApp As Outlook.Application
Dim myItem As Outlook.MailItem
'Create an Outlook application object
Set myOlApp = New Outlook.Application
'Create a new MailItem form
Set myItem = myOlApp.CreateItem(olMailItem)
'Build and display item
With myItem
.To = “test@test.com”
.Subject = “Test Subject”
.HTMLBody = “Test Body”
.Display
.SaveAs “C:\Test.msg”, olMSG
End With
End Sub
从整个应用程序的各个按钮调用此代码。单击按钮时,将创建并保存新电子邮件。遗憾的是,电子邮件会在创建后立即保存,并且在发送之前...因此,如果对其进行了任何修改,它们将不会保存在已保存的版本中。
我可以做些什么来修改此代码,只有在发送后才能保存电子邮件?
如有必要,请随时提出任何后续问题,我会尽力回复。
谢谢!
罗伯特答案 0 :(得分:2)
您可以将Outlook事件与Access一起使用。对于此示例,您将需要一个名为clsOlMail的类模块,其代码如下:
''Requires reference to the Microsoft Outlook x.x Object Library
Dim WithEvents conItems As Outlook.Items
Private Sub Class_Initialize()
Set oApp = Outlook.Application
Set oNS = oApp.GetNamespace("MAPI")
Set conFolder = oNS.GetDefaultFolder(olFolderSentMail)
Set conItems = conFolder.Items
End Sub
Private Sub Class_Terminate()
Set conItems = Nothing
Set conFolder = Nothing
Set oNS = Nothing
Set oApp = Nothing
End Sub
Sub ConItems_ItemAdd(ByVal Item As Object)
Dim frm As Form
Set frm = Forms!frmEmailDetails
frm.txtSenderName = Item.SenderName
frm.txtSentOn = Item.SentOn
frm.txtTo = Item.To
frm.txtCreationTime = Item.CreationTime
frm.txtBCC = Item.BCC
frm.txtCC = Item.CC
frm.txtSentOnBehalfOfName = Item.SentOnBehalfOfName
frm.txtSubject = Item.Subject
frm.txtBody = Item.Body
End Sub
您还需要一个名为frmEmailDetails的表单,其中包含以下文本框:
txtSenderName,txtSentOn,txtTo,txtCreationTime,txtBCC,txtCC,txtSentOnBehalfOfName,txtSubject,txtBody
这段代码:
Private oEvent As clsOLMail
''Requires reference to Microsoft Outlook x.x Object Library
Public oApp As Outlook.Application
Public oNS As Outlook.NameSpace
Public conFolder As Outlook.MAPIFolder
Private Sub Form_Open(Cancel As Integer)
Set oEvent = New clsOlMail
End Sub
打开表单并通过Outlook发送电子邮件,您可以使用上面显示的示例之一。表单字段应填写已发送电子邮件中的相关详细信息。您可能会收到Outlook安全警告。
答案 1 :(得分:0)
问题是新创建的项目没有EntryID。保存/发送此项目后,参考不再好。为什么可能是由于MAPI如何工作。 Remou建议使用ItemAdd事件来处理新添加到特殊文件夹“已发送邮件”的项目。通过此活动,您可以保存邮件。我看到的唯一问题是你怎么知道传递的项目是被发送的项目。您正在调用显示,允许用户在不发送的情况下预览,编辑,发送或关闭消息。因此,该项目可能不是您创建的邮件项目。要解决此问题,请在邮件项目中添加自定义属性。触发ItemAdd事件时,您可以检查自定义属性的传递项目,并在需要时保存。