通过Outlook上的适当帐户发送VBA生成的个性化电子邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Outlook上的适当帐户发送VBA生成的个性化电子邮件相关的知识,希望对你有一定的参考价值。
我在学校教书。发送作业时,我会创建一个个性化的文件,希望每个学生都可以处理。
我使用VBA和Excel生成个性化文件。
我将Outlook置于“脱机工作”模式,因此在将Outlook重新联机之前,我可以确保电子邮件具有正确的附件并且是正确的。然后,我通常会点击“发送/接收所有文件夹”按钮,以便它们在我观看时立即消失。
这很好用。我为Outlook配置了我的工作电子邮件。
但是,由于冠状病毒,也是因为夏天,我正在家里工作。
在家里的Outlook上(我正在Windows 10计算机上使用已安装的应用程序),我配置了2个帐户。
帐户1是来自个人域的个人电子邮件。
帐户2是我的工作电子邮件帐户。
我想要的是像在工作中一样生成电子邮件,并让它们进入我的工作帐户中。然后,我将从那里发送它们。
但是,无论我做什么,他们都会进入我的个人帐户。我不希望学生从无法识别的发件人那里收到电子邮件。我也不希望他们用他们的问题回复这些电子邮件。
这是我运行的用于创建电子邮件的代码:
Sub makemail()
Dim strLocation As String
Dim OutApp As Object
Dim OutMail As Object
Dim OutAccount As Object
Range("a1").Activate
eaddy = ActiveCell.Offset(0, 4).Value 'student's e-mail address in a worksheet
IndivFile = ActiveCell.Offset(0, 8).Value 'this is an identifier for the student's individual file
LastName = ActiveCell.Offset(0, 1).Value ' student's last name
Do Until ActiveCell.Value = ""
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Set OutAccount = OutApp.Session.Accounts.Item(1)
On Error Resume Next
With OutMail
.To = eaddy
.CC = ""
.BCC = ""
.Subject = LastName & " (text that describes the assignment)"
.Body = "(body of message)"
strLocation = "(location of the individual attachments" & IndivFile & ".xlsx"
.Attachments.Add (strLocation)
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Set OutAccount = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ActiveCell.Offset(1, 0).Activate
eaddy = ActiveCell.Offset(0, 4).Value
IndivFile = ActiveCell.Offset(0, 8).Value
LastName = ActiveCell.Offset(0, 1).Value
Loop
End Sub
无论我做什么,它只会将生成的电子邮件转储到Outlook中的#1帐户的存储桶中:我的个人帐户。
我已尝试替换
.Send
with
.SendUsingAccount = OutApp.Session.Accounts.Item(2)
将任何内容放入括号(包括0或1)将意味着我在两个存储桶中都看不到输出。 (不知道电子邮件是否生成过。它们可能位于我未曾浏览过的某个目录中。)
所以,我刚刚生成了所有电子邮件,它们显示在我的个人帐户的存储桶中。
我全部选中了它们,然后将其放入工作帐户的存储桶中。
他们不会发送。我单击“发送/接收”,它们将无处可去。
但是,如果我分别打开每个电子邮件并单击电子邮件中的“发送”按钮?他们去。我在发送的文件夹中看到它们。
我对Outlook不太了解。只是到目前为止,它一直为此起作用。我想知道这是否是电子邮件中某种不匹配的证书问题?但是,如果真是这样,为什么他们不批量购买,但是如果在打开电子邮件的情况下单独发送的话,它们会散去?
((我刚刚测试过。如果电子邮件被标记为已读或未读,则没有区别。)
我的确将工作电子邮件设置为Outlook中的主要电子邮件(文件>帐户设置>将一个帐户指定为主要帐户。
所以,这是我的基本问题:
- 是否有办法将其放入第二个帐户的支出(工作)?请记住,
.SendUsingAccount = OutApp.Session.Accounts.Item(2)
不起作用。完全没有。
如果我做不到,是否有办法更改我的电子邮件帐户,所以工作是#1?除了按特定顺序删除并重新安装以外?我DID进入并把工作电子邮件设为我的主要电子邮件。
有人知道为什么他们不发送一个桶的原因(因为它们是从另一个桶中拖放的,但是如果您单独打开它们并发送,它们会发送?
似乎您只需要在Outlook中设置/更改默认帐户。
请参阅How To Set An Email Account As The Default Account In Outlook?以获取更多信息。
[此外,您可以使用Outlook项目的SendUsingAccount属性,该属性设置一个Account
对象,该对象表示要发送MailItem的帐户。 SendUsingAccount
属性可用于指定调用MailItem
方法时应用于发送Send
的帐户。
Sub SendEmailFromAccount(ByVal application As Outlook.Application, _
ByVal subject As String, ByVal body As String, ByVal recipients As String, ByVal smtpAddress As String)
' Create a new MailItem and set the To, Subject and Body properties.
Dim newMail As Outlook.MailItem = DirectCast(application.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
newMail.To = recipients
newMail.Subject = subject
newMail.Body = body
' Retrieve the account that has the specific SMTP address.
Dim account As Outlook.Account = GetAccountForEmailAddress(application, smtpAddress)
' Use this account to send the email.
newMail.SendUsingAccount = account
newMail.Send()
End Sub
Function GetAccountForEmailAddress(ByVal application As Outlook.Application, ByVal smtpAddress As String) As Outlook.Account
' Loop over the Accounts collection of the current Outlook session.
Dim accounts As Outlook.Accounts = application.Session.Accounts
Dim account As Outlook.Account
For Each account In accounts
' When the email address matches, return the account.
If account.SmtpAddress = smtpAddress Then
Return account
End If
Next
End Function
以上是关于通过Outlook上的适当帐户发送VBA生成的个性化电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何通过Excel VBA和Outlook实现自动发送邮件功能
如何更改通过 Excel VBA 代码通过 Outlook 发送的电子邮件的字体格式?
使用 Excel VBA 以编程方式禁止 Outlook 电子邮件发送警告消息