在使用System.Net.Mail发送电子邮件的页面上,我将此图像嵌入到html格式的电子邮件中。
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<!-- row 1 -->
<TextBlock Text="1" />
<!-- row 2 -->
<StackPanel TextElement.FontSize="40" Grid.Row="1">
<TextBlock>2</TextBlock>
<TextBlock>3</TextBlock>
</StackPanel>
<!-- row 3 -->
<TextBlock Text="4" Grid.Row="2" />
</Grid>
在创建电子邮件的代码中,图像是这样嵌入的。
string logoPath = "W:\\WebSites\\logo.jpg";
LinkedResource imagelink = new LinkedResource(logoPath, "image/jpg");
imagelink.ContentId = "imageId";
imagelink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(MessageHeader + Message.ToString() + MessageFooter, null, "text/html");
htmlView.LinkedResources.Add(imagelink);
一切正常。徽标出现在html格式的电子邮件中。但是,当用户收到电子邮件时,还有一个附加图像 - 在Outlook中,您会看到一个始终称为ATT00001的附件 - 如果您下载,则为徽标图像。
如何防止徽标作为附件添加以及嵌入?在邮件中添加徽标并附加等待下载看起来不合适。用户抱怨他们认为有附件 - 但事实上它只是徽标。
答案 0 :(得分:1)
我想出了这个问题的解决方案。添加LinkedResource对象时,必须定义正确的MIME类型,否则,电子邮件客户端将不会提供嵌入的图像作为附件。
这是从我的场景中获取的示例代码(vb.net代码):
'Your email
Dim _htmlSource As New StringBuilder("<html> ... YOUR HTML EMAIL ... </html>")
Dim _linkedResources As New List(Of LinkedResource)
Dim _href As String = "http://your.image.url/image.png"
'Adding images
Dim _imageStream As MemoryStream
Dim _mimeType As String
Using _wc = New WebClient
_imageStream = New MemoryStream(_wc.DownloadData(_href))
_mimeType = _wc.ResponseHeaders("content-type")
End Using
Dim _contentId As String = Guid.NewGuid.ToString
_htmlSource.Replace(_href, "cid:" & _contentId)
_linkedResources.Add(New LinkedResource(_imageStream, New ContentType(_mimeType)) With {.ContentId = _contentId})
'Compile mail message
Dim mail As New MailMessage
mail.IsBodyHtml = True
Dim _htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(_htmlSource.ToString(), Nothing, MediaTypeNames.Text.Html)
_htmlView.TransferEncoding = TransferEncoding.EightBit
_linkedResources.ForEach(Sub(lr) _htmlView.LinkedResources.Add(lr))