You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何追踪通过MS Access发送的Outlook邮件打开率及分析数据?

嘿,这是个非常实用的需求!要追踪通过Access发送的Outlook邮件是否被打开,或者获取详细的邮件分析数据,有几种可行的方案,我结合你提供的VBA代码给你逐一拆解:

方案1:嵌入追踪像素(低成本基础追踪)

这是最常用的免费追踪方式,原理是在HTML邮件里加入一个1x1的透明像素图片,当收件人打开邮件并加载外部图片时,会向你的服务器发送请求,你通过记录这个请求就能知道邮件被打开了。

代码修改步骤:

在你生成strHTML的代码之后,添加追踪像素的HTML代码:

' 在邮件HTML末尾插入追踪像素
' 注意:替换下面的http://your-server.com/track-log.php为你自己的追踪脚本地址
strHTML = strHTML & "<img src=""http://your-server.com/track-log.php?recipient=" & emailstr & "&subject=" & Replace(Forms!frmMain.txtSubject, " ", "%20") & """ width=""1"" height=""1"" style=""display:none; border:0;"" alt="""">"

配套追踪脚本示例(用PHP实现):

你需要在自己的服务器上部署一个简单的脚本,用来记录打开日志。比如创建track-log.php:

<?php
// 获取请求参数
$recipient = $_GET['recipient'] ?? '';
$subject = urldecode($_GET['subject'] ?? '');
$opened_at = date('Y-m-d H:i:s');
$ip = $_SERVER['REMOTE_ADDR'];

// 连接数据库并插入记录(请根据你的数据库信息修改)
$db_conn = mysqli_connect('localhost', 'db-username', 'db-password', 'your-db-name');
if ($db_conn) {
    $safe_recipient = mysqli_real_escape_string($db_conn, $recipient);
    $safe_subject = mysqli_real_escape_string($db_conn, $subject);
    mysqli_query($db_conn, "INSERT INTO email_tracking (recipient, subject, opened_at, ip_address) VALUES ('$safe_recipient', '$safe_subject', '$opened_at', '$ip')");
}

// 返回透明像素图片
header('Content-Type: image/png');
echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');
exit;
?>

⚠️ 注意:很多邮件客户端默认会阻止外部图片,所以这个方法无法100%覆盖所有情况,只能作为参考数据。

方案2:使用Outlook自带的回执功能

Outlook原生支持送达回执和阅读回执,当收件人打开邮件并同意发送回执时,你会收到通知。

修改你的VBA代码:

在With cdomsg块里添加两行代码即可:

With cdomsg
 .To = emailstr
 .FROM = fromemailstr
 .subject = Forms!frmMain.txtSubject
 .HTMLBody = strHTML
 ' 请求送达回执(邮件成功投递到收件人邮箱时通知你)
 .DeliveryReceiptRequested = True
 ' 请求阅读回执(收件人打开邮件时通知你)
 .ReadReceiptRequested = True
 .Send
End With
Set cdomsg = Nothing

⚠️ 注意:这个方法完全依赖收件人的意愿,如果收件人选择拒绝发送回执,你就无法获取任何追踪信息,局限性比较大。

方案3:第三方邮件服务(专业级分析)

如果需要更全面的分析数据(比如打开次数、链接点击率、设备/地域分布、退信统计等),建议改用第三方邮件服务的API来发送邮件,比如SendGrid、Mailgun等,这些服务自带完善的追踪仪表盘。

示例:用SendGrid API发送邮件(VBA版)

Dim httpObj As Object
Set httpObj = CreateObject("MSXML2.XMLHTTP")

' 配置你的SendGrid信息
Dim apiKey As String: apiKey = "你的SendGrid API密钥"
Dim sendTo As String: sendTo = emailstr
Dim fromEmail As String: fromEmail = fromemailstr
Dim emailSubject As String: emailSubject = Forms!frmMain.txtSubject
Dim emailHtml As String: emailHtml = strHTML

' 构建API请求
httpObj.Open "POST", "https://api.sendgrid.com/v3/mail/send", False
httpObj.setRequestHeader "Authorization", "Bearer " & apiKey
httpObj.setRequestHeader "Content-Type", "application/json"

' 构造请求体(注意转义双引号)
Dim payload As String
payload = "{""personalizations"": [{""to"": [{""email"": """ & sendTo & """}]}]," & _
          """from"": {""email"": """ & fromEmail & """}," & _
          """subject"": """ & emailSubject & """," & _
          """content"": [{""type"": ""text/html"", ""value"": """ & Replace(emailHtml, """", "\""") & """}]}"

httpObj.send payload
Set httpObj = Nothing

发送完成后,你可以直接在SendGrid的后台查看所有邮件的详细追踪数据,这类服务通常有免费额度,适合批量发送邮件的场景。


内容的提问来源于stack exchange,提问作者user9448003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:23:10