¿Cómo enviar correo electrónico desde un programa _sin_ usar una cuenta preexistente?

StackOverflow https://stackoverflow.com/questions/29988

  •  09-06-2019
  •  | 
  •  

Pregunta

Me gustaría que mi programa pudiera enviarme informes de errores por correo electrónico.¿Cómo puedo hacer esto sin codificar un nombre de usuario/contraseña/servidor SMTP/etc.?en el código?(Hacerlo permitiría a los usuarios descompilar el programa y hacerse cargo de esta cuenta de correo electrónico).

Me han dicho que se pueden hacer algunas cosas con telneting al puerto 25, pero no entiendo los detalles.La mayoría de los fragmentos de código de Google suponen que tienes una cuenta preexistente, lo que no funciona en esta situación.

Estoy usando .NET v3.5 (C# en particular), pero me imagino que las ideas son bastante similares en la mayoría de los lenguajes.Siempre y cuando te des cuenta de que estoy haciendo esto para una aplicación fuera de línea y no me proporciones código PHP o algo así, todo estará bien.

¿Fue útil?

Solución

Mientras su cuenta esté en gmail.com, configure gmail-smtp-en.l.google.com como servidor SMTP saliente en su programa.No es necesario proporcionar una contraseña para enviar correos electrónicos a cuentas de Gmail cuando utiliza ese servidor.

Otros consejos

Crearía un servicio web para conectarme.Este servicio web debe enviar el correo electrónico según los datos que proporciona su programa.Todos los datos de acceso confidenciales se guardan en el lado del servicio web, por lo que es más seguro.

Si el programa tiene que enviarle un correo electrónico directamente, tiene que obtener esa información de alguna manera, por lo que un atacante determinado podría obtener esa información también.

¿Ha considerado alojar un formulario http simple o un servicio web en algún lugar, de modo que pueda publicar allí la información que necesita desde la aplicación (no se requiere autenticación) y guardarla para revisarla manualmente más tarde o enviar el correo electrónico desde ese servidor?

Creo que el mejor plan sería enviar la información del error a algún servicio (en el caso simple, un formulario web) que se ejecute bajo su control, que luego podría enviar un correo electrónico (o registrarlo de alguna otra manera adecuada).

Si se supone que enviar el correo electrónico es beneficioso para el usuario final, otra opción sería hacer que el usuario ingrese su propio servidor SMTP (y nombre de usuario/contraseña si es necesario). En los sistemas Unix, posiblemente pueda usar sendmail y confiar en que el usuario lo tenga configurado correctamente.Solía ​​trabajar en un sistema que utilizaba este enfoque para enviar al usuario informes de las tareas programadas del sistema, y ​​funcionó bastante bien.

Lo que debe hacer es conocer el servidor SMTP del ISP que está utilizando porque cuando usa el servidor SMTP de su propio ISP, no se considera que esté haciendo spam de retransmisión de correo, por lo que puede continuar sin ninguna autenticación.

Desafortunadamente, no siempre es posible obtener esa información fácilmente O hay alguna pequeña excepción que no le permite iniciar sesión de forma anónima, como cuando usa Exchange en una empresa...

Al principio pensé en cifrar su información y descifrarla durante el tiempo de ejecución, pero aún estaría disponible husmeando la tarjeta de red.Sin embargo, puede combinar eso con un servicio web en algún lugar que haga el descifrado y el envío por correo (o envíe información directamente al servicio web, lo que prefiera) como ya lo han sugerido otros.

MailMessage msg = new MailMessage("someone@foo.com", "someoneelse@bar.com");
msg.Subject = "Check it out!";
msg.Body = "Visit stackoverflow.com!";
SmtpClient client = new SmtpClient("some.smtp.server", 25);
client.Send(msg);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top