Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Enviar correos en Silverlight vía ASP o PHP

Publicada el 6 marzo, 201116 julio, 2012
Twittear

Bien, cuando hablamos del mundo en la web y que queremos tener nuestro sitio propio, comenzamos con la primera pregunta ¿En donde hospedar nuestro material? Hay sitios de alojamiento como GoDaddy que es muy famoso, este sitio se encuentra alojado en los servidores de Hosting México, el punto es que sino importa mucho la empresa en la que tu sitio se aloje, si importa mucho el servidor de internet que utiliza, los dos mas grandes ejemplos que he encontrado son IIS o Apache, la situación esta en que depende mucho del tipo de servidor que podrás realizar ciertas tareas como en este caso enviar correos, así que ya tomarás el ejemplo que mas te convenga dependiendo de tu servidor.

En ambos casos utilizaremos un proyecto en común, este es simplemente un proyecto que tiene unos cuantos textBox y un botón, nada del otro mundo, pero para evitar cualquier detalle descarga aquí el proyecto común

Enviar correos vía ASP.NET

Haciéndolo por esta vía lo primero que tenemos que hacer es crear en el proyecto que recién descargamos un servicio web de ASP.

img120

img121

En el nuevo archivo del servicio web ASP que acabas de crear, solo inserta el siguiente código (si solo quieres insertar la función adelante, solo recuerda usar la librería «System.Net.Mail”).

using System;
using System.Web;
using System.Web.Services;
using System.Net.Mail;
 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Servicio : System.Web.Services.WebService {
 
public Servicio ()
{
}
 
[WebMethod]
public bool MandarCorreo(string correoEmpresa, string tema, string contenido)
{
try
{
MailMessage mensaje = new MailMessage();
mensaje.From = new MailAddress("contactoclientes5tosol@gmail.com");
mensaje.To.Add(new MailAddress(correoEmpresa));
mensaje.Subject = tema;
mensaje.Body = contenido;
mensaje.IsBodyHtml = false;
 
SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = true;
smtp.Send(mensaje);
return true;
}
catch
{
return false;
}
}
 
}

using System; using System.Web; using System.Web.Services; using System.Net.Mail; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Servicio : System.Web.Services.WebService { public Servicio () { } [WebMethod] public bool MandarCorreo(string correoEmpresa, string tema, string contenido) { try { MailMessage mensaje = new MailMessage(); mensaje.From = new MailAddress("contactoclientes5tosol@gmail.com"); mensaje.To.Add(new MailAddress(correoEmpresa)); mensaje.Subject = tema; mensaje.Body = contenido; mensaje.IsBodyHtml = false; SmtpClient smtp = new SmtpClient(); smtp.EnableSsl = true; smtp.Send(mensaje); return true; } catch { return false; } } }

La función es sencilla ya que conoces la librería, simplemente por medio de la función pides los parámetros que utilizarás, estos son el correo al que vas a enviar la información, el título y su contenido, como ves no es la gran cosa, algo importante es que TODOS los métodos web de un servicio web deben regresar un valor, en este caso coloqué una variable booleana para cumplir con el requisito y que además nos permitirá verificar que todo está en orden al mandar llamar esa función.

Ya con el servicio web y su función corre tu proyecto y en el archivo Web.config, inserta tres líneas parecidas a estas.

<system.net>
<mailSettings>
<smtp>
<network host="smtp.gmail.com" port="587" userName="micorreo@gmail.com" password="micontraseña"/>
</smtp>
</mailSettings>
</system.net>

<system.net> <mailSettings> <smtp> <network host="smtp.gmail.com" port="587" userName="micorreo@gmail.com" password="micontraseña"/> </smtp> </mailSettings> </system.net>

De esta forma estarás configurando el servicio del correo web que usarás para mandar la información, es decir, este correo se encargará de esa tarea.

Después de haberlo hecho así, ejecuta el servicio web y copia la url de este.

img122

Ya con la URL que tienes, solo agrega la referencia del servicio y copia esa dirección

img124

Ya por último solo debes insertar el llamado al servicio web desde el evento clic del botón para que quede de la siguiente manera.

