2009-09-04 41 views
0

后,我有一些代码,类似于以下,我想修改:保存电子邮件修改

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 = “[email protected]” 
       .Subject = “Test Subject” 
       .HTMLBody = “Test Body” 
       .Display 
       .SaveAs “C:\Test.msg”, olMSG 
    End With 

末次

此代码是从整个应用程序的各种按钮调用。点击按钮时,会创建并保存新电子邮件。不幸的是,电子邮件一旦创建并在发送之前就会被保存下来......所以,如果对它进行了任何修改,它们将不会保存在保存的版本中。

我该怎么做才能修改这段代码,只保存发送的邮件一次?

随时随地问任何后续问题,我会尽我所能做出回应。

谢谢!

罗伯特

+0

描述您收到的错误,以便获得更好的答案。另外,什么“应用程序”? – AMissico 2009-09-04 19:57:00

+0

我的歉意,AMissico,这个代码是在MS Access开发的应用程序中。没有任何错误...它只是在创建电子邮件时立即保存,但我希望在发送电子邮件后保存它。 – Sesame 2009-09-04 20:06:35

回答

0

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

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

+0

这会在电子邮件发送后保存电子邮件吗?我在代码示例中看不到任何地方...... – Sesame 2009-09-04 20:07:37

+0

它利用Outlook事件。考虑类模块中的这两行:Set conFolder = oNS.GetDefaultFolder(olFolderSentMail) Set conItems = conFolder.Items – Fionnuala 2009-09-04 20:13:00

+0

代码在发送之后不会保存电子邮件,但它应该很容易添加一两行。 – Fionnuala 2009-09-04 20:14:57

相关问题