2010-07-13 4 views
5

J'essaie d'utiliser le PasswordRecovery de ASP.NET.comment insérer l'image dans le modèle de courrier électronique

Tout fonctionne bien, mais j'utilise le modèle Email. Au sein de cet e-mail, je suis en train d'insérer une image comme suit:

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

Comme je l'ai dit, l'e-mail est envoyé très bien, mais l'image est insérée. J'ai essayé: src = "~/Images/blabla-logo.png", mais sans succès.

Une idée? Merci beaucoup, Assaf.

Répondre

0

Vous pouvez utiliser l'événement OnSendingMail pour modifier votre message électronique. Supposons que votre modèle ressemble à ceci:

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

Vous balisage PasswordRecovery devrait ressembler à ceci:

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

La dernière chose à faire est d'écrire la méthode prPasswordRecovery_SendingMail dans le code derrière:

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

Ça devrait le faire.

+0

Merci beaucoup. Je ne vois aucune raison pour laquelle cela ne devrait pas fonctionner. Je dois faire quelque chose de mal, mais j'ai essayé et ça n'a pas marché. Je reçois toujours l'email sans l'image. Par ailleurs, j'ai donné l'extension .htm au modèle d'email, et le VS marque la partie src = "{0}" et me dit que le fichier n'est pas trouvé. Dois-je utiliser un fichier texte? Est-ce important? Merci à vous deux pour l'aide, vous êtes vraiment le meilleur. – Assaf

0

essayez d'ajouter un tilde "~", un identifiant et runat = "serveur". Le tilde est seulement changé au chemin racine quand runat = "server" est appliqué. Dans le cas contraire, le code de Serverside n'a pas connaissance du contrôle et ne pas analyser et appliquer l'insertion de chemin

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

Merci beaucoup pour votre aide. Tout cela semble très raisonnable. Cependant, j'ai essayé mais ça n'a pas marché. J'ai essayé de me débattre un peu mais sans succès. Merci beaucoup. – Assaf

+0

Essayez d'ouvrir la page dans Firefox, puis ouvrez le plugin firebug pour voir le chemin qui est en cours d'écriture. L'image se trouve-t-elle dans le répertoire Images à la racine de votre site? En outre, essayez de supprimer le trait d'union du nom de l'image et du lien. Il existe différents types de trait d'union et ils peuvent ne pas correspondre –

3

Pour email vous ne devriez pas donner le chemin relatif comme « /Images/blabla-logo.png » le seul fonctionne pour les pages du site interne, au lieu de cela, vous devez donner le chemin complet comme

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

Je vous suggère de ne pas inclure l'image en utilisant le chemin au lieu de cela essayer incorporer une image dans votre e-mail.

+0

C'est ce que je fais. Toujours se référer à l'image "live" sur le serveur "live" avec le chemin complet. –

0

Avez-vous essayé d'utiliser AlternateView?

Un exemple est here.

+0

Si vous voulez l'exemple C# alors vous pouvez jeter un oeil sur le lien suivant. http://www.codeproject.com/KB/aspnet/inkrajesh.aspx –

Questions connexes