通过 VBA 在 Outlook 中获取传入的电子邮件 [英] Getting the incoming email in outlook via VBA

查看:110
本文介绍了通过 VBA 在 Outlook 中获取传入的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 Outlook 将传入的消息保存到我的本地文件系统.我到目前为止的代码是:

I am trying to save incoming messages via outlook to my local file system. The code I have so far is:

Sub save_to_dir(Item As Outlook.MailItem)
 'the mail we want to process
Dim objItem As Outlook.MailItem
 'question for saving, use subject to save
Dim strPrompt As String, strname As String
 'variables for the replacement of illegal characters
Dim sreplace As String, mychar As Variant, strdate As String
 'put active mail in this object holder 

Set objItem = Outlook.ActiveExplorer.Selection.Item(1)


 'check if it's an email ... need to take a closer look cause
 'gives an error when something else (contact, task) is selected
 'because objItem is defined as a mailitem and code errors out
 'saving does work, if you take care that a mailitem is selected
 'before executing this code
 mypath = "c:\temp\outlook\"
If objItem.Class = olMail Then
    ' check on subject
    If objItem.Subject <> vbNullString Then
        strname = objItem.Subject
    Else
        strname = "No_Subject"
    End If
    strdate = objItem.ReceivedTime
     'define the character that will replace illegal characters
    sreplace = "_"
     'create an array to loop through illegal characters (saves lines)
    For Each mychar In Array("/", "\", ":", "?", Chr(34), "<", ">", "¦")
         'do the replacement for each character that's illegal
        strname = Replace(strname, mychar, sreplace)
        strdate = Replace(strdate, mychar, sreplace)
    Next mychar
     'Prompt the user for confirmation
    'strPrompt = "Are you sure you want to save the item?"
    'If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then
        objItem.SaveAs mypath & strname & "--" & strdate & ".msg", olMSG
    ' Else
    '    MsgBox "You chose not to save."
    'End If
End If
End Sub

此代码的问题在于,当您在 Outlook 中选择了一个项目时,电子邮件进入时它会使用所选项目而不是传入邮件

Problem with this code is that when you have an item selected in your outlook on the moment the email comes in it uses the selected item in stead of the incoming mail

如何获取收到的电子邮件?

How can i get the incoming email?

谢谢

调试此行后设置 objItem = Outlook.ActiveExplorer.Selection.Item(1)

After debugging this line Set objItem = Outlook.ActiveExplorer.Selection.Item(1)

我发现Outlook.ActiveExplorer.Selection.Item(1)已经收到了当前的电子邮件,但是当我在执行该行后查看 objItem 时objItem 的值是当前在 Outlook 中选择的电子邮件,而不是传入的电子邮件.

I found out that Outlook.ActiveExplorer.Selection.Item(1) has got the current email in it, but when i look into objItem after it executed the line the value of objItem is the email which is currently selected in outlook and not the incoming email.

有什么想法吗?

推荐答案

可以在这里找到一篇很好的参考文章:http://www.outlookcode.com/article.aspx?id=62

a good article to reference can be found here : http://www.outlookcode.com/article.aspx?id=62

我对示例一进行了如下调整:

I have adapted sample one as follows:

Sub save_to_dir_test1(mymail As MailItem)
Dim strID As String
Dim objMail As Outlook.MailItem

strID = mymail.EntryID
Set objMail = Application.Session.GetItemFromID(strID)
mypath = "c:\temp\outlook\"
strdate = objMail.ReceivedTime
If objMail.Subject <> vbNullString Then
        strname = objMail.Subject
   Else
        strname = "No_Subject"
End If
sreplace = "_"
'create an array to loop through illegal characters (saves lines)
For Each mychar In Array("/", "\", ":", "?", Chr(34), "<", ">", "¦")
'do the replacement for each character that's illegal
   strname = Replace(strname, mychar, sreplace)
   strdate = Replace(strdate, mychar, sreplace)
Next mychar
objMail.SaveAs mypath & strname & "--" & strdate & ".msg", olMSG

Set objMail = Nothing
End Sub

这篇关于通过 VBA 在 Outlook 中获取传入的电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