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

如何在邮件正文嵌入图片而非附件(结合Access生成编号)

Access VBA实现嵌入图片+编号的注册确认邮件

要实现将图片嵌入邮件正文并结合Access生成的注册编号,需将邮件格式切换为HTML,通过**内容ID(CID)**关联嵌入的图片,同时在HTML正文中整合编号与图片。以下是修改后的完整代码:

Private Sub D001_Click()

'用于注册新员工的程序
    ' 注意:原代码存在SQL注入风险,建议后续改用参数查询
    CurrentDb.Execute "INSERT INTO Registrovani (Ime, Prezime, Korisnicko_ime, Lozinka, Adresa, Broj, Dodatak, Postanski_broj, Grad, Drzava, Telefon, Elektronska_adresa) VALUES('" & Me.IZ & "', '" & Me.PZ & "', '" & Me.KIZ & "', '" & Me.LZ & "', '" & Me.APZ & "', " & Me.BAPZ & ", '" & Me.DBAPZ & "', " & Me.PBZ & ", '" & Me.GZ & "', '" & Me.DZ & "', '" & Me.KTZ & "', '" & Me.EAZ & "')"

'用于发送带编号和嵌入图片的自动邮件程序
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strHTMLBody As String
    Dim regID As String
    Dim imgPath As String
    Dim imgCID As String

    ' 获取注册编号
    regID = DLookup("ID", "Registrovani", "[Korisnicko_ime]='" & Me.KIZ.Value & "'")
    ' 图片本地路径,替换为你的实际路径
    imgPath = "C:\Users\10466237\Desktop\1111111111111111111111111111111111111.jpg"
    ' 设置图片的CID(需唯一)
    imgCID = "RegConfirmImg_" & regID

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    ' 构建HTML格式的邮件正文
    strHTMLBody = "<html><body>" & _
        "<p>尊敬的用户:</p>" & _
        "<p>这是系统自动发送的邮件,请勿回复。</p>" & _
        "<p>本邮件用于您的注册身份验证。请将收到的完整编号输入到数据库指定位置。</p>" & _
        "<p>您的编号为:<strong>" & regID & "</strong></p>" & _
        "<p>验证图片:<br><img src='cid:" & imgCID & "' alt='注册验证图片' style='max-width:300px;'></p>" & _
        "<p>若您未进行注册,有人可能正在滥用您的邮箱!请立即采取措施保护您的数据!这种情况下,您可以忽略本邮件内容。</p>" & _
        "<p>感谢您的理解与关注。</p>" & _
        "</body></html>"

    On Error Resume Next
    With OutMail
        .To = Me.EAZ.Value
        .CC = ""
        .BCC = ""
        .Subject = "注册确认"
        ' 添加图片附件并设置为嵌入模式
        .Attachments.Add imgPath, 1, 0 ' 1=olByValue, 0=位置(不影响嵌入)
        ' 为附件设置CID,用于HTML引用
        .Attachments(.Attachments.Count).PropertyAccessor.SetProperty _
            "http://schemas.microsoft.com/mapi/proptag/0x3712001F", imgCID
        ' 设置HTML正文
        .HTMLBody = strHTMLBody
        .Send ' 可替换为.Display仅预览邮件
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
    
    ' 清空表单控件
    Me.IZ = Null
    Me.PZ = Null
    Me.KIZ = Null
    Me.LZ = Null
    Me.APZ = Null
    Me.BAPZ = Null
    Me.DBAPZ = Null
    Me.PBZ = Null
    Me.GZ = Null
    Me.DZ = Null
    Me.KTZ = Null
    Me.EAZ = Null
    DoCmd.Close acForm, 1
    DoCmd.OpenForm (500)
End Sub

关键修改说明

  • 切换HTML格式:使用.HTMLBody替代原.Body,支持富文本和图片嵌入
  • 图片嵌入逻辑:
    1. 先将图片作为附件添加,参数1表示按值嵌入,而非链接
    2. 通过PropertyAccessor为附件设置唯一CID,HTML中通过cid:xxx引用该图片,实现正文嵌入(不会显示为独立附件)
  • 编号与图片结合:在HTML中直接将注册编号(regID)与图片标签放在同一区域,可根据需求调整排版(比如将编号叠加在图片上需额外处理图片,此处采用排版结合的方式)
  • 排版优化:用HTML标签<p>、<strong>、<br>替代原纯文本的换行,提升邮件可读性

注意事项

  1. 确保imgPath指向的图片路径正确,且当前用户有读取权限
  2. Outlook的安全设置可能会阻止嵌入图片,测试时可先使用.Display预览确认效果
  3. 原注册代码存在SQL注入风险,建议后续改用DAO.QueryDef参数查询优化,避免恶意输入破坏数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:54:56