如何将相同的回复邮件(模板保存在outlook中)发送给邮件发件人(to,cc)?

Posted

技术标签:

【中文标题】如何将相同的回复邮件(模板保存在outlook中)发送给邮件发件人(to,cc)?【英文标题】:How to send a same reply mail (template saved in outlook) to the mail sender (to, cc)? 【发布时间】:2012-02-07 14:53:46 【问题描述】:

我不断收到来自客户(不同客户)的电子邮件,以更新他们在数据库中的资产详细信息。处理完成后..我必须从他们的邮件中回复(包括抄送),如“资产详细信息已成功存储在数据库中”(我正在使用模板)使用 VBA。

Option Explicit


Public Sub ReplyToAll()

Dim oExp As Outlook.Explorer

'for selected mails in outlook

Dim oSM As mailItem

Dim oNM As mailItem

    On Error GoTo Err
    
    Set oExp = Outlook.Application.ActiveExplorer
    
    'Check if something is selected
    If oExp.Selection.Count > 0 Then
        
        'Get the first item selected

        Set oSM = ActiveExplorer.Selection.Item(1)
        
            'Create a Reply template

            Set oNM = oSM.ReplyAll
            
            With oNM
                
                'Change the subject
                .Subject = "RE: " & oSM.Subject
                
                'Change the body
                .Body = .Body & Chr(13) & Chr(13)
                
            'Display the new mail before sending it
                .Display
            
            End With
            
    End If
    
    Exit Sub
    
Err:
    
    MsgBox Err.Description, vbCritical
    
End Sub

第 3 节

Sub ReplyAll()
    Dim objOutlookObject As mailItem
    
For Each objOutlookObject In GetCurrentOutlookItems

    With objOutlookObject
    .ReplyAll.Display
'prob area code does not include the template saved in the location c ..throws some error

    .createitemtemplate("c:\car.jtm")
   End With
Next
End Sub
 
Function GetCurrentOutlookItems() As Collection
    Dim objApp As Outlook.Application
    Dim objItem As Object
    Dim colItems As New Collection
        
    Set objApp = CreateObject("Outlook.Application")
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            For Each objItem In objApp.ActiveExplorer.Selection
                colItems.Add objItem
            Next
        Case "Inspector"
            colItems.Add objApp.ActiveInspector.CurrentItem
        Case Else
            ' anything else will result in an error, which is
            ' why we have the error handler above
    End Select
    
    Set objApp = Nothing
    Set GetCurrentOutlookItems = colItems
End Function

【问题讨论】:

查看上个月的outlook-vba 问题。有几个解释了您的问题的不同方面:如何访问邮件项目、如何提取详细信息以及如何自动回复。您没有告诉我们有关您的数据库的任何信息,因此没有人可以帮助您。根据最近的答案构建一个宏,如果该宏不起作用,则返回一个特定的问题。 我搜索了我能找到相关的东西..你能建议任何帖子..如何从原始邮件发送回复,以便我可以开发我的宏.. 同意托尼的观点。您需要提出具体的问题并展示您的尝试。 上面我已经给出了代码和它显示的输出......以及我需要什么......谢谢你的建议:) 【参考方案1】:

很抱歉,我的评论太草率了; 500 个字符并没有给完整答案留下太多空间。

您的问题非常不清楚,因此很可能已关闭。当然,我看不出有人能回答它。这就是为什么尝试解决自己的问题并在必要时返回特定问题很重要的原因。

下面我提供了最近发布的链接,我相信这些链接可以帮助您入门。正如我在评论中所说,请查看最近的帖子。使用搜索工具。如果您寻找它们,这里有一些非常好的答案。

前两篇文章是我写的教程。前面的步骤是一样的,但是因为问题不太一样,后面的步骤就不同了。查看两者并挑选出与您相关的部分。其他帖子都包含您可能会发现有用的信息。

How to import the outlook mail data to excel