private void Button_Click(object sender, RoutedEventArgs e)
{
string cadena = "Dejaron el siguiente mensaje en tu sitio: " + txtMensaje.Text + " y puedes contestar al siguiente correo: " +
txtCorreo.Text;
Servicio1.ServicioSoapClient miServicio = new Servicio1.ServicioSoapClient();
miServicio.MandarCorreoCompleted += miServicio_MandarCorreoCompleted;
miServicio.MandarCorreoAsync(txtDestino.Text, txtTitulo.Text, cadena);
}

private void Button_Click(object sender, RoutedEventArgs e) { string cadena = "Dejaron el siguiente mensaje en tu sitio: " + txtMensaje.Text + " y puedes contestar al siguiente correo: " + txtCorreo.Text; Servicio1.ServicioSoapClient miServicio = new Servicio1.ServicioSoapClient(); miServicio.MandarCorreoCompleted += miServicio_MandarCorreoCompleted; miServicio.MandarCorreoAsync(txtDestino.Text, txtTitulo.Text, cadena); }

En donde solo creas una frase y después invocas al método para simplemente después confirmar tu envío de la siguiente manera, cuando el método se haya completado.

private void Button_Click(object sender, RoutedEventArgs e)
{
string cadena = "Dejaron el siguiente mensaje en tu sitio: " + txtMensaje.Text + " y puedes contestar al siguiente correo: " +
txtCorreo.Text;
Servicio1.ServicioSoapClient miServicio = new Servicio1.ServicioSoapClient();
miServicio.MandarCorreoCompleted += miServicio_MandarCorreoCompleted;
miServicio.MandarCorreoAsync(txtDestino.Text, txtTitulo.Text, cadena);
}

private void Button_Click(object sender, RoutedEventArgs e) { string cadena = "Dejaron el siguiente mensaje en tu sitio: " + txtMensaje.Text + " y puedes contestar al siguiente correo: " + txtCorreo.Text; Servicio1.ServicioSoapClient miServicio = new Servicio1.ServicioSoapClient(); miServicio.MandarCorreoCompleted += miServicio_MandarCorreoCompleted; miServicio.MandarCorreoAsync(txtDestino.Text, txtTitulo.Text, cadena); }

En donde solo creas una frase y después invocas al método para simplemente después confirmar tu envío de la siguiente manera, cuando el método se haya completado.

void miServicio_MandarCorreoCompleted(object sender, Servicio1.MandarCorreoCompletedEventArgs e)
{
if (e.Result)
{
MessageBox.Show("Tu mensaje ha sido enviado");
}
else
{
MessageBox.Show("Hubo un error, tu mensaje no se envío");
}
 
}

void miServicio_MandarCorreoCompleted(object sender, Servicio1.MandarCorreoCompletedEventArgs e) { if (e.Result) { MessageBox.Show("Tu mensaje ha sido enviado"); } else { MessageBox.Show("Hubo un error, tu mensaje no se envío"); } }

En donde solo creas una frase y después invocas al método para simplemente después confirmar tu envío de la siguiente manera, cuando el método se haya completado.

void miServicio_MandarCorreoCompleted(object sender, Servicio1.MandarCorreoCompletedEventArgs e)
{
if (e.Result)
{
MessageBox.Show("Tu mensaje ha sido enviado");
}
else
{
MessageBox.Show("Hubo un error, tu mensaje no se envío");
}
 
}

void miServicio_MandarCorreoCompleted(object sender, Servicio1.MandarCorreoCompletedEventArgs e) { if (e.Result) { MessageBox.Show("Tu mensaje ha sido enviado"); } else { MessageBox.Show("Hubo un error, tu mensaje no se envío"); } }

img125

Enviar correos vía PHP

Bien, para quienes contamos con un servidor Apache, usar PHP es por mucho la mejor opción (por no decir la única), además de que es mucho mas sencillo, así que comienza por descargar el proyecto común que está al inicio de este artículo.

Ya que lo tienes, solo crea por medio d cualquier bloc de notas o editor de código el siguiente script de PHP

