Путь к изображению не найден

Как я могу добавить изображение в сообщение электронной почты, отправленное с веб-сервера на С#

это код, который я использую:

        string emailType = "NewMember";
        string sMessage = GetData.emailText(emailType);
        string sEmail = GetData.userEmails(userName);
        string sSubject = GetData.emailSubject(emailType);
        SmtpClient smtpClient = new SmtpClient();
        string htmlBody = "<html><body>Dear " + userName + sMessage + "<br/><br/><img src=\"cid:filename\"></body></html>";
        AlternateView avHtml = AlternateView.CreateAlternateViewFromString
           (htmlBody, null, MediaTypeNames.Text.Html);

        LinkedResource inline = new LinkedResource("~/Resources/images/logo.jpg", MediaTypeNames.Image.Jpeg);
        inline.ContentId = Guid.NewGuid().ToString();
        avHtml.LinkedResources.Add(inline);

        MailMessage mail = new MailMessage();
        mail.AlternateViews.Add(avHtml);

        Attachment att = new Attachment("~/Resources/images/logo.jpg");
        att.ContentDisposition.Inline = true;
        MailAddress sFrom = new MailAddress("[email protected]");
        MailAddress sTo = new MailAddress(sEmail);
        mail.From = sFrom;
        mail.To.Add(sTo);
        mail.Subject = sSubject;
        mail.Body = String.Format(
                   htmlBody +
                   @"<img src=""cid:{0}"" />", inline.ContentId);

        mail.IsBodyHtml = true;
        mail.Attachments.Add(att);
        smtpClient.Send(mail);

` это сообщение об ошибке, которое я получаю: Не удалось найти часть пути 'C:\Windows\SysWOW64\inetsrv\~\Resources\images\logo.jpg


person user3746002    schedule 05.08.2014    source источник
comment
Изображение хранится в вашем приложении?   -  person Patrick Developer    schedule 05.08.2014
comment
Возможно, вам также стоит указать путь явно, а не неявно, просто чтобы исключить неправильный путь к каталогу. Изменить. Если это не удастся, отключите cid в теге img и укажите его на сервер, доступный получателям.   -  person Daniel Lane    schedule 05.08.2014
comment
1. Вам нужно добавить виртуальный путь к образу. (Например: h ttp://YourDomain/YourWebProjectRoot/Resources/images/logo.jpg' 2. Изображение должно быть доступно на общедоступном веб-сервере для клиентов, которым вы отправляете электронное письмо; чтобы иметь возможность просматривать изображение когда они читают свою электронную почту.   -  person FlemGrem    schedule 05.08.2014
comment
Да, изображение находится в приложении asp в папке «изображения».   -  person user3746002    schedule 05.08.2014
comment
Этот код теперь работает без ошибок, но изображение прикреплено как файл ext вместо файла jpg, оно открывается с помощью ms paint как правильное изображение, поэтому путь правильный. Как я могу отправить изображение в правильном формате?   -  person user3746002    schedule 05.08.2014


Ответы (1)


Пытаться -

Attachment att = new Attachment(Server.MapPath("~/Resources/images/logo.jpg"));
LinkedResource inline = new LinkedResource(Server.MapPath("~/Resources/images/logo.jpg"), MediaTypeNames.Image.Jpeg);

Вместо -

Attachment att = new Attachment("~/Resources/images/logo.jpg");
LinkedResource inline = new LinkedResource("~/Resources/images/logo.jpg", MediaTypeNames.Image.Jpeg);

Потому что вам нужен путь к ресурсу, который находится внутри папки веб-сайта. Итак, вам нужно сопоставить путь с Server.MapPath. Подробнее здесь -

Метод Server.MapPath

person brainless coder    schedule 05.08.2014
comment
Я изменил путь, используя путь Server.Map, и теперь код запускается и отправляет сообщение с вложением, но это файл .ext, а не файл jpg, и он не отображается в теле сообщения. Как я могу отправить изображение logo.jpg в правильном формате? Привет, Энди - person user3746002; 05.08.2014
comment
Не уверен, что не так, но похоже, что он не понимает формат файла и может попытаться просканировать его антивирусом, попробуйте упомянуть ContentDisposition, как указано здесь - msdn.microsoft.com/en-us/library/ - person brainless coder; 05.08.2014
comment
Мне удалось заставить работать вложение файла, но изображение не отображается в теле сообщения, а просто заполнитель. 'FileStream fileToStream = новый FileStream(System.Web.HttpContext.Current.Server.MapPath(~/images/logo.jpg), FileMode.Open, FileAccess.Read); Вложение att = новое вложение (fileToStream, Logo.jpg, MediaTypeNames.Image.Jpeg);' - person user3746002; 05.08.2014
comment
@user3746002 user3746002 Вы хотите, чтобы изображение было частью тела письма? Если это так, у вас может быть что-то вроде: string htmlBody = ‹html›‹body›Dear + userName + sMessage + ‹br/›‹br/›‹img src=\ + filepath + \›‹/body›‹/html› ; - person Patrick Developer; 05.08.2014
comment
Я решил это сейчас с помощью: string sImage = System.Web.HttpContext.Current.Server.MapPath(~/images/logo.jpg); SmtpClient smtpClient = новый SmtpClient(); MailMessage mail = новое MailMessage(); FileStream fileToStream = новый FileStream(System.Web.HttpContext.Current.Server.MapPath(~/images/logo.jpg), FileMode.Open, FileAccess.Read); Вложение att = новое вложение (fileToStream, Logo.jpg, MediaTypeNames.Image.Jpeg); - person user3746002; 18.08.2014