我在Outlook 2013中创建了一个userform,它基于Application_ItemSend操作打开。 userform只是要求网络驱动器位置保存正在发送的电子邮件的副本,检查该位置是否存在,然后将电子邮件的副本(作为.msg)保存到该位置,文件名中包含一些特定内容(日期,时间等)。 OK按钮上的代码如下(其中txtProjNum是用户表单上的文本框)。
Private Sub butOK_Click()
Dim oMail As Outlook.MailItem
Dim sPath As String
Dim dtDate As Date
Dim sName As String
' Set File Path
If Left(txtProjNum, 1) = "S" Then
sPath = "N:\Submissions\20" & Mid(txtProjNum, 2, 2) & "\" & txtProjNum & "\Email\Out\"
Else
sPath = "N:\Projects\20" & Left(txtProjNum, 2) & "\" & txtProjNum & "\Email\Out\"
End If
'Check sPath exists
If Dir(sPath, vbDirectory) = "" Then
MsgBox ("Folder doesn't exist, try again!")
txtProjNum.SetFocus
txtProjNum.SelStart = 0
txtProjNum.SelLength = Len(txtProjNum)
Exit Sub
End If
' Set File Name
Set oMail = ActiveInspector.CurrentItem
sName = oMail.Subject
ReplaceChars sName, "_"
dtDate = Now()
sName = Format(dtDate, "yy-mm-dd_hhnnss") & " " & sName & ".msg"
' Save Email
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olMSG
Unload Me
End Sub
这一切都运行正常,除了保存的电子邮件显然是电子邮件实际发送之前的版本。因此,如果您打开.msg文件,它将显示为未发送的草稿。 我希望保存的是已发送电子邮件的副本,因此包括发送的日期和时间等。
我知道我可以通过Items.ItemsAdd操作激活相同的代码,虽然我似乎无法使其工作,而对于一些较大的电子邮件,这可能会在实际后激活一段时间电子邮件已发送,这并不理想。
希望有一种方法可以将“草稿”电子邮件保存为“已发送”的电子邮件,或者在保存之前等待电子邮件发送。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您的Items.ItemAdd事件处理程序有什么问题?你可以修复"使用扩展MAPI或Redemption在ItemSend事件处理程序中创建的未发送消息,但最重要的是,在ItemSend事件处理程序中创建的MSG文件将缺少所有与发件人相关的属性。