修改后保存电子邮件

时间:2009-09-04 19:04:35

标签: ms-access email outlook save

我想修改代码,类似于以下内容:

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

从整个应用程序的各个按钮调用此代码。单击按钮时,将创建并保存新电子邮件。遗憾的是,电子邮件会在创建后立即保存,并且在发送之前...因此,如果对其进行了任何修改,它们将不会保存在已保存的版本中。

我可以做些什么来修改此代码,只有在发送后才能保存电子邮件?

如有必要,请随时提出任何后续问题,我会尽力回复。

谢谢!

罗伯特

2 个答案:

答案 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安全警告。

来自:http://wiki.lessthandot.com/index.php/Access_and_Email

答案 1 :(得分:0)

问题是新创建的项目没有EntryID。保存/发送此项目后,参考不再好。为什么可能是由于MAPI如何工作。 Remou建议使用ItemAdd事件来处理新添加到特殊文件夹“已​​发送邮件”的项目。通过此活动,您可以保存邮件。我看到的唯一问题是你怎么知道传递的项目是被发送的项目。您正在调用显示,允许用户在不发送的情况下预览,编辑,发送或关闭消息。因此,该项目可能不是您创建的邮件项目。要解决此问题,请在邮件项目中添加自定义属性。触发ItemAdd事件时,您可以检查自定义属性的传递项目,并在需要时保存。