【问题标题】:Send email with image embedded - image not visible发送嵌入图像的电子邮件 - 图像不可见
【发布时间】:2011-07-14 15:58:26
【问题描述】:

我发送一封带有 C# 库的电子邮件。电子邮件正文包含一个徽标。当我通过 GMail 的 SMTP 服务器发送这封电子邮件时,图像是可见的。当我使用我们的域名 admin@domaine.net 时,图像不可见。

有人知道这个区别吗?

【问题讨论】:

    标签: c# asp.net email smtp gmail


    【解决方案1】:

    为了使其工作,您需要发送一个 HTML 文档,然后使用 mime 嵌入图像。

    自 v2.0 以来,ASP.NET smtp 对象为您完成了大部分繁琐的工作。

    这是一个来自微软网站的例子。 original location

      //Holds message information.
      System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
      //Add basic information.
      mailMessage.From = new System.Net.Mail.MailAddress(txtFrom.Text.Trim());
      mailMessage.To.Add(txtTo.Text.Trim());
    
      mailMessage.Subject = txtSubject.Text.Trim();
      //Create two views, one text, one HTML.
      System.Net.Mail.AlternateView plainTextView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim(), null, "text/plain");
      System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim() + "<image src=cid:HDIImage>", null, "text/html");
      //Add image to HTML version
      System.Net.Mail.LinkedResource imageResource = new System.Net.Mail.LinkedResource(fileImage.PostedFile.FileName, "image/jpg");
      imageResource.ContentId = "HDIImage";
      htmlView.LinkedResources.Add(imageResource);
      //Add two views to message.
      mailMessage.AlternateViews.Add(plainTextView);
      mailMessage.AlternateViews.Add(htmlView);
      //Send message
      System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
      smtpClient.Send(mailMessage);
    

    【讨论】:

    • 谢谢。这就是我正在使用的,但只有一个 AlternateView:嵌入图像。正如我所说,当我使用 gmail smtp 服务器但我们的域 smtp 服务器时,图像嵌入得很好。
    • @user594166 :哦,我明白了。是否有“查看图像”链接。另一个选项是您的 SMTP 服务器正在过滤 mime 附件...查看原始邮件,看看它是否真的被传递。
    • 在哪里可以检查 smtp 服务器 mime 过滤?
    • @user594166 - 遗憾的是我不知道:(
    • 我可能在这个答案中错过了它,但是需要设置 imageResource.ContentType.MediaType 否则像 Office365 或 Outlook Online 这样的东西不会显示它,但普通桌面版本的 Outlook 会。下面约翰的回答使用了构造函数的重载并传入了媒体类型。所以你可以选择是设置它还是使用重载。
    【解决方案2】:

    您想在邮件消息中嵌入图像。 MailMessage 正文类型应为 html

    try
    
            {
    
                MailMessage mail = new MailMessage();
    
                mail.To.Add("to@gmail.com");
    
                mail.From = new MailAddress("from@gmail.com");
    
                mail.Subject = "Test with Image";
    
                string Body = "<b>Welcome</b><br><BR>Online resource for .net articles.<BR><img alt=\"\" hspace=0 src=\"cid:imageId\" align=baseline border=0 >";
    
    
    
                AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Body, null, "text/html");
    
                LinkedResource imagelink = new LinkedResource(Server.MapPath(".") + @"\codedigest.png", "image/png");
    
                imagelink.ContentId = "imageId";
    
                imagelink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
    
                htmlView.LinkedResources.Add(imagelink);
    
                mail.AlternateViews.Add(htmlView);
    
                SmtpClient smtp = new SmtpClient();
    
                smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
    
                smtp.Send(mail);
    
            }
    
            catch (Exception ex)
    
            {
    
                Response.Write(ex.Message);
    
            }
    

    【讨论】:

      【解决方案3】:
      if (!string.IsNullOrEmpty(BodyImageFileFullName))
              {
                  var leftImageLink = new LinkedResource(BodyImageFileFullName, "image/jpg")
                  {
                      ContentId = "ImageGM_left",
                      TransferEncoding = TransferEncoding.Base64
                  };
                  htmlView.LinkedResources.Add(leftImageLink);
              }
      

      你可以看看这个解决方案。我用这段代码解决了我的问题。关于发送带有图片链接的邮件的详细代码。

      http://www.softcodearticle.com/2012/11/sending-mail-with-image-using-smtp-in-c/

      【讨论】:

        【解决方案4】:

        以下代码解决了我的问题:

        //Holds message information.
        
        System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
        
        //Add basic information.
        
        mailMessage.From = new System.Net.Mail.MailAddress(txtFrom.Text.Trim());
        mailMessage.To.Add(txtTo.Text.Trim());
        mailMessage.Subject = txtSubject.Text.Trim();
        
        //Create two views, one text, one HTML.
        
        System.Net.Mail.AlternateView plainTextView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim(), null, "text/plain");
        System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim() + "<image src=cid:HDIImage>", null, "text/html");
        
        //Add image to HTML version
        
        System.Net.Mail.LinkedResource imageResource = new System.Net.Mail.LinkedResource(fileImage.PostedFile.FileName);
        imageResource.ContentId = "HDIImage";
        htmlView.LinkedResources.Add(imageResource);
        
        //Add two views to message.
        
        mailMessage.AlternateViews.Add(plainTextView);
        mailMessage.AlternateViews.Add(htmlView);
        
        //Send message
        
        System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
        smtpClient.Send(mailMessage);
        

        【讨论】:

          【解决方案5】:

          接收站点或邮件代理正在使用部分基于发件人的规则来阻止图像。您会发现您的结果会根据您发送到的位置而有所不同。对此您能做些什么取决于接收方 - 您可以联系他们或查看他们发布的政策,看看您可以跳过哪些障碍来避免阻塞。

          【讨论】:

          • 谢谢迈克尔。目标电子邮件(sendto)是我的 gmail 帐户。你认为问题是我们的 smtp 服务器。对吗?
          • @user:我认为问题在于 Google 不信任从不受信任的 SMTP 服务器发送的嵌入式图像。我不知道您是否可以在发送方解决此问题。在接收方(来自您的 Gmail 帐户),您可以逐个站点启用图片,也可以为您的帐户启用所有图片。
          • 使用 google gmail smtp 服务器发送的电子邮件中嵌入了图像。使用我们自己的域 smtp 服务器:图像未嵌入(空图像链接)。问题出在发件人(管理员@ domain.net)。目标电子邮件(本例是我的 gmail 帐户)接收电子邮件。问题只是在嵌入的图像中
          猜你喜欢
          • 2012-04-07
          • 2021-10-31
          • 2017-07-28
          • 1970-01-01
          • 1970-01-01
          • 2013-08-23
          相关资源
          最近更新 更多