2008-09-11 11 views
7

Estoy trabajando en una aplicación de Windows Forms (.NET 3.5) que tiene un manejador de excepciones integrado para detectar cualquier excepción (que no permita el cielo) que puedan surgir. Me gustaría que el manejador de excepciones pueda solicitar al usuario que haga clic en el botón "Enviar informe de errores", lo que provocaría que la aplicación envíe un correo electrónico a mi dirección de correo electrónico FogBugz.¿La mejor manera de enviar un correo electrónico desde una aplicación .NET?

¿Cuál es la mejor manera de hacer esto, y hay algún "truco" para tener en cuenta?

Respuesta

3

Querrá utilizar la clase SmtpClient como se describe here.
No hay inconvenientes: enviar correos electrónicos es lo más fácil posible.

+3

¿Qué tan escalable es si necesita enviar correo a 1000 de sus usuarios con smtp? ¿Tiene que escribir un código adicional para reducir la velocidad para que el servidor smtp no se inunde? – Haoest

1

Es posible que también desee consultar la biblioteca de terceros aspNetEmail, que tiene muchas características útiles que ofrecer sobre lo que System.Net.Mail le ofrece.

2

En un entorno controlado, usando SmtpClient sería la respuesta. Pero en la máquina de un usuario necesitaría un servidor SMTP para enviar.

Puede solicitar al usuario sus credenciales SMTP, pero creo que sería poco práctico para su caso. Como usuario, no me gustaría proporcionar mis credenciales SMTP a una aplicación aleatoria (piense en SPAM). Tampoco quiere codificar sus propias credenciales SMTP en la aplicación, sería trivial que un usuario malintencionado olfatee esas credenciales y use su servidor para enviar SPAM.

Idealmente, usted podría usar el agente de correo del usuario para enviar el correo electrónico. Estaba pensando que podría formular y ejecutar un mailto: URL, pero no estoy seguro de si podría especificar el cuerpo o los archivos adjuntos para el mensaje.

+0

La sintaxis es mailto: direcció[email protected]? Subject = ¡Hola y cuerpo = mundo! Los parámetros deben ser url-escaped – rpetrich

6

No debería preocuparse por las credenciales del cliente y simplemente usar el SmtpClient como lo sugiere Esteban. Necesitará que el usuario proporcione una url de servidor Smtp válida en la configuración, pero la mayoría de los ISP permiten smtp anónimo siempre que esté en su red (uno de sus clientes), siempre que el usuario ingrese la url para el servidor sntp de su ISP entonces la mayoría las personas no tendrían ningún problema.

Nota: Hay una sección predefinida del archivo .config para almacenar las opciones de configuración para el objeto SmtpClient. Si pones la configuración allí, no tienes que establecer explícitamente nada en tu código cuando envíes un correo electrónico. Un ejemplo de la sección está a continuación:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network host="smtp.somewhere.com.au" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

El nombre de usuario y la contraseña son opcionales. Intellisense funciona para estas partes del archivo de configuración.

Edición: corrección leve a mi ejemplo de código.

+0

¡Hola! ¿Podrías deletrear mi nombre correctamente? Gracias, Esteban –

0

Querrá utilizar la clase SmtpClient tal como se describe here. No hay inconvenientes: enviar correos electrónicos es lo más fácil posible.

Una amplia System.Net.Mail FAQ se encuentra here.

Cuestiones relacionadas