1

当使用 VBA 在 Outlook 2010 中加载项目时,我正在尝试更改 From 帐户。我有两个帐户,一个 gmail 帐户和一个 POP3。

回复、全部回复和转发 Outlook 时默认使用接收电子邮件的帐户。如果我通过 Gmail 收到电子邮件,我想使用 POP3 帐户进行回复。即使我的默认帐户是 POP3 帐户,Outlook 也会将其更改为 Gmail。

这就是我到目前为止所拥有的。不幸的是我收到错误:运行时错误'-6936698555(d6a70005)':您没有执行此操作的适当权限。

Private Sub Application_ItemLoad(ByVal Item As Object)
    Set myObj = GetCurrentItem()
    If TypeName(myObj) = "MailItem" Then
        Set OutApp = CreateObject("Outlook.Application")
        Set oMail = OutApp.CreateItem(olMailItem)
        Dim oAccount As Outlook.Account

        Set oMail = myObj

        oMail.SendUsingAccount = oMail.SendUsingAccount.Session.Accounts.Item(1)
    End If
End Sub


Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select

    Set objApp = Nothing
End Function

我是否通过在项目加载时以正确的方式来解决这个问题?为什么我没有更改发件人的权限?是因为VB没有创建电子邮件吗?

4

2 回答 2

1

我参加这个聚会迟到了,但我试图做一些非常相似的事情并遇到了你的问题/代码。我设法让它工作。

问题是 GetCurrentItem() 正在从您的收件箱(或任何地方)返回邮件项目。您需要修改的是通过点击“回复”创建的新消息。

我拿走了你的代码并修改了它。我添加了一个回复事件,它更改了 response 的 SendUsingAccount属性。ItemLoad 事件检查当前邮件项的“To”属性以决定是否设置回复事件。

Public WithEvents SecondAcctMsg As MailItem

Private Sub Application_ItemLoad(ByVal Item As Object)
    Set myObj = GetCurrentItem()
    If TypeName(myObj) = "MailItem" Then
        Select Case myObj.To
            Case "<relevant email address>"

                Set SecondAcctMsg = myObj

        End Select
    End If
End Sub


Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"

            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"

            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select

    Set objApp = Nothing
End Function

Private Sub SecondAcctMsg _Reply(ByVal Response As Object, Cancel As Boolean)

   ' Change Accounts index to relevant account
    Response.SendUsingAccount = Application.Session.Accounts(2)

End Sub
于 2014-03-19T17:42:37.347 回答
0

我认为应该使用以下设置 mailitem:

Set oMail = OutApp.CreateItem(olMailItem)

并设置应用程序应使用以下方法完成:

Set OutApp = CreateObject("Outlook.Application")

如果 Outlook 未打开或以下如果是:

Set OutApp = GetObject(, "Outlook.Application")

我没有使用 SendUsingAccount,我猜您需要将该帐户设置为您的备用帐户。我用过 SendOnBehalfOfName 也许这会起作用,例如

oMail.SentOnBehalfOfName = "Your POP3 account name"
oMail.Send
于 2013-08-20T19:19:50.503 回答