update excel sheet based on outlook mail

could anyone guide me in creating an outlook macro that does the following

send an email from excel 2007 vba using an outlook template set variables

using visual basic to access subfolder in inbox

vba outlook event moving email

针对提问者新信息的新部分

除了少量修改外,您问题中的代码取自NewMailEx Event 的 Microsoft 帮助文件。只有在您拥有正确的安装类型并且将其放置在正确的位置时,此代码才有效:

"NewMailEx 事件只会在 Microsoft Outlook 中为收到的邮件(例如 Microsoft Exchange Server)提供通知的邮箱中触发。此外,只有在 Outlook 正在运行时才会触发该事件。在换句话说,当 Outlook 未打开时,它不会为 收件箱 中收到的新项目触发。想要为在 Exchange 服务器电子邮件帐户上运行 Outlook 的客户访问这些项目的开发人员需要在服务器上实现他们的代码。但是,NewMailEx 事件将在所有设置中针对缓存 Exchange 模式触发:下载完整项目下载标题 ,以及下载标题,然后下载完整项目"

您的安装类型是否正确?你能把你的代码放在服务器上吗?即使这是您的宏最终版本的正确方法,我也不认为这是您学习 VBA 和 Outlook 时的正确方法。

你需要两件事:

    您希望编写的宏的详细说明和 更多了解VBA和Outlook。

我怀疑您是否可以创建详细的规范,因为您对 VBA 和 Outlook 的了解不够。但我们可以列出您需要了解的事项:

如何从 Outlook 写入数据库? 如何识别要记录的邮件项目?在您的示例中,您正在检查“Hello”主题并回复“Hi”。这对于第一次实验来说很好,但您需要确定真正的方法。是新发件人吗?邮件正文中是否有特定信息?人类是否必须识别此类邮件? 在您的示例中,“收件箱”下有一个“个人”文件夹。很多人似乎都有这种类型的文件夹结构,微软的示例倾向于使用这样的文件夹。我不。我有一个名为“!Home”的文件夹。在此之下,我有“保险”、“购物”、“金钱”的文件夹。在这些下,我有不同供应商的文件夹。处理完一条消息后,我将其移至适当的文件夹。回复将转到同一文件夹。这是我的系统,它对我有用。你的系统将是什么?例如,是为所有客户创建一个文件夹还是为每个客户创建一个文件夹?

以上是您的规范问题的初始列表,但它也是您需要了解的内容的初始列表。

也许您的老板希望您停止浪费时间并开始编写宏,但您还没有足够的知识来计划最终的宏。

从我的教程开始。前三个步骤是关于文件夹结构的。如果您有我所拥有的那种复杂的文件夹结构,这些步骤是必不可少的。接下来,我浏览了一个文件夹,其中显示了每个邮件项目中的选定信息。我有将消息正文写入光盘的步骤。我建议您阅读这两个教程并尝试我的代码。并非所有内容都会立即有用,但都是很好的背景信息。

你的数据库是什么?是 Access 还是 Excel?在我的教程和上面的其他链接中有一些关于写入 Excel 的帮助,您可以适应 Access。

我认为以上就足够了。慢慢来,它会开始变得有意义。我仍然记得我第一次尝试编写 Outlook 宏,所以我理解你的困惑。我保证它会变得清晰。祝你好运。

针对以下评论的新部分:

“你好,我已经尝试过..得到了我想要的..删除了我以前的代码..并尝试替换了新代码..现在几乎不需要你的帮助....有什么方法可以使用相同的格式就像我们单击 Outlook 中的全部回复按钮时一样。我的代码工作正常。问题是邮件的格式不同 .."

问题 1

.Body = .Body & Chr(13) & Chr(13)

您正在使用文本正文。我认为您想要 html 正文。试试:

.HTMLBody = .HTMLBody & Chr(13) & Chr(13)

问题 2

