2012-10-05 48 views
9

Estoy pensando en implementar la opción "Informar un error/Sugerencias" en mi juego, sin embargo, no estoy muy seguro de cómo podría hacerlo funcionar. No tengo mi propio servidor ni nada, así que no puedo enviar el texto que el usuario ha escrito allí.Es posible enviar un correo electrónico mediante programación sin utilizar ninguna cuenta de correo electrónico real

La única forma en que se me ocurrió es que el cliente escribiría un mensaje y lo enviaría a una cuenta de correo electrónico donde podría leerlos. Sin embargo, no quiero que los usuarios necesiten enviar los informes a través de sus cuentas personales. No estoy muy seguro de cómo podría implementar esto y Google no me brindó ninguna buena sugerencia.

No he hecho muchas cosas en la red, así que realmente agradecería que pudieras explicar (posiblemente incluso en código) el proceso paso a paso.

estoy usando C# y el juego está siendo programado para Windows Phone 7.

+0

Creo que sería una buena idea tener alguna forma de volver a estar en contacto con ellos en caso de que desee obtener más detalles sobre lo que experimentaron. También sería bueno tener una vía para informarles que se está trabajando en su problema, y ​​si se ha resuelto. – krillgar

Respuesta

10

Sí, es absolutamente posible hacer eso. Desde una perspectiva de nivel relativamente bajo, necesita:

  1. Resuelva el servidor MX (intercambiador de correo) para la cuenta de correo electrónico que desea enviar.
  2. Abra un socket en el servidor MX.
  3. Envíe el SMTP commands apropiado para enviar el mensaje de correo electrónico a su cuenta de destinatario. En esencia, tiene la libertad de establecer que la dirección "de" sea cualquier cosa arbitraria que desee.

SMTP es un protocolo muy simple/amigable para el ser humano, por lo que no es un esfuerzo masivo hacer todo eso a mano. Al mismo tiempo, hay un número de prebuilt libraries que manejará todo eso por usted (excepto posiblemente la resolución del servidor MX del destinatario).

Tenga en cuenta que es más probable que los correos electrónicos enviados de este modo se eliminen como correo no deseado (generalmente porque la IP/nombre del remitente no coincidirá con el dominio que ponga en la dirección de correo electrónico saliente que decida usar).

También tenga en cuenta que ya que puede establecer la dirección "de" a cualquier cosa, tiene la opción de preguntar al usuario si desea proporcionar su dirección de contacto real, y si lo hacen puede hacer que la dirección "de" para que puedas volver a estar en contacto con ellos si es necesario.

+1

Esto podría funcionar si tiene ** su propio servidor ** SMPT y lo configura para permitir que cualquiera envíe correos. Pero la mayoría de los servidores SMTP públicos rechazarían los correos enviados desde un host aleatorio. Entonces no creo que esto sea factible. – Alex

+0

Esto definitivamente no requiere operar su propio servidor SMTP. Utilizo este enfoque * todo el tiempo * con JavaMail para permitir el envío de correo electrónico desde los sistemas de desarrollo sin que cada desarrollador deba configurar/ejecutar un servidor SMTP local. Simplemente busque el servidor MX del destinatario, páselo a JavaMail como el servidor SMTP saliente, y el resto es automático. Y para los verdaderamente paranoicos, la probabilidad de que un mensaje sea rechazado como spam puede eliminarse casi por completo al establecer la dirección "de" en algo como 'user @'. – aroth

+0

Aún necesitaría _conectarse a un servidor SMTP_ y la mayoría, si no todas, eliminar las conexiones anónimas. Además, a menos que el destinatario esté utilizando un filtro de spam realmente deficiente (o haya empleado listas blancas), los filtros de spam de los proveedores de correo público lo rechazarán casi siempre, ya que el remitente no tendría un DNS inverso válido (uno de los criterios para Comprobación de SPAM). Es un buen enfoque, pero no universal. –

3

No es necesario utilizar el correo electrónico en absoluto. Considere usar un servicio de informe de errores como sentry o airbrake.

Estos servicios tienen clientes que incrusta en su programa; que registra automáticamente tus errores, incluida cualquier información de depuración/stacktrace; y le notificará por correo electrónico cuando su aplicación reporte un problema.

Normalmente integra la API de la aplicación en su propio mecanismo de manejo de errores. En el momento de un error, el cliente capturará su información de depuración, puede mostrarle a un usuario que le pide información modal como "¿qué estaba haciendo cuando ocurrió este error?", Guarde eso como parte de su respuesta de error que se envía de vuelta a el servicio.

Como la aplicación funciona a través de HTTP, no necesita puertos especiales para abrir. Es más fácil y más útil que hacer que los usuarios te envíen correos electrónicos con "¡no funciona!", Y no tienes que lidiar con el correo electrónico que te causa dolores de cabeza.

