【问题标题】:Change account settings in Outlook 2010 using VBA使用 VBA 在 Outlook 2010 中更改帐户设置
【发布时间】:2019-03-18 06:25:52
【问题描述】:

我有大量的转发电子邮件地址,它们都设置为转发到同一个电子邮件帐户。我发现这很有用,因为如果一家企业被黑客入侵并且我的电子邮件地址被盗,那么我只能更改该企业的电子邮件地址。例如,“amazon@mydomain.com”、“ebay@mydomain.com”和“facebook@mydomain.com”都会被转发到“mailbox@mydomain.com”。

当我想向企业发送电子邮件时,我必须进入 Outlook 并更改帐户设置,以将转发电子邮件地址作为电子邮件地址。我觉得这很麻烦。我知道我可以在写邮件时更改电子邮件的发件人,但随后收件人会看到“J Smith 代表 newaddress@mydomain.com”。我宁愿它只显示我在 from 字段中使用的地址,就像我进入帐户设置并在那里更改电子邮件地址一样。

最好设置一个宏,询问我想使用哪个电子邮件地址,然后为我发送电子邮件。我查看了如何在 VBA 中更改电子邮件帐户详细信息,但看起来这些详细信息都是只读的。有没有办法干净地更改我的“发件人”电子邮件地址?或者甚至在 VBA 中设置一个新的电子邮件帐户并在发送后立即将其删除?

【问题讨论】:

    标签: vba outlook-2010


    【解决方案1】:

    尝试创建一个带有组合框和按钮的用户表单。将所有可用帐户加载到组合框中,以便从中进行选择:

    Private Sub UserForm_Initialize()
    
    Dim acc As Account
    
    For Each acc In ThisOutlookSession.Session.Accounts
    
        Me.ComboBox1.AddItem acc.UserName
    Next acc
    End Sub
    

    然后在选择正确帐户的按钮上添加一些代码:

    Dim objApp As Outlook.Application
    Dim objMail As Outlook.MailItem
    
    Set objApp = ThisOutlookSession.Application
    
    Set objMail = objApp.CreateItem(olMailItem)
    
    With objMail
    
        .To = "lala@lala.com"
        .CC = ""
        .BCC = ""
        .Subject = "Test"
        .Body = "Test"
    
        Dim i As Integer
    
        For i = 1 To ThisOutlookSession.Session.Accounts.Count Step 1
    
            If ThisOutlookSession.Session.Accounts.Item(i).UserName = Me.ComboBox1.Value Then
    
                .SendUsingAccount = ThisOutlookSession.Session.Accounts.Item(i)
            End If
        Next i
    
        .Display
    End With
    

    可能在您创建新电子邮件时调用了一个事件,否则您必须添加一个按钮或其他东西来显示表单。

    【讨论】:

    • 感谢 gizlmeier,但恐怕这行不通。我有很多转发地址,我不想为每个地址设置 Outlook 帐户。我想要做的是更改现有帐户以包含我希望消息来自的电子邮件地址。然后当我向不同的商家发送消息时,我会再次更改相同的帐户,以此类推。
    【解决方案2】:

    我遇到了同样的问题,最终通过安装 Outlook Redemption 并使用以下脚本解决了它...

                    ' Redemption code below. Must install Redemption to work.
                    ' http://www.dimastr.com/redemption/faq.htm#14
    
                    Dim sItem, Tag
                    Set sItem = CreateObject("Redemption.SafeMailItem")
                    sItem.Item = oMailItem
                    Tag = sItem.GetIDsFromNames("{00020386-0000-0000-C000-000000000046}", "From")
                    Tag = Tag Or &H1E     'the type is PT_STRING8
                    sItem.Fields(Tag) = GetHashedReply(oMailItem)
                    Tag = sItem.GetIDsFromNames("{00020386-0000-0000-C000-000000000046}", "Sender")
                    Tag = Tag Or &H1E     'the type is PT_STRING8
                    sItem.Fields(Tag) = GetHashedReply(oMailItem)
                    sItem.Subject = sItem.Subject  'to trick Outlook into thinking that something has changed
                    sItem.Save
    

    ...其中 oMailItem 是一个普通的 Outlook MailItem,您可以使用 CreateItem() 获取或通过 ItemSend() 参数传递给您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2012-12-16
      • 2011-04-25
      相关资源
      最近更新 更多