none
Abrir Microsoft Outlook desde el Servidor ASP.Net C# RRS feed

  • Pregunta

  • Quisiera saber si lo que estoy haciendo está bien. Quiero abrir Outlook desde el servidor, vi que lo podía hacer, además quiero llenar los campos del Outlook, mail, Asunto, Cuerpo en html desde la base de datos, en local funciona bien, pero no sé cómo puedo agregar dos imágenes en el cuerpo del mail, un logo en la cabecera y la firma de la persona que envía el mail, al final, probé con JQuery pero el texto no sé cómo podía ponerlo en html ni como adjuntar también las imágenes.

    Este es el código en asp.net C# Outlook 2010

    string html = "<img src='cid:imgen' />" +
                  "<html><head><meta content=\"text/html; charset=utf-8\" /></head><body>" +
                  "<p>" + Fecha + "</p>" +
                  "<p>Señores<br>" +
                  "<strong>" + Empresa + "</strong><br>" +
                  Direccion + "<br>" +
                  Distrito + "</p>" +
                  Cuerpo +
                  "<img src='cid:imgFirma' />" +
                  firmaM +
                  "</body></html>";
                try {
                    Outlook.Application objOutlook = new Outlook.Application();
                    Outlook.MailItem mic = (Outlook.MailItem)(objOutlook.CreateItem(Outlook.OlItemType.olMailItem));
                    mic.To = "ventas@xxxx.pe";
                    mic.Subject = Asunto;
                    mic.HTMLBody = html;
                    mic.Attachments.Add("G:\\Ventas\\Vistas\\Firmas\\AGM2.jpg", Microsoft.Office.Interop.Outlook.OlAttachmentType.olEmbeddeditem, 1, "Assignment_note");
                    mic.Display(false);
                }

    miércoles, 3 de septiembre de 2014 9:29

Respuestas

  • Hola wanmr, puedes crear otro formulario (tipo Popup) y allí obtienes todos los detalles que deseas enviar por correo (algo así como el Redactar de Gmail), una vez hecho esto puedes enviar el correo con la clase System.Net.Mail.MailMessage.

    Podrías crear una Función genérica para tu aplicación que se encargue del envío de correo tanto para el como para el No, así aplicas el concepto de Reutilización.

    Espero sea de utilidad mi aporte.


    Christian Amado | Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer

    • Marcado como respuesta wanmr viernes, 5 de septiembre de 2014 18:02
    viernes, 5 de septiembre de 2014 13:04

Todas las respuestas

  • Hola wanmr, un poco de código para intentar hacerlo:

    string html = "<img src='url_completa' alt='' />" +
                  "<html><head><meta content=\"text/html; charset=utf-8\" /></head><body>" +
                  "<p>" + Fecha + "</p>" +
                  "<p>Señores<br>" +
                  "<strong>" + Empresa + "</strong><br>" +
                  Direccion + "<br>" +
                  Distrito + "</p>" +
                  Cuerpo +
                  "<img src='url_completa' alt='' />" +
                  firmaM +
                  "</body></html>";
    try 
    {
        Outlook.Application objOutlook = new Outlook.Application();
        NameSpace ns = app.GetNamespace("mapi");
        ns.Logon("DESDE_Email-Id", "Contraseña", false, true)
        Outlook.MailItem mic = (Outlook.MailItem)(objOutlook.CreateItem(Outlook.OlItemType.olMailItem));
        mic.To = "ventas@xxxx.pe";
        mic.Subject = Asunto;
        mic.HTMLBody = html;
        mic.Attachments.Add("G:\\Ventas\\Vistas\\Firmas\\AGM2.jpg", Type.Missing, Type.Missing, Type.Missing);
        mic.Display(false);
        mic.Send();
        ns.Logoff();
    }
    

    Espero resuelva el inconveniente.

    Saludos


    Christian Amado | Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer

    jueves, 4 de septiembre de 2014 12:58
  • hola

    pero porque lo haces de esta forma, no creo que sea correcto

    desde un desarrollo web se usa la clase SmtpClient y MailMessage para enviar mail y no las api COM de office

    MailMessage – Adjuntar Imagen en el cuerpo del Mail

    en el articulo explcio como lo harias con estas clases

    recomendacion no uses en eun ambiente web las librerias de outlook si puede evitarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de septiembre de 2014 13:01
  • Leandro, creo que la idea es hacer un seguimiento de los correos. Con la clase SmtpClient no puedes hacer un seguimiento del correo enviado. Si lo haces desde el Outlook tienes "Elementos enviados" y lo puedes ver desde allí. 

    Desde ese punto de vista creo que está bien lo que propone, ahora bien, sino necesita el seguimiento del correo estoy totalmente de acuerdo contigo.

    Saludos.


    Christian Amado | Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer

    jueves, 4 de septiembre de 2014 13:06
  • hola Christian

    pero en el planteo de wanmr no veo que comente que realiza un seguimiento

    ademas como comente localmente le funciona bien, el problema se lo va a encontrar cuando lo suba al server productivo ya que configurar office en el servidor no siempre es simple de lograr

    outlook ejecuta con una determinada cuenta, y el IIS crea el sitio con un usuario generico, con lo cual va a tener que impersonar el sitio y demas problemas relacionados con esto

    mi recomendacion es que use el SmtpClient

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de septiembre de 2014 13:10
  • En principio agradecerles tanto a Christian como Leandro por sus respuestas, pero debí a ver comentado desde un principio lo siguiente.

    Todo nace desde un GridView que muestra una relación de personas, al seleccionar cualquiera de ellos lo primero que se hace es preguntar si se desea enviar el mail automáticamente, sí o no.

    Si fuese si, este se envía haciendo uso del System.Net.Mail.MailMessage, incluso algo que tampoco lo comente, se personaliza un documento de Word desde una plantilla y este se adjunta al mail, todo esto funciona bien y el cuerpo del mail está en HTML.

    Cuando la respuesta es no, es porque el usuario quiere cambiar parte del documento de Word o el cuerpo del mail, que se cargan desde la base de datos por eso es que no se envía y solo se muestra Outlook, mic.Display(false); para que el usuario echa las modificaciones para ese mail lo envié desde el mismo Outlook.

    La verdad si esto va a funcionar desde el servidor no lo sé, mi hosting no me da servicio de Word por tanto no lo puedo probar y lo otro es que he indagado hacerlo desde el lado del cliente con JQuery, abro el Word pero no se puede cargar el cuerpo en HTML, solo lo hace en texto y tampoco sé cómo podría incrustar en el cuerpo el logo y firma de la persona, salvo que haya una manera que desconozco.

    De que otra manera podría solucionar esto si tuviesen la respuesta desde ya mil gracias.

    jueves, 4 de septiembre de 2014 22:01
  • Hola wanmr, puedes crear otro formulario (tipo Popup) y allí obtienes todos los detalles que deseas enviar por correo (algo así como el Redactar de Gmail), una vez hecho esto puedes enviar el correo con la clase System.Net.Mail.MailMessage.

    Podrías crear una Función genérica para tu aplicación que se encargue del envío de correo tanto para el como para el No, así aplicas el concepto de Reutilización.

    Espero sea de utilidad mi aporte.


    Christian Amado | Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer

    • Marcado como respuesta wanmr viernes, 5 de septiembre de 2014 18:02
    viernes, 5 de septiembre de 2014 13:04
  • Exacto Christian, esa puede ser la solución, creo me cerré demasiado en querer solucionar en la forma más directa, pero así funcionaria muy bien, solo me queda la duda que comenta Leandro sobre si va a funcionar bien desde el servidor, ya será otro problema, y si es importante el seguimiento de los correos, pero con ponerle que envié una copia al correo de la persona encargada se estaría solucionando, una vez más muchas gracias por tu gentileza.

    viernes, 5 de septiembre de 2014 18:02
  • Muy contento de que hayas encontrado uan respuesta favorable. Estamos para ayudarnos.

    Saludos


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile

    viernes, 5 de septiembre de 2014 18:15
  • hola

    >>pero con ponerle que envié una copia al correo de la persona encargada

    si la idea es tener una copia del mail que se envia podrias poner en la propiedad BCC (con copia oculta) el mail donde queires enviar una copia, en ese mail revisaras

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de septiembre de 2014 18:15
  • Exacto esa es la idea, gracias Leandro, muy amable de tu parte.

    viernes, 5 de septiembre de 2014 23:53