Отправить письмо с вложенным изображением - изображение не видно - PullRequest
11 голосов
/ 14 марта 2011

Я отправляю письмо с библиотекой C #. Тело письма содержит логотип. Когда я отправляю это письмо через SMTP-сервер GMail, изображение становится видимым. Когда я использую наше доменное имя admin@domaine.net, изображение не отображается.

Кто-нибудь имеет представление об этой разнице?

Ответы [ 5 ]

16 голосов
/ 14 марта 2011

Для того, чтобы это работало, вам нужно отправить HTML-документ, а затем вставить изображение с помощью mime.

SMTP-объект ASP.NET выполняет за вас большую часть грязной работы, начиная с версии 2.0.

Вот пример с сайта Microsoft. исходное местоположение

  //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);
5 голосов
/ 14 марта 2011

Вы хотите встроить изображение в почтовое сообщение.и 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);

        }
4 голосов
/ 30 ноября 2012
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/

1 голос
/ 30 января 2012

Следующий код решил мою проблему:

//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);
0 голосов
/ 14 марта 2011

Принимающий сайт или почтовый агент использует правила, частично основанные на отправителе, для блокировки изображений. Вы обнаружите, что ваши результаты отличаются в зависимости от того, куда вы отправляете. Что вы можете сделать по этому поводу, зависит от получателя - вы можете связаться с ним или просмотреть опубликованные им политики, чтобы узнать, через какие кольца вы можете перейти, чтобы избежать блокировки.

...