как вставить изображение в шаблон письма

Я пытаюсь использовать PasswordRecovery ASP.NET.

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

<html xmlns="http://www.w3.org/1999/xhtml">

<body>

<img alt="blabla" src="/Images/blabla-logo.png" align="middle"/><br/><br/>
bla bla:<%Password%><br /><br />
</body>

</html>

Как я уже сказал, электронное письмо отправляется нормально, но изображение не вставляется. Я пробовал: src="~/Images/blabla-logo.png", но безуспешно.

Кто-нибудь придумал?

Большое спасибо, Ассаф.


person Assaf    schedule 13.07.2010    source источник


Ответы (4)


Для электронной почты вы не должны указывать относительный путь, например «/Images/blabla-logo.png», он работает только для внутренних страниц веб-сайта, вместо этого вы должны указать полный путь, например

http://youserver/youapp/Images/blabla-logo.png

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

person PSK    schedule 21.07.2010
comment
Это то, чем я занимаюсь. Всегда указывайте полный путь к живому образу на живом сервере. - person Simon Dugré; 22.07.2010

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

<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <img alt="blabla" src="{0}" align="middle"/><br/><br/> 
    bla bla:<%Password%><br /><br /> 
  </body>
</html>

Ваша разметка PasswordRecovery должна выглядеть так:

<asp:PasswordRecovery ID="prPasswordRecovery" runat="server" OnSendingMail="prPasswordRecovery_SendingMail">
  <MailDefinition BodyFileName="~/passwordRecoveryEmailTemplate.txt" IsBodyHtml="true" Priority="High" Subject="bla bla"/>
</asp:PasswordRecovery>

Последнее, что нужно сделать, это написать метод prPasswordRecovery_SendingMail в коде:

protected void prPasswordRecovery_SendingMail(object sender, MailMessageEventArgs e)
{
  e.Message.Body = String.Format(e.Message.Body, ResolveClientUrl("~/Images/blabla-logo.png"));
}

Это должно сработать.

person tpeczek    schedule 13.07.2010
comment
Большое спасибо. Не вижу причин, почему это не должно работать. Должно быть, я делаю что-то не так, но я попробовал это, и это не сработало. Я все еще получаю электронное письмо без изображения. Кстати, я дал шаблону электронной почты расширение .htm, а VS помечает часть src={0} и сообщает мне, что файл не найден. Должен ли я использовать текстовый файл? это важно? Спасибо вам обоим за помощь, вы действительно лучшие. - person Assaf; 13.07.2010

попробуйте добавить тильду "~", идентификатор и runat="server". Тильда меняется на корневой путь только при применении runat="server". В противном случае серверный код ничего не знает об элементе управления, не анализирует его и не применяет вставку пути.

 <img alt="blabla" src="~/Images/blabla-logo.png" 
 align="middle" id="img" runat="server"/>
person Daniel Dyson    schedule 13.07.2010
comment
Большое вам спасибо за вашу помощь. Все это кажется очень разумным. Тем не менее, я пробовал, но это не сработало. Я пытался немного бороться с этим, но безуспешно. Большое спасибо. - person Assaf; 13.07.2010
comment
Попробуйте открыть страницу в Firefox, а затем откройте плагин firebug, чтобы увидеть отображаемый путь. Находится ли изображение в каталоге изображений в корне вашего сайта? Также попробуйте убрать дефис из названия изображения и из ссылки. Существуют разные типы дефисов, и они могут не совпадать - person Daniel Dyson; 13.07.2010

Вы пробовали использовать AlternateView?

Одним из примеров является здесь.

person Anit Lacoul    schedule 22.07.2010
comment
Если вам нужен пример C#, вы можете посмотреть следующую ссылку. codeproject.com/KB/aspnet/inkrajesh.aspx - person Anit Lacoul; 22.07.2010