2010-07-13 20 views
5

Estoy tratando de usar PasswordRecovery de ASP.NET.cómo insertar una imagen en la plantilla de correo electrónico

Todo funciona bien, sin embargo, estoy usando la plantilla de correo electrónico. Dentro de este mensaje que estoy tratando de insertar una imagen de la siguiente manera:

<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> 

Como ya he dicho, el correo electrónico se está enviando bien, pero no se inserta la imagen. Intenté: src = "~/Images/blabla-logo.png", pero sin éxito.

Idea anyone?

Muchas gracias, Assaf.

Respuesta

0

Puede usar el evento OnSendingMail para modificar su mensaje de correo electrónico. Supongamos que su plantilla se parece a esto:

<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> 

Usted PasswordRecovery marcado debe tener este aspecto:

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

último que hay que hacer es escribir el método prPasswordRecovery_SendingMail en código detrás:

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

Deberias hacer eso.

+0

Muchas gracias. No veo ninguna razón por la cual esto no debería funcionar. Debo estar haciendo algo mal, pero probé esto y no funcionó. Todavía recibo el correo electrónico sin la imagen. Por cierto, le di a la plantilla de correo electrónico la extensión .htm, y el VS marca la parte src = "{0}" y me dice que el archivo no se encuentra. ¿Debería estar usando un archivo de texto? es eso importante? Gracias a ambos por la ayuda, eres realmente el mejor. – Assaf

0

intente agregar una tilde "~", una identificación y runat = "servidor". La tilde solo se cambia a la ruta raíz cuando se aplica runat = "server". De lo contrario, el código serverside no tiene conocimiento del control y no analiza y aplica la inserción ruta

<img alt="blabla" src="~/Images/blabla-logo.png" 
align="middle" id="img" runat="server"/> 
+0

Muchas gracias por su ayuda. Todo esto parece muy razonable. Sin embargo, lo intenté pero no funcionó. Intenté luchar un poco pero sin éxito. Muchas gracias. – Assaf

+0

Intenta abrir la página en Firefox y luego abre el plugin firebug para ver la ruta que se está entregando. ¿Está la imagen en el directorio de Imágenes en la raíz de su sitio? Además, intente eliminar el guión del nombre de la imagen y del enlace. Hay diferentes tipos de guiones y es posible que no coincidan con –

3

Para el correo electrónico que no debe renunciar ruta relativa como "/Images/blabla-logo.png" el único funciona para las páginas web internas, en lugar de esto, usted debe dar la ruta completa como

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

voy a sugerir que no se use la imagen utilizando la ruta en lugar de tratar este incrustar la imagen en su correo electrónico.

+0

Eso es lo que hago. Siempre consulte la imagen "en vivo" en el servidor "en vivo" con la ruta completa. –

0

¿Ha intentado utilizar AlternateView?

Un ejemplo es here.

+0

Si desea el ejemplo de C#, puede echar un vistazo al siguiente enlace. http://www.codeproject.com/KB/aspnet/inkrajesh.aspx –

Cuestiones relacionadas