【问题标题】:Sending HTML email containing images in mail body VB.NET在邮件正文 VB.NET 中发送包含图像的 HTML 电子邮件
【发布时间】:2018-05-05 17:00:34
【问题描述】:

我正在 VB.NET 中开发邮件应用程序。邮件应用分两步发送邮件:

1.将邮件正文(rtf)转为HTML

2.然后它将转换后的HTML作为电子邮件正文发送

对于这些,我正在使用 EASendMail(发送电子邮件)、Itenso RTF2HTML 转换器(将 RTF 转换为 HTML)。现在我的邮件正文基本上是一个 RichTextBox(bodytxt.text)。使用的代码是:

  Imports Itenso.Rtf.Converter.Html
  Imports EASendMail
  Imports Itenso.Rtf.Support
  Imports Itenso.Rtf

   Dim rr As String = bodytxt.Rtf.Replace("\0", "")
   Dim rtfDocument As IRtfDocument = RtfInterpreterTool.BuildDoc(rr)
   Dim htmlConverter As New RtfHtmlConverter(rtfDocument)
   Dim html1 As String = htmlConverter.Convert()

    Dim oMail As New SmtpMail("TryIt")
            Dim oSmtp As New EASendMail.SmtpClient()
            oMail.From = fromtxt.Text
            oMail.To = New AddressCollection(totxt.Text)
            oMail.Subject = subjecttxt.Text
            oMail.HtmlBody = html1
            Dim oServer As New SmtpServer(MailConfig.host.Text)
            oServer.Port = MailConfig.port.Text
            oServer.ConnectType = SmtpConnectType.ConnectSSLAuto
            oServer.User = fromtxt.Text
            oServer.Password = MailConfig.password.Text
            Dim r As Integer
            If ListBox1.Items.Count <= 0 Then
            Else
                oMail.AddAttachment(ListBox1.Items(r))
            End If
            oSmtp.LogFileName = Application.StartupPath & "\maillog.OFPTX"

            oSmtp.SendMail(oServer, oMail)

现在这段代码可以正常工作,并以 HTML 格式发送电子邮件,维护所有文本格式。问题是,假设我在富文本框中添加了一张图片,然后发送了图片,但无法从我的邮件客户端的收件箱中打开/查看它。在 Gmail 中,它显示为损坏的图片和“在新选项卡中打开图片” " show "我们无法显示此图像"...

1.我做错了什么?如何将图像不作为附件发送,而是作为电子邮件正文的一部分发送?

2.我的代码可以改进吗?

【问题讨论】:

  • 文档VB.NET - Send HTML Email with Embedded Images 的哪一部分不起作用?
  • 我不能完全按照链接的说明进行操作。因为我之前尝试过,所以 html 代码有点复杂。并且行:` oMail.HtmlBody = "这是一个 嵌入图片。"` 在我的情况下不能使用,因为我使用的是富文本框,而不仅仅是添加文本在代码中。我可以编辑此代码并使用我的文本框而不是预先编写的文本,但问题是我不能使用换行符...
  • 请仔细阅读我的帖子,我正在使用另一个api将rtf转换为html然后发送它
  • 您需要检查从转换器获得的 HTML,确定如何将 src 值更改为“cid:”引用。如果您包含相关的 sn-p,我们可能会提供帮助。还是在 RTF 中没有对图像的引用,因此 HTML 中没有 &lt;img&gt; 标记?
  • 您提供的链接显示了如何将图像作为附件发送,而我的图像位于富文本框中

标签: html vb.net image email easendmail


【解决方案1】:

好的,我已经多次处理过这个问题。当您将图像拖到富文本框中时,它可能只是在内存中“活在那里”。

富文本框中的标记是什么样的?通常,我使用涉及富文本框(或任何应用程序)的 Web 应用程序来解决此问题的方法有 2 种,您可以在其中拖动图像:

  1. 当图像被拖放到富文本框中时,将其保存到服务器或文件服务器 - 并提供一个链接。现在您可以在电子邮件的 html 中添加标签 在我的 vb.net 项目中,它是一个 ASP Web 项目,所以我正在使用 Web 服务,但是 RichTextBox.Rtf 属性可能会起作用 - 查看 RTF 文件中是否包含图像:https://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.rtf(v=vs.110).aspx
  2. 将图像转换为数据URI:https://www.abeautifulsite.net/convert-an-image-to-a-data-uri-with-your-browser

【讨论】:

  • 我希望我能听从你的指示,但我不能……假设用户在 rtb 中输入一些内容然后添加图片??那该怎么办??
  • @zackraiyan 试试这个。在文本框中放一张图片 - 运行你的代码 在末尾放置一个断点,看看“rr”中包含什么 - 这将包含某种“字符串”格式的图像 - 所以让我们看看它是如何在代码中处理的。 “html1”的内容又是什么?
  • html1 只是转换后的 rtf(to html)
  • @zackraiyan 你有样本吗 - 这样我们就可以看到图像是如何在 html 中呈现的
  • 我真的不能,因为我现在面临this 问题
猜你喜欢
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2017-09-13
  • 2010-12-29
  • 2013-04-01
  • 2021-08-22
相关资源
最近更新 更多