带有Access-Outlook宏的电子邮件中的自动签名

问题描述:

我正在尝试放置一个大容量电子邮件宏,它将遍历表,拉取电子邮件和收件人姓名。为了品牌的目的,我想发送每个电子邮件签名。带有Access-Outlook宏的电子邮件中的自动签名

我试图使用的MailItem对象,但我一直运行到2个问题:

  1. 。显示创建一个新的Outlook电子邮件和默认的签名进行填充。但是,.body将用strMessage中的文本字符串擦除签名。我在猜测它是因为我无法在同一个电子邮件对象中同时使用表格(包括图片等)和字符串?

  2. 我试过Microsoft Outlook 15和16对象库中的.send和.body方法。虽然两者都工作在16位,但似乎都不存在于15位。我总是给出“应用程序定义或对象定义的错误”。我找不到任何有关Outlook 15库的文档,有谁知道15和.send和.body有什么相同的方法?

    Dim OApp As Object, OMail As Object, signature As String 
    Set OApp = CreateObject("Outlook.Application") 
    Set OMail = OApp.CreateItem(0) 
    
    Dim rs As DAO.Recordset 
    Dim db As Database 
    Dim strSQL As String, strFirstName As String, strLastName As String, strFullName As String, strSubject As String, strMessage As String 
    
    Set db = CurrentDb 
    
    strSQL = "SELECT Email, FirstName, LastName FROM PersonsT WHERE [PersonsT]![Attended]=True" 
    
    Set rs = db.OpenRecordset(strSQL) 
    
    Do While Not rs.EOF 
    strFirstName = rs.Fields("FirstName") 
    strLastName = rs.Fields("LastName") 
    strFullName = rs.Fields("FirstName") & " " & rs.Fields("LastName") 
    
    strSubject = "Greetings" 
    strMessage = "Hello " & strFullName & vbNewLine & vbCrLf & " Let me be the first to congratulate you on registering in this program" 
    
    With OMail 
    .Display 
    End With 
    
    With OMail   
        .to = rs![Email] 
        .Subject = strSubject 
        .body = strMessage 
        .send  
    End With 
    
    rs.MoveNext 
        Loop 
    
         Set OMail = Nothing 
         Set OApp = Nothing 
    
         rs.Close 
         Set rs = Nothing 
    
+0

尝试'。体= strMessage&vbCrLf&.body' –

+0

如果您的Outlook有多个签名文件可以选择,创建的Word应用程序,使用'oWordApp.EmailOptions.EmailSignature.NewMessageSignature = '改变签名和/或恢复原始签名。在Outlook应用程序发送之前执行此操作将使用可以在表格中显示图像和内容的html签名。 – PatricK

+0

@TimWilliams没有运气。我试着隔离.body,它也产生了一个应用程序定义或对象定义的错误。 – enmasse

考虑使用的MailItem的GetInspector()财产事先检索签名文​​本,然后串联到邮件正文。渲染可能不同,所以尝试.HTMLBody超过.Body在两条线:

... 
Dim signature As String 

oMail.GetInspector 
signature = oMail.Body 

With OMail   
    .Recipients.Add rs![Email] 
    .Subject = strSubject 
    .Body = strMessage & signature 
    .Display  
End With 
+0

你好。此代码在我的机器上使用库16工作,但在15上,它仍然产生应用程序定义或对象定义的错误。 – enmasse

+0

Outlook 2013对应于版本15,Outlook 2016对应版本16.您是否有双重安装的Outlook版本?我只有2013年安装,所以我向你保证这在15年工作。 – Parfait

+0

我有Office 2016安装在另一台机器上,并与我的主机与Office 2013并行测试代码。是否.send函数适用于您的2013年机器还? – enmasse

这适用于各种前景的口味,而使用后期绑定,以便版本/引用不应该是一个问题。

Dim OutApp   As Object 
Dim OutMail   As Object 
Dim signature  As String 

Set OutApp = CreateObject("Outlook.Application") 
OutApp.Session.Logon 
Set OutMail = OutApp.CreateItem(0) 
On Error Resume Next 
With OutMail        ' This creates a blank email and captures the users default signature. 
    .BodyFormat = 2      'olFormatHTML 
    .Display 
End With 

signature = OutMail.HTMLBody 
+0

对不起,迟到的回复,我完全错过了这个回应。我在这个宏的早期版本中使用了Outlook应用程序,但发现设置任何类型的.body(我相信这会以纯文本输入)会擦除签名。我认为这是因为签名中有表格。 – enmasse