<?php
$recipient = "tucorreo@hotmail.com"; //correo que va a recibir
$mail_body = $_POST['mensaje']; //mensaje del correo
$subject = "Correo de contacto"; //titulo del correo
$header = "";
mail($recipient, $subject, $mail_body, null); //comando para el correo
?>

<?php $recipient = "tucorreo@hotmail.com"; //correo que va a recibir $mail_body = $_POST['mensaje']; //mensaje del correo $subject = "Correo de contacto"; //titulo del correo $header = ""; mail($recipient, $subject, $mail_body, null); //comando para el correo ?>

Recuerda al momento de guardar tu archivo que debes guardarlo con la extensión PHP y ya que lo hayas guardado, solo añadelo dentro de la carpeta ClientBin de tu proyecto.

img126

Ya que tienes tu script adentro de tu proyecto, solo inserta el siguiente código dentro del evento clic de tu botón.

private void Button_Click(object sender, RoutedEventArgs e)
{
WebClient cliente = new WebClient();
cliente.Headers["Content-Type"] = "application/x-www-form-urlencoded";
 
cliente.UploadStringCompleted += new UploadStringCompletedEventHandler(cliente_UploadStringCompleted);
string Mensaje = "Acabas de recibir un correo con el siguiente mensaje: " + txtMensaje.Text + " Su dirección de correo es: " + txtCorreo.Text;
string argumentos = String.Format("mensaje={0}", Mensaje);
 
cliente.UploadStringAsync(new Uri("Correo.php", UriKind.Relative), "Post", argumentos);
}

private void Button_Click(object sender, RoutedEventArgs e) { WebClient cliente = new WebClient(); cliente.Headers["Content-Type"] = "application/x-www-form-urlencoded"; cliente.UploadStringCompleted += new UploadStringCompletedEventHandler(cliente_UploadStringCompleted); string Mensaje = "Acabas de recibir un correo con el siguiente mensaje: " + txtMensaje.Text + " Su dirección de correo es: " + txtCorreo.Text; string argumentos = String.Format("mensaje={0}", Mensaje); cliente.UploadStringAsync(new Uri("Correo.php", UriKind.Relative), "Post", argumentos); }

En donde estas usando un objeto de tipo web client para mandar los datos entre tu aplicación y tu script PHP, como puedes ver, el título del correo aquí lo asignamos desde el script, solo le estamos mandando el cuerpo del correo, ya para finalizar solo debes crear el handler que confirme el envío de tu correo.

void cliente_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
if (e.Error == null)
{
MessageBox.Show("Tu correo ha sido enviado, muchas gracias.");
}
else
{
MessageBox.Show("Error de envío : " + e.Error.ToString());
}
}

void cliente_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) { if (e.Error == null) { MessageBox.Show("Tu correo ha sido enviado, muchas gracias."); } else { MessageBox.Show("Error de envío : " + e.Error.ToString()); } }

Y es así como puedes aprovechar una de las funcionalidades mas básicas y necesarias de cualquier página web, el envío de correos en la forma de contacto, espero te sirvan tanto como a nosotros.

