能否使用Send-MailMessage PowerShell cmdlet发送MIME多部分邮件以嵌入图片?
使用PowerShell发送带内联图片的MIME多部分邮件
Send-MailMessage cmdlet不直接支持创建带内联图片的MIME多部分邮件——它的设计较为基础,仅能添加常规附件,无法设置附件的内联属性(ContentId、Inline标记)。要实现内联图片需求,需要直接调用.NET的System.Net.Mail命名空间类手动构建邮件。
解决方案:用.NET类手动构建并发送邮件
以下是完整的PowerShell脚本示例,实现嵌入内联图片的HTML邮件发送:
# 基础配置 $fromAddress = "sender@domain.com" $toAddress = "recipient@domain.com" $emailSubject = "测试内联图片邮件" $smtpServer = "smtp.domain.com" $smtpPort = 587 $authUsername = "your_smtp_username" $authPassword = ConvertTo-SecureString "your_smtp_password" -AsPlainText -Force $smtpCredential = New-Object System.Management.Automation.PSCredential ($authUsername, $authPassword) # 创建MailMessage实例 $mailMessage = New-Object System.Net.Mail.MailMessage($fromAddress, $toAddress, $emailSubject) $mailMessage.IsBodyHtml = $true # 编写HTML正文,通过cid引用内联图片 $mailMessage.Body = @" <h3>内联图片展示</h3> <p>下方是嵌入正文的图片:</p> <img src="cid:inlineLogo" alt="公司Logo" /> "@ # 添加内联图片附件 $imageFilePath = "C:\assets\company-logo.jpg" $inlineAttachment = New-Object System.Net.Mail.Attachment($imageFilePath) $inlineAttachment.ContentId = "inlineLogo" # 需与HTML中的cid值完全匹配 $inlineAttachment.Inline = $true # 标记为内联资源 $mailMessage.Attachments.Add($inlineAttachment) # 发送邮件 $smtpClient = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort) $smtpClient.EnableSsl = $true $smtpClient.Credentials = $smtpCredential try { $smtpClient.Send($mailMessage) Write-Host "邮件发送成功" } catch { Write-Error "发送失败:$($_.Exception.Message)" } finally { # 释放资源 $inlineAttachment.Dispose() $mailMessage.Dispose() $smtpClient.Dispose() }
关键说明
- ContentId匹配:HTML中
cid:后面的值必须和附件的ContentId完全一致,邮件客户端才能正确关联并显示内联图片。 - Inline属性:将附件的
Inline设为$true,告知邮件客户端该资源是正文的一部分,而非独立附件。 - SMTP配置:根据你的邮件服务商要求调整SMTP服务器地址、端口及SSL设置(多数服务商要求587端口+SSL)。
内容的提问来源于stack exchange,提问作者Civette
相关产品推荐
相关产品推荐