您不能以这种方式添加到 HTML 正文中。 HTML 正文将是:

<!doctype ...><html><head> ... </head><body> ... </body></html>

您必须将文本添加到正文的开头;也就是说,就在&lt;body&gt; 之后。如果您只是添加文本,您将接受发件人使用的任何样式、边距和颜色。以下代码在我尝试过的每封电子邮件中添加了一些看起来相同的文本。我的文本在一个带有单个单元格的表格中。该表格覆盖了页面的整个宽度。文本是白色背景上的蓝色。

Dim InsertStg As String
Dim Inx As Long
Dim Pos As Long

    'Change the body step 1: Create the string to be inserted
    InsertStg = "<table border=0 100%"" style=""Color: #0000FF""" & _
                " bgColor=#FFFFFF><tr><td><p>"
    For Inx = 1 To 10
      InsertStg = InsertStg & "Sentence " & Inx & " of first paragraph. "
    Next
    InsertStg = InsertStg & "</p><p>"
    For Inx = 1 To 10
      InsertStg = InsertStg & "Sentence " & Inx & " of second paragraph. "
    Next

    ' The following adds a signature at the bottom of the message.
    ' "font-family" gives a list of fonts to be tried.  If these are
    ' missing from your computer, use the names of fonts you do have.
    ' "serif" means that if none of the fonts exist any serif font
    ' that exists is to be used.
    InsertStg = InsertStg & "</p><p style = ""font-family: Mistral, " & _
                "Vivaldi, serif; font-size: 14px; color: " & _
                "rgb(127,0,127)"">John Smith<br>5 Acacia Avenue<br>"

    InsertStg = InsertStg & "</p></td></tr></table>"
    'Change the body step 2: Find insertion position just after <Body> element
    Pos = InStr(1, LCase(.HTMLBody), "<body")
    If Pos = 0 Then
      Call MsgBox("<Body> element not found in HTML body", vbCritical)
      Exit Sub
    End If
    Pos = InStr(Pos, .HTMLBody, ">")
    If Pos = 0 Then
      Call MsgBox("Terminating > for <Body> element not found in HTML body", vbCritical)
      Exit Sub
    End If
    'Change the body step 3: Insert my text into body
    .HTMLBody = Mid(.HTMLBody, 1, Pos) & InsertStg & Mid(.HTMLBody, Pos + 1)

【讨论】:

@Sathish Kothandam。我希望我在原始答案中添加的下一部分会有所帮助。 太棒了..你太棒了......我开始按照你的建议学习 Vba-outlook..谢谢我添加了第 2 节..告诉你我在做什么我需要什么..谢谢你的帮助......将带着对 VBA 的丰富知识回来......任何想法请在这篇文章中给出...... 你可以发布最好的网站来学习outlook-vba快速学习它 我不知道该建议什么。我从 Wrox 的 Excel 2002 VBA 中学习了 VBA,我发现它非常棒。但我在 1965 年学会了我的第一门编程语言,从那时起我已经不知道我用过多少。我使用 VBA 编辑器的帮助和实验学习了 Outlook VBA。我上面的第一个链接是我为上一个雇主的员工编写的教程,许多人认为这些教程很有帮助。 你好,我已经尝试过了..得到了我想要的..删除了我以前的代码..并尝试替换了新的代码..现在需要你的帮助很少..有什么办法使用相同的格式,就像我们单击 Outlook 中的全部回复按钮时一样。我的代码工作正常 ..prob 是邮件的格式不同..

以上是关于如何将相同的回复邮件(模板保存在outlook中)发送给邮件发件人(to,cc)?的主要内容,如果未能解决你的问题,请参考以下文章

outlook如何设置自动回复?

outlook如何设置自动回复 outlook设置自动回复操作步骤

怎样在outlook中设置自动回复

microsoft outlook怎么设置自动回复

Outlook如何将相同讨论的邮件放到一起

outlook如何设置自动回复