none
Me ayudan a enviar correos electronicos? RRS feed

  • Pregunta

  • Hice en C# ASP.NET un formulario donde se ingresa una fecha y un correo electrónico. 

    La idea es que me mande un mensaje "Hola" al correo ingresado en la fecha ingresada :/

    Tengo muchísimas dudas :/

    1- sp_send_dbmail se puede usar en SQL SERVER 2008 R2 EXPRESS?

    2- Aquí explica como crear un perfil http://blog.sqlauthority.com/2008/08/23/sql-server-2008-configure-database-mail-send-email-from-sql-database/ pero ami no me aparece esa opción para crearlo :/

    3- ¿Como creo un JOB?

    4- Ese agente SQL es algo externo? es decir, tengo que descargar algo?

    De ante mano mil gracias, saludos


    • Editado AnalistaStr jueves, 23 de octubre de 2014 20:49
    jueves, 23 de octubre de 2014 20:45

Respuestas

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Mail;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SisttVentas.Utilitarios
    {
        class EnviarMail
        {
            private string _correoRemitente;
            private string _nombreRemitente;
            private string _correoDestino ;
            private string _correoDestino2 ;
            private string _correoDestino3 ;
    
    
            private string _asunto;
            private string _mensaje;
            private static string loginCorreo="azetasoftaqp@gmail.com"; //aqui pones tu correo de gmail
            private static string loginContrasena="contraseñadegmail"; //aqui va tu contraseña de gmail
            private static int puerto = 587;
            private static string smtp = "smtp.gmail.com";
            private static bool b = true;
    
    
            public string CorreoRemitente
            {
                get { return _correoRemitente; }
                set { _correoRemitente = value; }
            }
            public string NombreRemitente
            {
                get { return _nombreRemitente; }
                set { _nombreRemitente = value; }
            }
            public string CorreoDestino
            {
                get { return _correoDestino; }
                set { _correoDestino = value; }
            }
    
            public string CorreoDestino2
            {
                get { return _correoDestino2; }
                set { _correoDestino2 = value; }
            }
            public string CorreoDestino3
            {
                get { return _correoDestino3; }
                set { _correoDestino3 = value; }
            }
            public string Asunto
            {
                get { return _asunto; }
                set { _asunto = value; }
            }
            public string Mensaje
            {
                get { return _mensaje; }
                set { _mensaje = value; }
            }
    
    
            public void EnviarEmail()
            {
                try
                {
                MailMessage msg = new MailMessage();
    
                msg.To.Add(CorreoDestino);//e mail a quien se le envia
                msg.To.Add(CorreoDestino2);
                msg.To.Add(CorreoDestino3);
    
    
                msg.From = new MailAddress(CorreoRemitente, NombreRemitente, System.Text.Encoding.UTF8);
    
                msg.Subject = Asunto;
    
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
    
                msg.Body = Mensaje;
    
                msg.BodyEncoding = System.Text.Encoding.UTF8;
    
                msg.IsBodyHtml = false; //Si vas a enviar un correo con contenido html entonces cambia el valor a true
                //Aquí es donde se hace lo especial
    
                SmtpClient client = new SmtpClient();
    
                client.Credentials = new System.Net.NetworkCredential(loginCorreo, loginContrasena);
    
                client.Port = puerto;
    
                client.Host = smtp;//Este es el smtp valido para Gmail
    
                client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
    
    
                    client.Send(msg);
    
                    //return true;
                }
    
                catch (Exception ex)
                {
                   // MessageBox.Show(ex.Message + ex.StackTrace);
                  
                    //return false;
                }
    
            }
    
    
     
        }
    }

    Esa es la clase que programé hace unos meses, funciona de maravilla, lo uso en mi sistema de ventas para envíar alertas, le puedes llamar en un evento, o desde cualquier lugar, en tu caso cuando ingresen los datos.

    Ahora te voy a decir cómo tienes que instanciar la clase y llenar los datos.

    try
      {
    
    EnviarMail enviarMail = new EnviarMail();
                        enviarMail.CorreoRemitente = "azetasoftaqp@gmal.com"; //El correo de remitente que aparecerá, es el correo de gmail que creamos
                        enviarMail.NombreRemitente = "Informe Automatico Sistema AZETASOFT";// nombre que quieres que aparesca del remitente, oséa de ti  o del correo gmail
                        enviarMail.CorreoDestino = txtCorreoDestino1.Text;//destino 1 a quien se envia el correo
                        enviarMail.CorreoDestino2 = txtCorreoDestino2.Text;//destino 2 a quien se envia el correo
                        enviarMail.CorreoDestino3 = txtCorreoDestino3.Text;//destino 3 a quien se envia el correo, el punto es que si dejas en blanco alguno bota una excepcion, rellena todos
                        enviarMail.Asunto = "FACTURAS AL CRÉDITO QUE VENCE HOY" + Convert.ToString(hoy);// este es el asunto, pones lo que sea jajaj, borra hoy, esa variable no esta declarado.
                        enviarMail.Mensaje = mensaje;// este es el contenido del mensaje, yo lo tengo en una variable de tipo estring con nombre mensaje, tu puedes enviar cualquier cosa que sea texto plano.
                        if (tabla.Rows.Count > 0)
                        {
                            enviarMail.EnviarEmail();//envio el mensaje, lo pongo en una condicion porque yo verifico que haya algo de contenido. Lo puedes sacar el if, si no quieres validar nada, y si lo dejas asi, te va a dar un error porque no existe esa tabla, en conclusion tienes que sacarlo.
                        }
    
    
                    }
    catch (Exception ex)
    {
                        
                        MessageBox.Show(ex.Message + ex.StackTrace);
                        
    }


    Falta agregar el Using de la clase. esto lo haces desde el form que creaste.

    using SisttVentas.Utilitarios



    jefelon

    Ahí arriba en las configuraciones de gmail, Descarga de Correo    POP en el paso 1) tienes que seleccionar un opción, para que te salga ese texto "POP esta habilitado para todo correo"

    Puede enviar desde gmail, Outlok u otros, solo sería cuestión de averiguar el puerto y el smtp.

    • Editado Jefelon viernes, 24 de octubre de 2014 3:11 Google lapsus
    • Marcado como respuesta AnalistaStr viernes, 24 de octubre de 2014 4:19
    viernes, 24 de octubre de 2014 3:04

Todas las respuestas

  • Analista.

    En la versión Express NO puedes utilizar el agente, entonces NO puedes crear un job.

    Atte.

    CristianPM.


    DBA SQL Server Santiago/Chile

    jueves, 23 de octubre de 2014 21:34
  • Analista.

    En la versión Express NO puedes utilizar el agente, entonces NO puedes crear un job.

    Atte.

    CristianPM.


    DBA SQL Server Santiago/Chile

    Entiendo, entonces deberé bajarme la otra que no es Express.

    Mira esto :) por favor

    //CREAR PERFIL 
    msdb.dbo.sysmail_add_profile_sp
        @profile_name = 'perfil_prueba',
        @description = 'Perfil de prueba' ;
    //CREAR LA CUENTA
    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'cuenta_prueba',
        @description = 'Cuenta de Prueba',
        @email_address = 'miCorreo@hotmail.com',
        @replyto_address = 'miCorreo@hotmail.com';
    //AGREGAR CUENTA A PERFIL
        EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'perfil_prueba',
        @account_name = 'cuenta_prueba',
        @sequence_number =1 ;

    //CONFIGURO PARA QUE NO ME SALGA EL ERROR

    sp_configure'show advanced options',1;
    GO
    RECONFIGURE;
    GO
    sp_configure'Database Mail XPs',1;
    GO
    RECONFIGURE
    GO

    //INTENTO ENVIAR UN MENSAJE (LO AGREGA A LA COLA PERO NO LO MANDA)

    EXECUTE msdb.dbo.sp_send_dbmail
        @profile_name = 'perfil_prueba',
        @recipients = 'AQUIquieroRecibirELcorreo@hotmail.com',
        @body = 'Hola, estoy probando las herramientas SQL Server :)',
        @subject = 'Hola' ;

    jueves, 23 de octubre de 2014 21:50
  • Aquí tienes la solución.

    http://fasoftwaredev.wordpress.com/2011/04/12/enviar-correo-electronico-con-c-en-asp-net-y-windows-forms/

    Tambien te explica lo que necesitas, solo falta un detallito. No hace la configuraciòn para que se inicie sesiòn en gmail desde una aplicaciòn, si no haces esta configuración, gmail rechazará que una aplicaciòn desconocida inicie sesión.

    Entonces lo que deberìas hacer es crear una cuenta gmail, si ya lo tienes, solo debes configurarlo.

    1) Despues de que tengas la clase del blog anterior, pones la contraseña y el usuario donde te indica.

    2) Vas a gmail, te logueas y entras al link siguiente https://security.google.com/settings/security/activity

    en esa direccion permites el acceso de lugares desconocidas. (Esto es para que tu aplicacion use tu correo de gmail para enviar mensajes) o sino entra a este link y pones así.

    3) Configuras el reenvio de Reenvío y correo POP/IMAP. así


    jefelon

    jueves, 23 de octubre de 2014 22:02
  • Aquí tienes la solución.

    http://fasoftwaredev.wordpress.com/2011/04/12/enviar-correo-electronico-con-c-en-asp-net-y-windows-forms/

    Tambien te explica lo que necesitas, solo falta un detallito. No hace la configuraciòn para que se inicie sesiòn en gmail desde una aplicaciòn, si no haces esta configuración, gmail rechazará que una aplicaciòn desconocida inicie sesión.

    Entonces lo que deberìas hacer es crear una cuenta gmail, si ya lo tienes, solo debes configurarlo.

    1) Despues de que tengas la clase del blog anterior, pones la contraseña y el usuario donde te indica.

    2) Vas a gmail, te logueas y entras al link siguiente https://security.google.com/settings/security/activity

    en esa direccion permites el acceso de lugares desconocidas. (Esto es para que tu aplicacion use tu correo de gmail para enviar mensajes) o sino entra a este link y pones así.

    3) Configuras el reenvio de Reenvío y correo POP/IMAP. así


    jefelon

    Amigo jefelon, entonces voy a crearme una cuenta GMAIL, voy a hacer esos pasos para permitir que una aplicación externa acceda, PERO no quiero hacerlo desde C# ya que aquí plantié un ejemplo "facil" luego se complica mas.

    Entonces cuando creo la cuenta hago esto???

    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'NOMBRE',
        @description = 'DESCRIPCION',
        @email_address = 'nose@hotmail.com',
        @replyto_address = 'nose2@hotmail.com',
        @mailserver_name = 'AQUImiGMAIL.com' ; --> aquí gmail?

    jueves, 23 de octubre de 2014 22:13
  • Si lo vas a enviar fuera de tu red debes ocupar un SMTP valido que puede enviar correos.

    DBA SQL Server Santiago/Chile

    jueves, 23 de octubre de 2014 22:29
  • Si lo vas a enviar fuera de tu red debes ocupar un SMTP valido que puede enviar correos.

    DBA SQL Server Santiago/Chile

    smtp.live.com ???
    jueves, 23 de octubre de 2014 22:45
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Mail;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SisttVentas.Utilitarios
    {
        class EnviarMail
        {
            private string _correoRemitente;
            private string _nombreRemitente;
            private string _correoDestino ;
            private string _correoDestino2 ;
            private string _correoDestino3 ;
    
    
            private string _asunto;
            private string _mensaje;
            private static string loginCorreo="azetasoftaqp@gmail.com"; //aqui pones tu correo de gmail
            private static string loginContrasena="contraseñadegmail"; //aqui va tu contraseña de gmail
            private static int puerto = 587;
            private static string smtp = "smtp.gmail.com";
            private static bool b = true;
    
    
            public string CorreoRemitente
            {
                get { return _correoRemitente; }
                set { _correoRemitente = value; }
            }
            public string NombreRemitente
            {
                get { return _nombreRemitente; }
                set { _nombreRemitente = value; }
            }
            public string CorreoDestino
            {
                get { return _correoDestino; }
                set { _correoDestino = value; }
            }
    
            public string CorreoDestino2
            {
                get { return _correoDestino2; }
                set { _correoDestino2 = value; }
            }
            public string CorreoDestino3
            {
                get { return _correoDestino3; }
                set { _correoDestino3 = value; }
            }
            public string Asunto
            {
                get { return _asunto; }
                set { _asunto = value; }
            }
            public string Mensaje
            {
                get { return _mensaje; }
                set { _mensaje = value; }
            }
    
    
            public void EnviarEmail()
            {
                try
                {
                MailMessage msg = new MailMessage();
    
                msg.To.Add(CorreoDestino);//e mail a quien se le envia
                msg.To.Add(CorreoDestino2);
                msg.To.Add(CorreoDestino3);
    
    
                msg.From = new MailAddress(CorreoRemitente, NombreRemitente, System.Text.Encoding.UTF8);
    
                msg.Subject = Asunto;
    
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
    
                msg.Body = Mensaje;
    
                msg.BodyEncoding = System.Text.Encoding.UTF8;
    
                msg.IsBodyHtml = false; //Si vas a enviar un correo con contenido html entonces cambia el valor a true
                //Aquí es donde se hace lo especial
    
                SmtpClient client = new SmtpClient();
    
                client.Credentials = new System.Net.NetworkCredential(loginCorreo, loginContrasena);
    
                client.Port = puerto;
    
                client.Host = smtp;//Este es el smtp valido para Gmail
    
                client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
    
    
                    client.Send(msg);
    
                    //return true;
                }
    
                catch (Exception ex)
                {
                   // MessageBox.Show(ex.Message + ex.StackTrace);
                  
                    //return false;
                }
    
            }
    
    
     
        }
    }

    Esa es la clase que programé hace unos meses, funciona de maravilla, lo uso en mi sistema de ventas para envíar alertas, le puedes llamar en un evento, o desde cualquier lugar, en tu caso cuando ingresen los datos.

    Ahora te voy a decir cómo tienes que instanciar la clase y llenar los datos.

    try
      {
    
    EnviarMail enviarMail = new EnviarMail();
                        enviarMail.CorreoRemitente = "azetasoftaqp@gmal.com"; //El correo de remitente que aparecerá, es el correo de gmail que creamos
                        enviarMail.NombreRemitente = "Informe Automatico Sistema AZETASOFT";// nombre que quieres que aparesca del remitente, oséa de ti  o del correo gmail
                        enviarMail.CorreoDestino = txtCorreoDestino1.Text;//destino 1 a quien se envia el correo
                        enviarMail.CorreoDestino2 = txtCorreoDestino2.Text;//destino 2 a quien se envia el correo
                        enviarMail.CorreoDestino3 = txtCorreoDestino3.Text;//destino 3 a quien se envia el correo, el punto es que si dejas en blanco alguno bota una excepcion, rellena todos
                        enviarMail.Asunto = "FACTURAS AL CRÉDITO QUE VENCE HOY" + Convert.ToString(hoy);// este es el asunto, pones lo que sea jajaj, borra hoy, esa variable no esta declarado.
                        enviarMail.Mensaje = mensaje;// este es el contenido del mensaje, yo lo tengo en una variable de tipo estring con nombre mensaje, tu puedes enviar cualquier cosa que sea texto plano.
                        if (tabla.Rows.Count > 0)
                        {
                            enviarMail.EnviarEmail();//envio el mensaje, lo pongo en una condicion porque yo verifico que haya algo de contenido. Lo puedes sacar el if, si no quieres validar nada, y si lo dejas asi, te va a dar un error porque no existe esa tabla, en conclusion tienes que sacarlo.
                        }
    
    
                    }
    catch (Exception ex)
    {
                        
                        MessageBox.Show(ex.Message + ex.StackTrace);
                        
    }


    Falta agregar el Using de la clase. esto lo haces desde el form que creaste.

    using SisttVentas.Utilitarios



    jefelon

    Ahí arriba en las configuraciones de gmail, Descarga de Correo    POP en el paso 1) tienes que seleccionar un opción, para que te salga ese texto "POP esta habilitado para todo correo"

    Puede enviar desde gmail, Outlok u otros, solo sería cuestión de averiguar el puerto y el smtp.

    • Editado Jefelon viernes, 24 de octubre de 2014 3:11 Google lapsus
    • Marcado como respuesta AnalistaStr viernes, 24 de octubre de 2014 4:19
    viernes, 24 de octubre de 2014 3:04
  • Muchísimas gracias Jefelon se aprecia mucho lo que has hecho :) .

    Te cuento lo resolví a través de base de datos

    tengo un formulario donde se ingresa el correo electrónico cuando hace clic en "guardar" se guarda en base de datos, pero se ejecuta un TRIGGER que captura ese "email" ingresado. Se lo pasa a una función que manda un correo automático a ese email :) 

    En fin, mil gracias  abrazo

    viernes, 24 de octubre de 2014 4:19