Ms access 修改后保存电子邮件

Ms access 修改后保存电子邮件,ms-access,email,outlook,save,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

我有类似于下面的代码,我想修改:

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
端接头

此代码在整个应用程序中通过各种按钮调用。单击按钮时,将创建并保存一封新电子邮件。不幸的是,电子邮件在创建后和发送前会立即保存。。。因此,如果对其进行任何修改,它们将不在保存的版本中

如何修改此代码以仅在电子邮件发送后保存

如有必要,请随时提出任何后续问题,我将尽我所能予以答复

谢谢


Robert

您可以通过Access使用Outlook事件。对于本例,您需要一个名为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安全警告


From:

问题是新创建的项没有EntryID。保存/发送此项目后,参考不再有效。原因可能与MAPI的工作方式有关。Remou建议使用ItemAdd事件来处理新添加到特殊文件夹“Sent Items”中的项目。通过此事件,您可以保存消息。我看到的唯一问题是,您如何知道传递的项目是已发送的项目。您正在调用Display,它允许用户预览、编辑、发送或关闭消息,而无需发送。因此,该项目可能不是您创建的邮件项目。若要解决此问题,请向邮件项目添加自定义属性。触发ItemAdd事件时,可以检查传递的项的自定义属性,并根据需要进行保存

描述您收到的错误,以便获得更好的答案。还有,什么“应用程序”?对不起,AMissico,这段代码在MS Access开发的应用程序中。没有任何错误。。。它只是在创建电子邮件时立即保存,但我希望它在电子邮件发送后保存。这会在电子邮件发送后保存吗?我在你的代码示例中没有看到……它利用了Outlook事件。考虑类模块中的这两行:SET CONFLUSS= ONS。GetDefaultFolder(OLFultStordMemail)SET CONTATIONS CONFALLDOR.ITEMS.代码将不会在发送邮件后保存,但应该很容易添加一两行。