Actividad de envio de correo electrónico para Workflow Foundation

viernes, 10 de octubre de 2008

Esta idea tal vez ya paso por la cabeza de alguien mas, no es ninguna novedad, pero es bueno compartir este tipo de "componentes" que nos facilitan la vida al momento de encarar un proyecto.

En el caso especifico de este código, se ha creado una actividad que esta orientada a ser usada con Window Workflow Foundation para el envio de correos electronicos, si bien esta clase es basica, es muy util (asi lo veo yo) y el código puede llegar a crecer de acuerdo a las necesidades propias de su implementación.

Los namespaces necesarios para el proyecto son:

Sin mas preambulo aquí les dejo el código.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace Workflows.Activities
{
    public partial class EnviarMail: System.Workflow.ComponentModel.CompositeActivity
  
{
        public EnviarMail()
        {
            InitializeComponent();
        }

        [Description("El campo A(dirección destino) del correo electrónico")]
        [Category("AddressTo")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string AddressTo
        {
            get{ return(string)GetValue(AddressToProperty); }
            set{ SetValue(AddressToProperty, value); }
        }

        // DependencyProperty para AddressTo.
      
public static readonly DependencyProperty AddressToProperty = DependencyProperty.Register("AddressTo", typeof(string), typeof(EnviarMail));

        [Description("El campo De(dirección origen) del correo electrónico")]
        [Category("AddressFrom")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string AddressFrom
        {
            get{ return(string)GetValue(AddressFromProperty); }
            set{ SetValue(AddressFromProperty, value); }
        }

        //DependencyProperty para AddressFrom
      
public static readonly DependencyProperty AddressFromProperty = DependencyProperty.Register("AddressFrom", typeof(string), typeof(EnviarMail));


        [Description("El campo asunto del correo electrónico")]
        [Category("Subject")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string Subject
        {
            get{ return(string)GetValue(SubjectProperty); }
            set{ SetValue(SubjectProperty, value); }
        }

        //DependencyProperty para Subject.
      
public static readonly DependencyProperty SubjectProperty = DependencyProperty.Register("Subject", typeof(string), typeof(EnviarMail));


        [Description("El Cuerpo del mensaje")]
        [Category("MailMessage")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string MailMessage
        {
            get{ return(string)GetValue(MailMessageProperty); }
            set{ SetValue(MailMessageProperty, value); }
        }

        //DependencyProperty para MailMessage.
      
public static readonly DependencyProperty MailMessageProperty = DependencyProperty.Register("MailMessage", typeof(string), typeof(EnviarMail));


        [Description("Servidor para envio de correo electronico")]
        [Category("SmtpServer")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string SmtpServer
        {
            get{ return(string)GetValue(SmtpServerProperty); }
            set{ SetValue(SmtpServerProperty, value); }
        }

        //DependencyProperty para SmtpServer.
      
public static readonly DependencyProperty SmtpServerProperty =
            DependencyProperty.Register("SmtpServer", typeof(string), typeof(EnviarMail));

        [Description("Puerto por el que se esta presente el servicio de smtp")]
        [Category("SmptPort")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public int SmtpPort
        {
            get{ return(int)GetValue(SmtpPortProperty); }
            set{ SetValue(SmtpPortProperty, value); }
        }

        //DependencyProperty para SmtpPort.
      
public static readonly DependencyProperty SmtpPortProperty =
            DependencyProperty.Register("SmtpPort", typeof(int), typeof(EnviarMail));

        [Description("Nombre de usuario para acceder al servidor de SMTP")]
        [Category("Username")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string UserName
        {
            get{ return(string)GetValue(UserNameProperty); }
            set{ SetValue(UserNameProperty, value); }
        }

        //DependencyProperty para UserName.
      
public static readonly DependencyProperty UserNameProperty =
            DependencyProperty.Register("UserName", typeof(string), typeof(EnviarMail));


        [Description("Password del usuario para el envio de correo electronico")]
        [Category("Password")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string Password
        {
            get{ return(string)GetValue(PasswordProperty); }
            set{ SetValue(PasswordProperty, value); }
        }

        // DependencyProperty para Password.
      
public static readonly DependencyProperty PasswordProperty =
            DependencyProperty.Register("Password", typeof(string), typeof(EnviarMail));


        [Description("Bandera que determina si se debera proveeder de credenciales para el envio de mails")]
        [Category("UseSSL")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public bool UseSSL
        {
            get{ return(bool)GetValue(UseSSLProperty); }
            set{ SetValue(UseSSLProperty, value); }
        }

        //DependencyProperty para UseSSL.
      
public static readonly DependencyProperty UseSSLProperty =
            DependencyProperty.Register("UseSSL", typeof(bool), typeof(EnviarMail));

        protected override ActivityExecutionStatus Execute(ActivityExecutionContextcontext)
        {
            try
          
{
                System.Net.Mail.MailMessage mimail = newSystem.Net.Mail.MailMessage(AddressFrom, AddressTo, Subject, MailMessage);
                System.Net.Mail.SmtpClient mismtp = newSystem.Net.Mail.SmtpClient();
                mismtp.Host = SmtpServer;
                mismtp.Port = SmtpPort;
                mismtp.EnableSsl = UseSSL;
                if(UseSSL)
                { mismtp.Credentials = new System.Net.NetworkCredential(UserName,Password); }
               
                mismtp.Send(mimail);
                returnActivityExecutionStatus.Closed;
            }
            catch(System.Net.Mail.SmtpExceptionsmtpEx)
            {
                return HandleFault(context, smtpEx);
            }
        }
        protected override ActivityExecutionStatus HandleFault(ActivityExecutionContextexecutionContext, Exceptionexception)
        {
            return base.HandleFault(executionContext, exception);
        }

    }
}

0 comments:

Publicar un comentario