Excel 如何查找用户Outlook默认签名的文件名?

Excel 如何查找用户Outlook默认签名的文件名?,excel,vba,outlook,Excel,Vba,Outlook,如果这是一个愚蠢的学生问题,我道歉。我第一次把脚趾浸在水里,所以请温柔一点 我编写了一个excel加载项,用于使用Outlook发送电子邮件。我设法想出了一种添加用户签名的方法,效果很好。不过美中不足的是,他们更改了签名的名称 如何从outlook获取用户的默认签名 Dim salutation As String, ourRef As String, amount As String, customerName As String, yourRef As String Dim totalAmo

如果这是一个愚蠢的学生问题,我道歉。我第一次把脚趾浸在水里,所以请温柔一点

我编写了一个excel加载项,用于使用Outlook发送电子邮件。我设法想出了一种添加用户签名的方法,效果很好。不过美中不足的是,他们更改了签名的名称

如何从outlook获取用户的默认签名

Dim salutation As String, ourRef As String, amount As String, customerName As String, yourRef As String
Dim totalAmount As Double

' salutation
salutation = IIf(Time < 0.5, "Good morning", "Good afternoon")

' opening text
totalAmount = 0
For i = 0 To UBound(Table, 1)
    totalAmount = totalAmount + Table(i, 3)
Next i

body = "<!DOCTYPE html><html><body>"
body = body & "<div style=""font-family:'Segoe UI', Calibri, Arial, Helvetica; font-size: 14px; max-width: 768px;"">"
If bulk = True Then
    body = body & salutation & "<br /><br />We have sent you a bulk payment totaling " _
    & Format(totalAmount, "£##,##0.00") & ", to be credited to the following accounts: <br /><br />"
Else
    body = body & salutation & "<br /><br />We have sent you the following payments: <br /><br />"
End If

' table header
body = body & "<style type='text/css'>.tftable {font-size:12px;color:#333333;width:100%;" _
    & "border-width: 1px;border-color: #9dcc7a;border-collapse: collapse;}.tftable th {font-size:12px;" _
    & "background-color:#A99D36;border-width: 1px;padding: 8px;border-style: solid;border-color: " _
    & "#9dcc7a;text-align:left;}.tftable tr {background-color:#F0EDCF;}.tftable td {font-size:12px;" _
    & "border-width: 1px;padding: 8px;border-style: solid;border-color: #9dcc7a;}"
body = body & "</style><table class='tftable' border='1'><tr><th>Our ref</th><th>Amount</th>" _
    & "<th>Client name</th><th>Your ref</th></tr>"

' table body
For i = LBound(Table, 1) To UBound(Table, 1)

    ourRef = Table(i, 1)
    amount = Table(i, 3)
    customerName = Table(i, 2)
    yourRef = Table(i, 4)

    body = body & "<tr>"
    body = body & "<td>" & ourRef & "</td>"
    body = body & "<td>" & Format(amount, "£##,##0.00") & "</td>"
    body = body & "<td>" & customerName & "</td>"
    body = body & "<td>" & yourRef & "</td>"
    body = body & "</tr>"

Next i

body = body & "</tbody></table>"

' signature
enviro = CStr(Environ("appdata"))
Debug.Print enviro
Set objfso = CreateObject("Scripting.FileSystemObject")
strSigFilePath = enviro & "\Microsoft\Signatures\"
Debug.Print strSigFilePath
Set objSignatureFile = objfso.opentextfile(strSigFilePath & "Standard.htm")
strbuffer = objSignatureFile.ReadAll
body = body & "<br/><br/>" & strbuffer
objSignatureFile.Close
Dim称呼为String,ourRef为String,amount为String,customerName为String,yourRef为String
总金额为双倍
"敬礼!
称呼=IIf(时间<0.5,“早上好”,“下午好”)
“开场白
总额=0
对于i=0到uBond(表1)
合计金额=合计金额+表(i,3)
接下来我
body=“”
body=body&“
如果bulk=True,则
body=body&saltation&“

我们已向您发送了总额为的批量付款”_ &格式(总金额,£0.00“&”,记入以下账户:

其他的 body=body&saltation&“

我们已向您发送以下付款:

” 如果结束 '表格标题 body=body&“.tftable{字体大小:12px;颜色:333333;宽度:100%;”_ &“边框宽度:1px;边框颜色:#9dcc7a;边框折叠:折叠;}.t表格{字体大小:12px;”_ &“背景色:#A99D36;边框宽度:1px;填充:8px;边框样式:纯色;边框颜色:”_ &“#9dcc7a;文本对齐:左;}.tftable tr{背景色:#F0EDCF;}.tftable td{字体大小:12px;”_ &“边框宽度:1px;填充:8px;边框样式:纯色;边框颜色:#9dcc7a;}” body=body和“我们的重新装载”_ &“客户名称您的参考” "表体, 对于i=LBound(表1)到UBound(表1) ourRef=表(i,1) 金额=表(i,3) 客户名称=表(i,2) yourRef=表(i,4) body=body&“ body=body&&ourRef&& 正文=正文和格式(金额、0.00英镑)和 body=body&&customerName&“ body=body&&yourRef&& body=body&“ 接下来我 body=body&“ “签名 enviro=CStr(环境(“应用数据”)) 调试打印环境 设置objfso=CreateObject(“Scripting.FileSystemObject”) strSigFilePath=enviro&“\Microsoft\Signatures\” 调试.打印strSigFilePath 设置objSignatureFile=objfso.opentextfile(strSigFilePath&“Standard.htm”) strbuffer=objSignatureFile.ReadAll body=body&“

”和strbuffer 对象签名文件。关闭

结束函数

史蒂维,如果我可以大胆地回答这个问题

  • 签名文件位于-
    C:\Users\username\AppData\Roaming\Microsoft\Signatures
  • 他们的个人图像文件是-
    C:\Users\username\AppData\Roaming\Microsoft\Signatures\[singatureName]\u文件
  • 这些图像似乎是拉入image00#.jpg索引
  • 您可以尝试使用HTMLBody而不是仅使用body
  • 您可以使用
    NameSpace.GetDefaultFolder
    获取用户的默认电子邮件帐户,从而获取该帐户的签名
  • 也许当您使用
    名称空间.GetDefaultFolder
    时,可以查看签名名称,然后可以执行
    [name]\u文件
    以获取其中可能包含的任何图像。请注意,如果您使用HTMLBody,因为这是我的公司的问题,用户将无法访问Outlook中的编程访问信任中心设置。这会提示用户一个允许/拒绝框,用户可以在其中选择允许最多10分钟。。。仅供参考

    希望这能有所帮助。 丹尼,

    您可以从注册表中读取“新签名”和“回复转发签名”二进制值:


    HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles[profileName]\9375CFF041311D3B88A00104B2A6676[accountNO]\

    请回答您的问题并添加相关的代码部分或a。不要让代码创建签名,创建邮件对象时,是否尝试在
    .Send
    之前添加
    .Display
    ?这将在发送前将用户签名添加到电子邮件中。否不起作用,因为签名不仅仅是文本,还需要将图像拉过来。@Stevie D Outlook对象模型根本不公开签名。一般来说,签名的名称存储在可通过
    IOLKAAccountManager Extended
    MAPI接口访问的帐户配置文件数据中。由于该接口扩展了MAPI,所以只能使用C++或Delphi访问。如果单击
    IOlkAccountManager
    按钮,您可以在OutlookSpy中看到该界面及其数据。如果使用赎回是一种选择<代码>赎回
    还公开了
    RDOSignature
    。这只是为了分享知识,我的工作范围仅限于
    ExcelVBA
    。感谢skkakkar,看来这会有点棘手。