Browsed by
Tag: VB

VB.net发送带图片格式的Email

VB.net发送带图片格式的Email

最近要用vb.net写一个发邮件的小程序,倒是不难,但有几个问题解决起来比较棘手

首先,发普通邮件带SMTP认证(Email with SMTP Authentication)很简单,代码如下
Dim smtp As New System.Net.Mail.SmtpClient(“IP Address”)
Dim mail As New System.Net.Mail.MailMessage()
smtp.Credentials = New System.Net.NetworkCredential(“test@example.com”, “Password”)
mail.Subject = Subject
mail.IsBodyHtml = True
mail.From = New System.Net.Mail.MailAddress(“email@example.com”, “LonelyWord”)
mail.Priority = System.Net.Mail.MailPriority.Normal
mail.body = RichTextBox1.Text
mail.To.Add(“to somebody”)
mail.CC.Add(“cc somebody”)
Try
smtp.Send(mail)
MsgBox(“邮件发送成功”)
Catch ex As Exception
MsgBox(“邮件发送失败”)
End Try
代码都比较好理解了,就算加个附件也很简单,mail.Attachments.Add(“file”)。

更深一步,如果Email是带图片的,如何收到邮件能让图片自动显示出来,同时对于不支持HTML的客户端显示txt文件(Embed image in email body)?代码如下
Dim html, plaintext As System.Net.Mail.AlternateView
msg = RichTextBox1.Text & “<img alt=””Company_Logo”” src=””cid:ImageID”” border=0>”
html = System.Net.Mail.AlternateView.CreateAlternateViewFromString(msg, Nothing, “text/html”)
Dim imageView As New System.Net.Mail.AlternateView(“image.jpg”, Net.Mime.MediaTypeNames.Image.Jpeg)
imageview.ContentId = “ImageID”
imageview.TransferEncoding = Net.Mime.TransferEncoding.Base64
plaintext = System.Net.Mail.AlternateView.CreateAlternateViewFromString(RichTextBox1.Text, Nothing, “text/plain”)
mail.AlternateViews.Add(html)
mail.AlternateViews.Add(plaintext)
mail.AlternateViews.Add(imageview)
这时还有个问题出来了,RichTextBox如果有很多行文件,msg只是把文本提取出来,换行符并未提取,就是说看到的邮件是一行到头,解决方案是将文本的换行符替换成HTML中的换行符<br />,代码msg = msg.Replace(Convert.ToChar(10), “<br />”)

这时候就可以应付大部分网页、客户端等,email显示出来文本底下有张图片,但如果使用outlook的话,邮件的图片部分会显示红叉(display red cross in outlook 2003/2007/2010),几乎所有版本outlook都显示红叉,这个查了半天,有的说是改安全级别,有的说改注册表,都试过了还是不行,这时候我突然想到,imageview一定是AlternateViews嘛?为什么不能是附件,这时候涉及到imageview的代码改成
Dim imageview As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(“image.jpg”)
imageview.ContentId = “ImageID”
imageview.TransferEncoding = Net.Mime.TransferEncoding.Base64
outlook收到的邮件可以正常看到图片了。