EmbeddedMailObject Classe

Definizione

Rappresenta un elemento da incorporare in un messaggio di posta elettronica costruito usando la classe 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
Ereditarietà
EmbeddedMailObject
Attributi

Esempio

Nell'esempio di codice seguente viene illustrata una pagina di ASP.NET che usa un controllo Web e include un ChangePassword gestore eventi per l'evento SendingMail denominato SendingMail. Nell'esempio di codice si presuppone che il sito Web ASP.NET sia stato configurato per l'uso dell'appartenenza ASP.NET e l'autenticazione di Forms e che un utente sia stato creato il cui nome e la password sono noti all'utente. Per altre informazioni, vedere Procedura: Implementare l'autenticazione di moduli semplici.

Se la modifica della password ha esito positivo, il codice nel SendingMail gestore eventi tenta di inviare un messaggio di posta elettronica all'utente per confermare la modifica. SMTP deve essere già configurato nel server per consentire il funzionamento di questo esempio di codice. Per informazioni su come configurare un server SMTP, vedere Procedura: Installare e configurare server virtuali SMTP in IIS 6.0. Ai fini di questo esempio, non è necessario configurare un server SMTP; l'esempio viene costruito per testare un errore per l'invio di un messaggio di posta elettronica.

Se un server di posta elettronica non è configurato correttamente o si verifica un altro errore e non è possibile inviare il messaggio di posta elettronica, viene chiamata la SendMailError funzione. Viene visualizzato un messaggio all'utente. Inoltre, un evento viene registrato nel registro eventi di Windows Application con il presupposto che esista già un'origine evento denominata MySamplesSite. Per creare l'origine evento specificata, vedere l'esempio di codice seguente. Per altre informazioni sulla creazione di un'origine evento, vedere Gestione eventi server in pagine Web Forms ASP.NET. La Handled proprietà dell'oggetto è impostata su per true indicare che l'errore SendMailErrorEventArgs è stato gestito.

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

Usare l'esempio di codice seguente se è necessario aggiungere a livello di codice l'origine evento denominata MySamplesSite al log dell'applicazione. Questa origine evento deve esistere per consentire al primo esempio di codice di funzionare correttamente. L'esempio di codice seguente richiede privilegi di amministratore.

#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

Il codice di esempio seguente può essere usato come file ChangePasswordMail.htm per il codice di esempio precedente.

Importante

L'invio di nomi di account utente o password nel messaggio di posta elettronica è una potenziale minaccia di sicurezza. Email messaggi vengono in genere inviati in testo normale e possono essere letti da applicazioni di rete speciali "sniffing". Per migliorare la sicurezza, usare le mitigazioni descritte in Protezione dei controlli di accesso.

<html>  
<head><title></title></head>  
<body>  
<form>  

  <h1>Your password for the account named &quot;<%Username%>&quot; 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>  

Commenti

Rappresenta EmbeddedMailObject un elemento da incorporare in un messaggio di posta elettronica. Questi elementi incorporati possono essere file di immagine, ad esempio logo aziendali. Ogni elemento incorporato viene specificato da un identificatore e da un percorso.

Per assicurarsi che un oggetto incorporato venga visualizzato correttamente all'interno del file di messaggio di posta elettronica, è necessario soddisfare le condizioni seguenti:

  • Il messaggio di posta elettronica è in formato HTML.

  • L'elemento è un file di immagine (.jpg, .gif, .bmp e così via).

  • Il file del corpo formattato HTML specificato nella BodyFileName proprietà contiene un riferimento al file di immagine usando la sintassi seguente:

    <img src="cid:identifier" alt="Alternate Text" />.  
    

Se un oggetto EmbeddedMailObject viene aggiunto a un messaggio di posta elettronica e non soddisfa tutti i requisiti specificati in precedenza, probabilmente verrà visualizzato come allegato nel messaggio di posta elettronica. Se un elemento viene fatto riferimento a un identificatore nel messaggio di posta elettronica ma non incluso come elemento incorporato, verrà visualizzato come allegato interrotto quando viene visualizzato il messaggio di posta elettronica.

Archivia EmbeddedMailObjectsCollection una raccolta di EmbeddedMailObject oggetti per un singolo messaggio di posta elettronica. Viene EmbeddedMailObjectsCollection usato dalla EmbeddedObjects proprietà dell'oggetto MailDefinition per creare il messaggio di posta elettronica.

I messaggi di posta elettronica che consentono agli oggetti incorporati sono configurabili nei controlli Web seguenti impostando le proprietà MailDefinition dichiarative:

Nota

I valori negli EmbeddedMailObject oggetti e EmbeddedMailObjectsCollection non vengono archiviati nello stato di visualizzazione. Ciò consente di proteggere gli utenti malintenzionati individuando le informazioni sul percorso per il server.

Costruttori

EmbeddedMailObject()

Inizializza una nuova istanza della classe EmbeddedMailObject.

EmbeddedMailObject(String, String)

Inizializza una nuova istanza della classe EmbeddedMailObject, utilizzando l'identificatore e il percorso specificati per inserire i dati nell'oggetto.

Proprietà

Name

Ottiene o imposta il nome utilizzato come identificatore dell'elemento da incorporare in un messaggio di posta costruito con la classe MailDefinition.

Path

Ottiene o imposta il percorso utilizzato per recuperare un elemento da incorporare in un messaggio di posta costruito con la classe MailDefinition.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche