enviar-correo-electronico-desde-outlook-con-csharp

Enviar correo electrónico desde Outlook con C#

Una necesidad habitual tanto en el mundo de la gestión de sistemas como dentro del ámbito de la automatización es poder enviar un correo electrónico de forma automática, sin intervención del usuario, bien sea de forma periódica o al ocurrir una determinada alerta o evento.

Por ejemplo, podemos definir un aviso ante una caía de un sistema, la instalación de un determinado software, avisos de intrusión, alarmas de nivel de agua, o el envío periódico de un informe con las estadísticas de uso de un servidor, el estado de stocks de un almacén… entre un sin fin de posibilidades.

Existen diferentes formas de enviar un email desde un programa, pero una realmente sencilla es aprovechar la interconectividad que nos brinda el .NET Framework. De esta forma, podemos usar Outlook para mandar un email sin intervención alguna por parte del usuario en cualquier ordenador que tenga una cuenta correctamente correctamente.

Preparando el proyecto

Para usar la función podemos crear un nuevo proyecto de C# en Visual Studio, o bien simplemente emplear un proyecto anterior existente.

Una vez tengamos el proyecto listo y correctamente configurado debemos añadir las siguientes referencias:

  • Microsoft.Office.Interop.Outlook

Una vez añadida podemos pasar a codificar nuestra función.

Código de la función

A continuación tenemos la función que realiza el envío. Esta recibe como parámetros la dirección, el campo asunto, y el contenido principal. Podemos usar HTML para dar formato al contenido del email, o bien usar texto plano.

public static Boolean SendEmailWithOutlook(string mailDirection, string mailSubject, string mainContent)
{
  try
  {
    var oApp = new Outlook.Application();

    Microsoft.Office.Interop.Outlook.NameSpace ns = oApp.GetNamespace("MAPI");
    var f = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

    System.Threading.Thread.Sleep(1000);

    var mailItem = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    mailItem.Subject = mailSubject;
    mailItem.HTMLBody = mailContent;
    mailItem.To = mailDirection;
    mailItem.Send();

  }
  catch (Exception ex)                           
  {
    return false;
  }
  finally
  {
  }
  return true;
}

Como veis es un código realmente sencillo. Simplemente creamos un objeto de aplicación Outlook y usamos este para crear un nuevo email. Luego asignamos la dirección, asunto y contenido, y finalmente procedemos a su envío.

Uso de la función

El uso de la función es igualmente sencillo. A continuación tenéis un ejemplo directamente desde la función Main.

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    string mailDirection = @"direccionTest@test.com";
    string mailSubject = "Subject test";

    string mainContent;
    mainContent = "Mensaje de prueba";
    mainContent += "<br>" + "Otra línea";
    mainContent += "<br>" + "Otra línea";

    SendEmailWithOutlook(mailDirection, mailSubject, mailContent);
}

Simplemente creamos cadenas de texto con los campos necesarios, y empleamos nuestra función para realizar el envío.

Como veis es realmente sencillo y cómodo enviar un correo electrónico mediante C# y Outlook. En próximas entradas iremos explicando más usos potenciales del Framework .Net para interconectar aplicaciones.