14 comentarios en «Enviar correos en Silverlight vía ASP o PHP»

  1. ReyDeReyes dice:
    23 julio, 2011 a las 7:16 pm

    Excelente aporte, de gran ayuda.

    Ojala y pudieras hacer algo sobre Estados en Expression Blend.

    Responder
  2. Emilio dice:
    11 octubre, 2011 a las 2:37 pm

    Buenas, estoy aprendiendo y en local me funciona todo, pero a la hora de publicar no..

    Que hago mal ??? como Publico??

    Gracias por tu tiempo.

    Responder
    1. admin dice:
      11 octubre, 2011 a las 4:50 pm

      Estoy asumiendo que publicaste bien en tu maquina, tienes un servicio de hosting y quieres poner ahi tu servicio web, al hacerlo ese servicio web nada mas no responde y/o te marca un error, hasta aqui voy correcto? Si estoy bien, mandame por favor por correo unos pantallazos para cual es el problema

      Responder
  3. Rogelio dice:
    7 febrero, 2012 a las 12:48 am

    Oye tengo un problema para publicar en hosting,de forma local me funciona bien, por ahi creo que para hospedar el servicio se sigue una configuración diferente, tienes algo de material sobre ello.

    Responder
    1. Amin dice:
      9 febrero, 2012 a las 4:33 pm

      Hola Rogelio, pues primero debes comenzar por ver si tu servicio de hosting te lo permite, y la segunda parte creo que debe ser la mas confusa, como publicar el servicio web de manera adecuada, hace tiempo hice una entrada al respecto, aquí esta la liga http://aminespinoza.com/publicar-mi-aplicacin-web-parte-3/

      Responder
  4. alex Galass dice:
    18 septiembre, 2015 a las 6:15 pm

    Amigo buen aporte, pero no encuentro en que parte explicas la autentifacion del correo de salida del formulario, resulta que algunos servidores o servicios de hosting, como el que yo uso con no salen los correos y me explicaron que en los servidores de ellos te exigen que tus formularios de envio de correo esten autentificados al parecer es agregarle al codigo del servidor de salida tambien usuario y contraseña de la cuenta de correo como una medida de seguridad, parece que si el formulario esta en php usas un tipo de autentificacion o codigo y si es en asp .net es diferente podrias explicar esta parte?

    Responder
    1. Amin Espinoza dice:
      30 noviembre, 2015 a las 11:02 pm

      Así es, hace algunos años esto no era necesario, ahora, lo que necesitas es permitir al correo una regla de acceso por medio de las aplicaciones para que puedan hacer una petición y enviar por medio de sus servicios.

      Responder
  5. alex Galass dice:
    18 septiembre, 2015 a las 6:16 pm

    disculpa se me fue mal el link de arriba !

    Responder
  6. Ederok dice:
    15 abril, 2016 a las 11:52 pm

    Excelente artículo!
    Por supuesto que lo primero que se debe consultar, es si el servicio de hosting, permite implementarlo, si no, será un gasto en vano.

    Saludos!

    Responder
  7. Israel Rojas dice:
    29 julio, 2016 a las 2:01 am

    Muy bien explicado todo el proceso para el funcionamiento de envío de correos, sinceramente nunca he tenido la necesidad de realizar algo similar, ya que los servicios de Alojamiento Web que contratamos son en hosting administrado y ya vienen con todas estas configuraciones.

    Saludos.

    Responder
  8. Félix de Leon dice:
    13 junio, 2017 a las 5:50 pm

    muy buen blog!! tengo una pregunta.. puedo enviar parámetros desde el php hacia el silverlight?? lo he conseguido con el comando «echo».. el problema es que se guarda todo en una sola cadena de texto, por ejemplo: NOMBREapellidosPROFESIONedadSUELDO

    en la función
    void cliente_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)

    puedo separarlo utilizando algún split.. pero no creo que sea lo mas adecuado, porque lo que quiero recibir es la consulta de una tabla… entonces lo ideal seria pasar una matriz o vector.

    gracias!!

    Responder
    1. Amin Espinoza dice:
      15 junio, 2017 a las 9:33 am

      ¿Lo estás haciendo desde Silverlight? La plataforma para mi gran dolor murió hace ya un buen rato. 🙁

      Responder
      1. Félix de León dice:
        27 junio, 2017 a las 2:39 pm

        A que te refieres con que murió? yo aprendí hace muchos años con el VB6 y ahora que quiero hacer una aplicacion web veo que lo único que se parece un poco es Silverlight, lo que veo un poco engorroso las conexiones con bases de datos… por eso intento hacerlo con PHP.. y todo perfecto.. pero a la hora de pasar las variables de php a silverlight se me juntan todas en una cadena.

        Responder
  9. Félix de Leon dice:
    3 agosto, 2017 a las 11:59 am

    Hola Amin, podrías aconsejarme algún lenguaje para hacer aplicaciones web que sea parecido al vb6, porque ahora que ya le estaba cogiendo el truco a silverlight resulta que ni microsoft le va a dar soporte al navegador.

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress