如何在邮件正文嵌入图片而非附件(结合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表示按值嵌入,而非链接 - 通过
PropertyAccessor为附件设置唯一CID,HTML中通过cid:xxx引用该图片,实现正文嵌入(不会显示为独立附件)
- 先将图片作为附件添加,参数
- 编号与图片结合:在HTML中直接将注册编号(
regID)与图片标签放在同一区域,可根据需求调整排版(比如将编号叠加在图片上需额外处理图片,此处采用排版结合的方式) - 排版优化:用HTML标签
<p>、<strong>、<br>替代原纯文本的换行,提升邮件可读性
注意事项
- 确保
imgPath指向的图片路径正确,且当前用户有读取权限 - Outlook的安全设置可能会阻止嵌入图片,测试时可先使用
.Display预览确认效果 - 原注册代码存在SQL注入风险,建议后续改用
DAO.QueryDef参数查询优化,避免恶意输入破坏数据库
内容的提问来源于stack exchange,提问作者RSing
相关产品推荐
相关产品推荐

