EmbeddedMailObject Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un elemento que se insertará en un mensaje de correo electrónico creado con la clase MailDefinition.
public ref class EmbeddedMailObject sealed
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.EmbeddedMailObject+EmbeddedMailObjectTypeConverter))]
public sealed class EmbeddedMailObject
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.EmbeddedMailObject+EmbeddedMailObjectTypeConverter))>]
type EmbeddedMailObject = class
Public NotInheritable Class EmbeddedMailObject
- Herencia
-
EmbeddedMailObject
- Atributos
Ejemplos
En el ejemplo de código siguiente se muestra una página de ASP.NET que usa un ChangePassword control Web e incluye un controlador de eventos para el SendingMail evento denominado SendingMail
. En el ejemplo de código se supone que el sitio web de ASP.NET se ha configurado para usar ASP.NET pertenencia y autenticación de formularios, y que se ha creado un usuario cuyo nombre y contraseña se conocen. Para obtener más información, vea Cómo: Implementar la autenticación de formularios simples.
Si el cambio de contraseña se realiza correctamente, el código del SendingMail
controlador de eventos intenta enviar un mensaje de correo electrónico al usuario para confirmar el cambio. SMTP ya debe estar configurado en el servidor para que este ejemplo de código funcione. Para obtener información sobre cómo configurar un servidor SMTP, vea Cómo: Instalar y configurar servidores virtuales SMTP en IIS 6.0. Para los fines de este ejemplo, no es necesario configurar un servidor SMTP; el ejemplo se construye para probar si se produce un error al enviar un mensaje de correo electrónico.
Si un servidor de correo no está configurado correctamente o se produce algún otro error y no se puede enviar el mensaje de correo electrónico, se llama a la SendMailError
función . Se muestra un mensaje al usuario. Además, se registra un evento en el registro de eventos de aplicación de Windows con la suposición de que ya existe un origen de eventos denominado MySamplesSite. Consulte el ejemplo de código siguiente para crear el origen de eventos especificado. Para obtener más información sobre cómo crear un origen de eventos, vea Control de eventos del servidor en ASP.NET páginas de formularios web. La Handled propiedad del SendMailErrorEventArgs objeto se establece en true
para indicar que se ha controlado el error.
<%@ Page Language="C#" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void MySendingMail(object sender, MailMessageEventArgs e)
{
Message1.Text = "Sent mail to you to confirm the password change.";
}
void MySendMailError(object sender, SendMailErrorEventArgs e)
{
Message1.Text = "Could not send email to confirm password change.";
// The MySamplesSite event source has already been created by an administrator.
System.Diagnostics.EventLog myLog = new System.Diagnostics.EventLog();
myLog.Log = "Application";
myLog.Source = "MySamplesSite";
myLog.WriteEntry(
"Sending mail via SMTP failed with the following error: " +
e.Exception.Message.ToString(),
System.Diagnostics.EventLogEntryType.Error);
e.Handled = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ChangePassword including a SendMailError Event</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align:center">
<h1>ChangePassword</h1>
<asp:LoginView ID="LoginView1" Runat="server"
Visible="true">
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" Runat="server" FormatString="You are logged in as {0}." />
<br />
</LoggedInTemplate>
<AnonymousTemplate>
You are not logged in
</AnonymousTemplate>
</asp:LoginView><br />
<asp:ChangePassword ID="ChangePassword1" Runat="server"
BorderStyle="Solid"
BorderWidth="1"
CancelDestinationPageUrl="~/Default.aspx"
DisplayUserName="true"
OnSendingMail="MySendingMail"
OnSendMailError="MySendMailError"
ContinueDestinationPageUrl="~/Default.aspx" >
<MailDefinition
BodyFileName="~\MailFiles\ChangePasswordMail.htm"
Subject="Activity information for you">
<EmbeddedObjects>
<asp:EmbeddedMailObject Name="LoginGif" Path="~\MailFiles\Login.gif" />
<asp:EmbeddedMailObject Name="PrivacyNoticeTxt" Path="~\MailFiles\PrivacyNotice.txt" />
</EmbeddedObjects>
</MailDefinition>
</asp:ChangePassword><br />
<asp:Label ID="Message1" Runat="server" ForeColor="Red" /><br />
<asp:HyperLink ID="HyperLink1" Runat="server"
NavigateUrl="~/Default.aspx">
Home
</asp:HyperLink>
</div>
</form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Public Sub MySendingMail(ByVal Sender As Object, ByVal e As MailMessageEventArgs)
Message1.Text = "Sent mail to you to confirm the password change."
End Sub
Public Sub MySendMailError(ByVal Sender As Object, ByVal e As SendMailErrorEventArgs)
Message1.Text = "Could not send mail to confirm the password change."
' The MySamplesSite event source has already been created by an administrator.
Dim myLog As System.Diagnostics.EventLog
myLog = new System.Diagnostics.EventLog
myLog.Log = "Application"
myLog.Source = "MySamplesSite"
myLog.WriteEntry("Sending mail via SMTP failed with the following error: " & e.Exception.Message.ToString(), System.Diagnostics.EventLogEntryType.Error)
e.Handled = True
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ChangePassword including a SendMailError Event</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align:center">
<h1>ChangePassword</h1>
<asp:LoginView ID="LoginView1" Runat="server"
Visible="true">
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" Runat="server" FormatString="You are logged in as {0}." />
<br />
</LoggedInTemplate>
<AnonymousTemplate>
You are not logged in
</AnonymousTemplate>
</asp:LoginView><br />
<asp:ChangePassword ID="ChangePassword1" Runat="server"
BorderStyle="Solid"
BorderWidth="1"
CancelDestinationPageUrl="~/Default.aspx"
DisplayUserName="true"
OnSendingMail="MySendingMail"
OnSendMailError="MySendMailError"
ContinueDestinationPageUrl="~/Default.aspx" >
<MailDefinition
BodyFileName="~\MailFiles\ChangePasswordMail.htm"
Subject="Activity information for you">
<EmbeddedObjects>
<asp:EmbeddedMailObject Name="LoginGif" Path="~\MailFiles\Login.gif" />
<asp:EmbeddedMailObject Name="PrivacyNoticeTxt" Path="~\MailFiles\PrivacyNotice.txt" />
</EmbeddedObjects>
</MailDefinition>
</asp:ChangePassword><br />
<asp:Label ID="Message1" Runat="server" ForeColor="Red" /><br />
<asp:HyperLink ID="HyperLink1" Runat="server"
NavigateUrl="~/Default.aspx">
Home
</asp:HyperLink>
</div>
</form>
</body>
</html>
Use el ejemplo de código siguiente si necesita agregar mediante programación el origen del evento denominado MySamplesSite al registro de la aplicación. Este origen de eventos debe existir para que el primer ejemplo de código funcione correctamente. En el ejemplo de código siguiente se requieren privilegios de administrador.
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
#endregion
namespace CreateEventSource
{
class Program
{
static void Main(string[] args)
{
try
{
// Create the source, if it does not already exist.
if (!EventLog.SourceExists("MySamplesSite"))
{
EventLog.CreateEventSource("MySamplesSite", "Application");
Console.WriteLine("Creating Event Source");
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySamplesSite";
// Write an informational entry to the event log.
myLog.WriteEntry("Testing writing to event log.");
Console.WriteLine("Message written to event log.");
}
catch (Exception e)
{
Console.WriteLine("Exception:");
Console.WriteLine("{0}", e.ToString());
}
}
}
}
Imports System.Collections.Generic
Imports System.Text
Imports System.Diagnostics
Namespace CreateEventSource
Class Program
Sub Main()
Try
' Create the source, if it does not already exist.
If Not (EventLog.SourceExists("MySamplesSite")) Then
EventLog.CreateEventSource("MySamplesSite", "Application")
Console.WriteLine("Creating Event Source")
End If
' Create an EventLog instance and assign its source.
Dim myLog As New EventLog
myLog.Source = "MySamplesSite"
' Write an informational entry to the event log.
myLog.WriteEntry("Testing writing to event log.")
Console.WriteLine("Message written to event log.")
Catch e As Exception
Console.WriteLine("Exception:")
Console.WriteLine(e.ToString)
End Try
End Sub
End Class
End Namespace
El código de ejemplo siguiente se puede usar como archivo ChangePasswordMail.htm para el código de ejemplo anterior.
Importante
El envío de nombres de cuenta de usuario o contraseñas por correo electrónico es una amenaza de seguridad potencial. Normalmente, los mensajes de correo electrónico se envían en texto sin formato y se pueden leer mediante aplicaciones especiales de red "sniffing". Para mejorar la seguridad, use las mitigaciones que se describen en Protección de controles de inicio de sesión.
<html>
<head><title></title></head>
<body>
<form>
<h1>Your password for the account named "<%Username%>" has changed.</h1>
<p>
If you did not initiate this change, please call 1-206-555-0100.
</p>
<p>
<a href="http://www.contoso.com/login.aspx">
<img src="cid:LoginGif" alt="Log In" />
</a>
</p>
<p>
Please read our attached Privacy Notice.
</p>
</form>
</body>
</html>
Comentarios
EmbeddedMailObject representa un elemento que se va a insertar en un mensaje de correo. Estos elementos incrustados pueden ser archivos de imagen como logotipos de la empresa. Cada elemento incrustado se especifica mediante un identificador y una ruta de acceso.
Para asegurarse de que un objeto incrustado se muestra correctamente en el archivo de mensaje de correo electrónico, se deben cumplir las condiciones siguientes:
El mensaje de correo está en formato HTML.
El elemento es un archivo de imagen (.jpg, .gif, .bmp, etc.).
El archivo de cuerpo con formato HTML especificado en la BodyFileName propiedad contiene una referencia al archivo de imagen mediante la sintaxis siguiente:
<img src="cid:identifier" alt="Alternate Text" />.
Si se agrega un elemento EmbeddedMailObject a un mensaje de correo y no cumple todos los requisitos especificados anteriormente, lo más probable es que se muestre como datos adjuntos en el mensaje de correo. Si un identificador hace referencia a un elemento en el mensaje de correo pero no se incluye como un elemento incrustado, aparecerá como datos adjuntos rotos cuando se vea el correo.
EmbeddedMailObjectsCollection almacena una colección de EmbeddedMailObject objetos para un único mensaje de correo. EmbeddedMailObjectsCollection La propiedad del MailDefinition objeto la usa EmbeddedObjects para crear el mensaje de correo.
Los mensajes de correo que permiten objetos incrustados se pueden configurar en los siguientes controles web estableciendo sus MailDefinition propiedades mediante declaración:
Nota
Los valores de los EmbeddedMailObject objetos y EmbeddedMailObjectsCollection no se almacenan en estado de vista. Esto protege contra usuarios malintencionados que detectan información de ruta de acceso para el servidor.
Constructores
EmbeddedMailObject() |
Inicializa una nueva instancia de la clase EmbeddedMailObject. |
EmbeddedMailObject(String, String) |
Inicializa una nueva instancia de la clase EmbeddedMailObject, utilizando, para rellenar el objeto, el nombre y la ruta de acceso especificados para el identificador. |
Propiedades
Name |
Obtiene o establece el nombre utilizado como identificador del elemento que se va a incrustar en un mensaje de correo creado con la clase MailDefinition. |
Path |
Obtiene o establece la ruta de acceso utilizada para recuperar un elemento que se va a incrustar en un mensaje de correo creado con la clase MailDefinition. |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |