Изображение не отображается в почтовом теле gmail после отправки его с asp.net c # net.mail как mail.body - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно отправить сгенерированный из письма qrcode на его учетную запись gmail. Я отладил код и проверил с помощью html визуализатора, и qrcode отображается правильно, но не может увидеть его в сообщении gmail

public void generate_qrcode()
            {
                try
                {
                    string imgurl;
                    string code = txtCode.Text;
                    QRCodeGenerator qrGenerator = new QRCodeGenerator();
                    QRCodeGenerator.QRCode qrCode = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);
                    System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
                    imgBarCode.Height = 150;
                    imgBarCode.Width = 150;
                    using (Bitmap bitMap = qrCode.GetGraphic(20))
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                            byte[] byteImage = ms.ToArray();
                            imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                            imgurl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                        }
                        //plBarCode.Controls.Add(imgBarCode);
                    }
                    SendMail(imgurl);
                }
                catch (Exception ex)
                {
                }
            }
 public void SendMail(String imgurl)
        {
            string body = "Hello ,<br /><br />Please find your QRcode below<br /><br /><img src=' " + imgurl + " ' height='100' width='100'/><br/><br/>Thanks...";
            SmtpClient Smtp_Server = new SmtpClient();
            MailMessage e_mail = new MailMessage();
            Smtp_Server.UseDefaultCredentials = false;
            Smtp_Server.Credentials = new System.Net.NetworkCredential("samplemail527@gmail.com", "Sample527");
            Smtp_Server.Port = 587;
            Smtp_Server.EnableSsl = true;
            Smtp_Server.Host = "smtp.gmail.com";
            e_mail = new MailMessage();
            e_mail.From = new MailAddress("samplemail527@gmail.com");
            e_mail.To.Add(txtCode.Text);
            e_mail.Subject = "Email Sending";
            e_mail.IsBodyHtml = true;
            e_mail.Body = body;
            Smtp_Server.Send(e_mail);
        }

Image not displaying in gmail

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Изображения Base64 в настоящее время не поддерживаются большинством читателей электронной почты. Очень неудачно. Вам нужно будет сгенерировать реальное изображение и прикрепить его к сообщению с уникальным идентификатором (например, GUID), а затем использовать этот идентификатор в качестве src тега изображения вместе с префиксом CID.

<img src="cid:GeneratedUniqueId" alt="Your QR Code" />
0 голосов
/ 23 ноября 2018

Возможно, вам следует попробовать использовать AlternateView.Вы должны назначить Id для ресурса и использовать этот идентификатор в теге HTML <img>.Атрибут src должен адресовать этот Id.Like так:

<img src="cid:ResourceId" />

Не забудьте добавить связанный ресурс в альтернативное представление.

Вот полный код, который я использовал:

Byte[] iconBytes = Convert.FromBase64String(@"iVBOR IMAGE BYTES Hy4vAAN==");
System.IO.MemoryStream iconBitmap = new System.IO.MemoryStream(iconBytes);
LinkedResource iconResource = new LinkedResource(iconBitmap, MediaTypeNames.Image.Jpeg);
iconResource.ContentId = "Icon";

MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
msg.To.Add(new MailAddress("recipient@domain.com", "Recipient Name"));
msg.From = new MailAddress("sender@domain.com", "Sender Name");
msg.Subject = "Attach image to mail";

string htmlBody = @"<html><head>";
htmlBody += @"<style>";
htmlBody += @"body{ font-family:'Calibri',sans-serif; }";
htmlBody += @"</style>";
htmlBody += @"</head><body>";
htmlBody += @"<h1>The attached image is here below</h1>";
htmlBody += @"<img src='cid:" + iconResource.ContentId + @"'/>";
htmlBody += @"</body></html>";

AlternateView alternativeView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
alternativeView.LinkedResources.Add(iconResource);
msg.AlternateViews.Add(alternativeView);

SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = true;                    
client.Port = 25; // You can use Port 25 if 587 is blocked
client.Host = "smtp.yourhost.com";
client.Send(msg);
0 голосов
/ 14 сентября 2018

Вот хорошая ссылка для вставки изображения в электронное письмо. Отправить письмо со встроенными изображениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...