0

Así que esta es mi idea, ¿por qué no te han enviado el correo electrónico ... como tú?

using System.Net; 
using System.Net.Mail; 

var fromAddress = new MailAddress("[email protected]", "From Name"); //Both the email addresses would be yours 
var toAddress = new MailAddress("[email protected]", "To Name"); //Both the email addresses would be yours 
const string fromPassword = "fromPassword"; 
const string subject = "There name or whatever"; 
const string body = "Errors ect...."; 

var smtp = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       Port = 587, 
       EnableSsl = true, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
      }; 
using (var message = new MailMessage(fromAddress, toAddress) 
        { 
         Subject = subject, 
         Body = body 
        }) 
{ 
    smtp.Send(message); 
} 

código de here

Todos verían sería el botón de enviar para que no tenga toda su nombre de usuario/contraseña personal, también debe establecer Prolly una cuenta ficticia que les han enviado a incluso si solo los reenvía a su cuenta de correo electrónico real.

+0

No estoy seguro de que haya una incrustación en la incrustación de su contraseña de correo electrónico en una aplicación. Sería fácil de extraer, y significaría que no podrías cambiarlo. – ctacke

+0

Punto sólido. ¿Es sabio? Absolutamente no, ¿funcionaría? Absolutamente –

+0

Me pregunto si ha intentado enviar un correo electrónico en un teléfono con Windows, si no aparece un mensaje de seguridad, solicitando permisos. También me pregunto si no podría simplemente incluir un poco de código html en su formulario de aplicación, de alguna manera con href = "mailto:" y dejar que el teléfono cargue la aplicación de correo para su. – Phill

-2

Trate siguiente código esto podría ayudarle a:

Dim objCDOMail 
Set objCDOMail = Server.CreateObject("CDONTS.NewMail") 
objCDOMail.From = "[email protected]" 
objCDOMail.To = "[email protected]" 
objCDOMail.Subject = "Test Mail Script" 
objCDOMail.BodyFormat = 0 
objCDOMail.MailFormat = 0 
objCDOMail.Body = "Testing Mail from Test Script" 
objCDOMail.Importance = 1 
objCDOMail.Send 
Set objCDOMail = Nothing 
+0

La pregunta decía que usa C# y no Visual Basic. –

2

Hace poco escribí un artículo sobre esto: Sending email with C#

Es, básicamente, tiene dos opciones: o bien lo envía usando un servidor SMTP en el cliente, esto significa que debe tener un servidor SMTP y poder conectarse al puerto 25 (si no está utilizando un SMTP externo, debe hacerlo usted mismo). O puede utilizar un proveedor de correo electrónico externo, como por ejemplo:

Si está utilizando AlphaMail puede enviar mensajes de correo electrónico de la siguiente manera:

IEmailService emailService = new AlphaMailEmailService() 
    .SetServiceUrl("http://api.amail.io/v1/") 
    .SetApiToken("YOUR-ACCOUNT-API-TOKEN-HERE"); 

var person = new Person() 
{ 
    Id = 1234, 
    UserName = "jdoe78", 
    FirstName = "John", 
    LastName = "Doe", 
    DateOfBirth = 1978 
}; 

var response = emailService.Queue(new EmailMessagePayload() 
    .SetProjectId(12345) // ID of AlphaMail project (determines options, template, etc) 
    .SetSender(new EmailContact("[email protected]", "[email protected]")) 
    .SetReceiver(new EmailContact("Joe E. Receiver", "[email protected]")) 
    .SetBodyObject(person) // Any serializable object 
); 

Otra cosa que difiere de simplemente construir HTML y enviarlo con un cliente SMTP es que con AlphaMail tienes la capacidad de editar tus correos electrónicos fuera de tu código directamente en una GUI. También puede crear fácilmente plantillas altamente dinámicas usando el lenguaje de plantillas de AlphaMail Comlang.

<html> 
    <body> 
     <b>Name:</b> <# payload.FirstName " " payload.LastName #><br> 
     <b>Date of Birth:</b> <# payload.DateOfBirth #><br> 

     <# if (payload.Id != null) { #> 
      <a href="http://company.com/sign-up">Sign Up Free!</a> 
     <# } else { #> 
      <a href="http://company.com/login?username=<# urlencode(payload.UserName) #>">Sign In</a> 
     <# } #> 
    </body> 
</html> 
+0

¿Cómo logras incluir las bibliotecas AlphaMail en un proyecto WP7 ya que no están compiladas como un ensamblado WP7? – PmanAce

+0

El enlace al sitio web de AlphaMail está roto ... –

0

Otra forma de conseguir esto sería el anfitrión de un servicio WCF que tiene en su mensaje y lo almacena en dB/o envía un correo electrónico. Una desventaja de esto es que necesitarás un servidor web para hacer esto.

Cuestiones relacionadas