Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase SmtpClient

 

Publicado: octubre de 2016

Permite a las aplicaciones enviar correo electrónico mediante el protocolo Simple de transferencia de correo (SMTP).

Espacio de nombres:   System.Net.Mail
Ensamblado:  System (en System.dll)

System.Object
  System.Net.Mail.SmtpClient

public class SmtpClient : IDisposable

NombreDescripción
System_CAPS_pubmethodSmtpClient()

Inicializa una nueva instancia de la clase SmtpClient utilizando el archivo de configuración.

System_CAPS_pubmethodSmtpClient(String)

Inicializa una nueva instancia de la clase SmtpClient que envía correo electrónico mediante el servidor SMTP especificado.

System_CAPS_pubmethodSmtpClient(String, Int32)

Inicializa una nueva instancia de la clase SmtpClient que envía correo electrónico mediante el servidor SMTP y el puerto especificados.

NombreDescripción
System_CAPS_pubpropertyClientCertificates

Especificar qué certificados se deben utilizar para establecer la conexión de capa de Sockets seguros (SSL).

System_CAPS_pubpropertyCredentials

Obtiene o establece las credenciales utilizadas para autenticar al remitente.

System_CAPS_pubpropertyDeliveryFormat

Obtiene o establece el formato de entrega utilizada por SmtpClient para enviar correo electrónico.

System_CAPS_pubpropertyDeliveryMethod

Especifica el correo electrónico saliente cómo se controlarán los mensajes.

System_CAPS_pubpropertyEnableSsl

Especifique si el SmtpClient utiliza capa de Sockets seguros (SSL) para cifrar la conexión.

System_CAPS_pubpropertyHost

Obtiene o establece el nombre o dirección IP del host utilizado para las transacciones SMTP.

System_CAPS_pubpropertyPickupDirectoryLocation

Obtiene o establece la carpeta donde las aplicaciones guardan los mensajes de correo electrónico para ser procesados por el servidor SMTP local.

System_CAPS_pubpropertyPort

Obtiene o establece el puerto utilizado para las transacciones SMTP.

System_CAPS_pubpropertyServicePoint

Obtiene la conexión de red utilizada para transmitir el mensaje de correo electrónico.

System_CAPS_pubpropertyTargetName

Obtiene o establece el nombre de proveedor de servicio (SPN) a usar para la autenticación cuando se usa la protección extendida.

System_CAPS_pubpropertyTimeout

Obtiene o establece un valor que especifica la cantidad de tiempo después del cual sincrónica Send agota el tiempo de espera de llamada.

System_CAPS_pubpropertyUseDefaultCredentials

Obtiene o establece un Boolean valor que controla si el DefaultCredentials se envían con las solicitudes.

NombreDescripción
System_CAPS_pubmethodDispose()

Envía un mensaje QUIT al servidor SMTP, finaliza la conexión TCP sin contratiempos y libera todos los recursos utilizados por la instancia actual de la SmtpClient clase.

System_CAPS_protmethodDispose(Boolean)

Envía un mensaje QUIT al servidor SMTP, correctamente finaliza la conexión TCP, libera todos los recursos utilizados por la instancia actual de la SmtpClient de clase y, opcionalmente, desecha los recursos administrados.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_protmethodOnSendCompleted(AsyncCompletedEventArgs)

Genera el evento SendCompleted.

System_CAPS_pubmethodSend(MailMessage)

Envía el mensaje especificado a un servidor SMTP para la entrega.

System_CAPS_pubmethodSend(String, String, String, String)

Envía el mensaje de correo electrónico especificada a un servidor SMTP para la entrega. El remitente del mensaje, los destinatarios, asunto y cuerpo del mensaje se especifican mediante String objetos.

System_CAPS_pubmethodSendAsync(MailMessage, Object)

Envía el mensaje de correo electrónico especificada a un servidor SMTP para la entrega. Este método no bloquea el subproceso que realiza la llamada y permite al llamador pasar un objeto al método que se invoca cuando finaliza la operación.

System_CAPS_pubmethodSendAsync(String, String, String, String, Object)

Envía un mensaje de correo electrónico a un servidor SMTP para la entrega. El remitente del mensaje, los destinatarios, asunto y cuerpo del mensaje se especifican mediante String objetos. Este método no bloquea el subproceso que realiza la llamada y permite al llamador pasar un objeto al método que se invoca cuando finaliza la operación.

System_CAPS_pubmethodSendAsyncCancel()

Cancela una operación asincrónica para enviar un mensaje de correo electrónico.

System_CAPS_pubmethodSendMailAsync(MailMessage)

Envía el mensaje especificado a un servidor SMTP para la entrega de una operación asincrónica.

System_CAPS_pubmethodSendMailAsync(String, String, String, String)

Envía el mensaje especificado a un servidor SMTP para la entrega de una operación asincrónica. . El remitente del mensaje, los destinatarios, asunto y cuerpo del mensaje se especifican mediante String objetos.

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

NombreDescripción
System_CAPS_pubeventSendCompleted

Se produce cuando finaliza una operación de envío de correo electrónico asincrónica.

La clase SmtpClient se utiliza para enviar correo electrónico a un servidor SMTP para la entrega. El protocolo SMTP se define en RFC 2821, que está disponible en http://www.ietf.org.

Las clases que aparecen en la tabla siguiente se utilizan para crear mensajes de correo electrónico que pueden enviarse mediante SmtpClient.

Clase

Descripción

Attachment

Representa los archivos adjuntos. Esta clase permite adjuntar archivos, secuencias o texto a un mensaje de correo electrónico.

MailAddress

Representa la dirección de correo electrónico del remitente y los destinatarios.

MailMessage

Representa un mensaje de correo electrónico.

Para construir y enviar un mensaje de correo electrónico mediante SmtpClient, debe especificar la siguiente información:

  • El servidor de host de SMTP que se utiliza para enviar correo electrónico. Consulte las propiedades Host y Port.

  • Credenciales para la autenticación, si son requeridas por el servidor SMTP. Vea la propiedad Credentials.

  • La dirección de correo electrónico del remitente. Consulte la Send y SendAsync métodos que toman un from parámetro. Consulte también el MailMessage.From propiedad.

  • La dirección de correo electrónico o direcciones de los destinatarios. Consulte la Send y SendAsync métodos que toman un recipient parámetro. Consulte también el MailMessage.To propiedad.

  • El contenido del mensaje. Consulte la Send y SendAsync métodos que toman un body parámetro. Consulte también el MailMessage.Body propiedad.

Para incluir un archivo adjunto con un mensaje de correo electrónico, crear primero los datos adjuntos mediante la Attachment clase y, a continuación, agregarlos al mensaje mediante el MailMessage.Attachments propiedad. Según el lector de correo electrónico usado por los destinatarios y el tipo de archivo de los datos adjuntos, algunos destinatarios no puede leer los datos adjuntos. Para los clientes que no pueden mostrar los datos adjuntos en su forma original, puede especificar las vistas alternativas mediante el MailMessage.AlternateViews propiedad.

Puede utilizar la aplicación o los archivos de configuración de máquina para especificar default host, puerto y valores de las credenciales para todos los SmtpClient objetos. Para obtener más información, consulta <mailSettings> (Elemento, Configuración de red).

Para enviar el mensaje de correo electrónico y el bloque de tiempo de espera para que el correo electrónico que se transmitan al servidor SMTP, utilice uno de los sincrónico Send métodos. Para permitir el subproceso principal de su programa siga ejecutándose mientras se transmite el correo electrónico, utilice uno de los asincrónica SendAsync métodos. El SendCompleted evento se desencadena cuando un SendAsync Complete la operación. Para recibir este evento, debe agregar una SendCompletedEventHandler delegar a SendCompleted. El SendCompletedEventHandler delegado debe hacer referencia a un método de devolución de llamada que controle la notificación de SendCompleted eventos. Para cancelar una transmisión de correo electrónico asincrónica, utilice el SendAsyncCancel método.

System_CAPS_noteNota

Si hay una transmisión de correo electrónico en curso y se llama SendAsync o Send de nuevo, recibirá un InvalidOperationException.

La conexión establecida por la instancia actual de la SmtpClient puede volver a utilizar la clase en el servidor SMTP si una aplicación desea enviar varios mensajes al mismo servidor SMTP. Esto es especialmente útil cuando se utiliza la autenticación o cifrado de establecer una conexión con el servidor SMTP. El proceso de autenticar y establecer una sesión de TLS puede ser operaciones costosas. Un requisito para volver a establecer una conexión para cada mensaje al enviar una gran cantidad de correo electrónico en el mismo servidor SMTP podría tener un impacto significativo en el rendimiento. Hay una serie de aplicaciones de correo electrónico de gran volumen que enviar actualizaciones de estado de correo electrónico, distribuciones de boletín o alertas de correo electrónico. También muchas aplicaciones cliente de correo electrónico admiten un modo fuera de línea donde los usuarios pueden redactar muchos mensajes de correo electrónico que se envían más tarde cuando se establece una conexión al servidor SMTP. Es habitual que un cliente de correo electrónico enviar todos los mensajes SMTP a un servidor SMTP concreto (proporcionado por el proveedor de servicios de Internet) que después reenvía este correo electrónico a otros servidores SMTP.

El SmtpClient implementación de la clase de grupos de conexiones SMTP para que pueda evitar la sobrecarga de volver a establecer una conexión para cada mensaje en el mismo servidor. Una aplicación puede reutilizar el mismo SmtpClient objeto para enviar muchos correos electrónicos diferentes al mismo servidor SMTP y a muchos servidores SMTP diferentes. Como resultado, no hay ninguna manera de determinar si una aplicación ha terminado con el SmtpClient objeto y se deben limpiar.

Cuando finaliza una sesión SMTP y el cliente desea finalizar la conexión, debe enviar un mensaje de salir al servidor para indicar que no tiene ningún más mensaje para enviar. Esto permite al servidor liberar los recursos asociados con la conexión desde el cliente y procesar los mensajes que fueron enviados por el cliente.

La SmtpClient clase no tiene ningún Finalize método, por lo que una aplicación debe llamar a Dispose para liberar explícitamente los recursos. El Dispose método recorre en iteración todas las conexiones establecidas con el servidor SMTP especificado en el Host propiedad y envía un mensaje QUIT seguido de la correcta finalización de la conexión TCP. El Dispose método también libera los recursos no administrados utilizados por el Socket y, opcionalmente, desecha los recursos administrados.

Llame a Dispose cuando haya terminado de usar SmtpClient. El método Dispose deja el SmtpClient en un estado no utilizable. Después de llamar a Dispose, hay que liberar todas las referencias a la SmtpClient para el recolector de elementos no utilizados pueda reclamar la memoria que el SmtpClient estaba ocupando.

En el ejemplo de código siguiente se muestra cómo enviar un mensaje de correo electrónico de forma asincrónica.


using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async
{
    public class SimpleAsynchronousExample
    {
        static bool mailSent = false;
        private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
        {
            // Get the unique identifier for this asynchronous operation.
             String token = (string) e.UserState;

            if (e.Cancelled)
            {
                 Console.WriteLine("[{0}] Send canceled.", token);
            }
            if (e.Error != null)
            {
                 Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
            } else
            {
                Console.WriteLine("Message sent.");
            }
            mailSent = true;
        }
        public static void Main(string[] args)
        {
            // Command line argument must the the SMTP host.
            SmtpClient client = new SmtpClient(args[0]);
            // Specify the e-mail sender.
            // Create a mailing address that includes a UTF8 character
            // in the display name.
            MailAddress from = new MailAddress("jane@contoso.com", 
               "Jane " + (char)0xD8+ " Clayton", 
            System.Text.Encoding.UTF8);
            // Set destinations for the e-mail message.
            MailAddress to = new MailAddress("ben@contoso.com");
            // Specify the message content.
            MailMessage message = new MailMessage(from, to);
            message.Body = "This is a test e-mail message sent by an application. ";
            // Include some non-ASCII characters in body and subject.
            string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
            message.Body += Environment.NewLine + someArrows;
            message.BodyEncoding =  System.Text.Encoding.UTF8;
            message.Subject = "test message 1" + someArrows;
            message.SubjectEncoding = System.Text.Encoding.UTF8;
            // Set the method that is called back when the send operation ends.
            client.SendCompleted += new 
            SendCompletedEventHandler(SendCompletedCallback);
            // The userState can be any object that allows your callback 
            // method to identify this send operation.
            // For this example, the userToken is a string constant.
            string userState = "test message1";
            client.SendAsync(message, userState);
            Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
            string answer = Console.ReadLine();
            // If the user canceled the send, and mail hasn't been sent yet,
            // then cancel the pending operation.
            if (answer.StartsWith("c") && mailSent == false)
            {
                client.SendAsyncCancel();
            }
            // Clean up.
            message.Dispose();
            Console.WriteLine("Goodbye.");
        }
    }
}

.NET Framework
Disponible desde 2.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: