2012-10-05 10 views
9

Zastanawiam się nad wprowadzeniem opcji "Zgłoś błąd/sugestie" do mojej gry, ale nie jestem do końca pewien, w jaki sposób mógłbym to zrobić. Nie mam własnego serwera ani nic takiego, więc nie mogę po prostu wysłać tekstu, który tam napisał użytkownik.Czy możliwe jest programowe wysyłanie wiadomości e-mail bez korzystania z rzeczywistego konta e-mailowego

Jedyny sposób, w jaki wymyśliłem to to, że klient napisze wiadomość i wyślę ją na konto e-mail, gdzie będę mógł je przeczytać. Nie chcę jednak, aby użytkownicy musieli wysyłać raporty za pośrednictwem swoich kont osobistych. Nie jestem do końca pewien, w jaki sposób mogę to wdrożyć, a wyszukiwanie za pomocą przeglądarki nie przyniosło żadnych dobrych sugestii.

Nie zrobiłem wiele rzeczy w sieci, więc byłbym bardzo wdzięczny, gdyby można było wyjaśnić krok po kroku (być może nawet w kodzie) proces.

Używam C#, a gra jest zaprogramowany dla Windows Phone 7.

+0

Myślę, że dobrym pomysłem byłoby nawiązanie z nimi kontaktu, gdybyś chciał uzyskać więcej informacji na temat tego, czego doświadczyli. Byłoby miło mieć również możliwość poinformowania ich o tym, że ich problem jest opracowywany, a jeśli został rozwiązany. – krillgar

Odpowiedz

10

Tak, jest to absolutnie możliwe. Z względnie niskiego poziomu musisz:

  1. Rozwiąż serwer MX (poczta-wymiennik) dla konta e-mail, na które chcesz wysłać.
  2. Otwórz gniazdo na serwerze MX.
  3. Wyślij odpowiednią wiadomość SMTP commands, aby wiadomość e-mail została dostarczona na konto odbiorcy. Zasadniczo możesz swobodnie ustawić adres "od" na dowolną dowolną rzecz.

SMTP to bardzo prosty/przyjazny dla człowieka protokół, więc nie jest to ogromny wysiłek, aby zrobić to wszystko ręcznie. W tym samym czasie istnieje pewna liczba prebuilt libraries, która obsłuży to wszystko (z wyjątkiem możliwej rozdzielczości serwera MX odbiorcy).

Należy pamiętać, że wiadomości e-mail wysyłane w ten sposób są częściej odfiltrowywane jako spam (zazwyczaj dlatego, że adres IP/nazwa hosta nadawcy nie pasuje do żadnej domeny umieszczonej na wychodzącym adresie e-mail, którego zdecydujesz się użyć).

Należy również pamiętać, że ponieważ możesz ustawić adres "od" na dowolną, możesz poprosić użytkownika, jeśli chce podać swój faktyczny adres kontaktowy, a jeśli to zrobi, możesz ustawić adres "od". aby w razie potrzeby móc się z nimi ponownie skontaktować.

+1

Może to działać, jeśli masz ** swój własny ** serwer SMPT i konfigurujesz go tak, aby każdy mógł wysyłać pocztę. Jednak większość publicznych serwerów SMTP odrzuci wiadomości wysłane z losowego hosta. Więc nie sądzę, żeby było to wykonalne. – Alex

+0

To zdecydowanie nie wymaga obsługi własnego serwera SMTP. Używam tego podejścia * przez cały czas * z JavaMail, aby umożliwić wysyłanie wiadomości e-mail z systemów deweloperów, bez wymagania, aby każdy programista skonfigurował/uruchomił lokalny serwer SMTP. Wystarczy wyszukać serwer MX odbiorcy, przekazać go do JavaMail jako wychodzącego serwera SMTP, a reszta jest automatyczna. A w przypadku naprawdę paranoikowych prawdopodobieństwo odrzucenia wiadomości jako spamu można niemal całkowicie wyeliminować, ustawiając adres "od" na "użytkownik @". – aroth

+0

Będziesz nadal potrzebować _connect do serwera SMTP_ i większości, jeśli nie wszystkich, porzuć anonimowe połączenia. Ponadto, chyba że odbiorca używa jakiejś naprawdę tandetnej filtrowania spamu (lub korzystał z białej listy), prawie zawsze będzie odrzucany przez filtry spamu u publicznych dostawców poczty e-mail, ponieważ nadawca nie będzie miał prawidłowego wstecznego DNS (jedno z kryteriów dla Sprawdzanie SPAM). To dobre podejście, ale nie uniwersalne. –

3

Nie trzeba korzystać z poczty elektronicznej w ogóle. Rozważ użycie usługi raportowania błędów, takiej jak sentry lub airbrake.

Te usługi zawierają klientów, których umieścisz w swoim programie; który automatycznie rejestruje twoje błędy, w tym wszelkie informacje dotyczące debugowania/stacktrace; i powiadamiać cię pocztą e-mail, gdy twoja aplikacja zgłasza problem.

Zazwyczaj integruje się interfejs API aplikacji z własnym mechanizmem obsługi błędów. W momencie wystąpienia błędu klient przechwyci informacje o debugowaniu, możesz wyskoczyć z modalnego pytającego użytkownika, aby uzyskać informacje takie jak "co robiłeś, gdy wystąpił ten błąd?", Zapisz to jako część odpowiedzi na błąd, która jest wysyłana z powrotem do Serwis.

Ponieważ aplikacja działa za pośrednictwem protokołu HTTP, nie trzeba otwierać żadnych specjalnych portów. Jest łatwiejsze i bardziej pomocne niż wysyłanie przez użytkowników wiadomości e-mail z "nie działa !!" i nie musisz zajmować się problemami z wysyłaniem wiadomości e-mail.

0

Więc to jest moja myśl, dlaczego nie masz e-maila wysłanego do ciebie ... jak ty?

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); 
} 

kod z here

wszystko byłoby widzą byłoby przycisk Prześlij więc nie mieliby cały swój osobisty login/hasło, również należy prolly założyć konto atrapę do wysyłać je do nawet jeśli po prostu przekazuje je na swoje prawdziwe konto e-mail.

+0

Nie jestem pewny, czy w aplikacji jest wbudowane hasło e-mail. Byłoby to łatwe do wyodrębnienia, a to oznaczałoby, że nie można go zmienić. – ctacke

+0

Punkt pełny. Czy to jest mądre? Absolutnie nie, czy to zadziała? Absolutnie –

+0

Zastanawiam się, czy próbowałeś wysłać wiadomość e-mail na telefon z Windows, jeśli monit bezpieczeństwa nie pojawi się, pytając o uprawnienia. Zastanawiam się też, czy nie można po prostu dołączyć trochę kodu HTML do formularza aplikacji, w jakiś sposób za pomocą href = "mailto:" i pozwolić telefonowi załadować aplikację pocztową. – Phill

-2

Spróbuj następujący kod to może pomóc:

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

Pytanie stwierdziło, że korzysta z C#, a nie Visual Basic. –

2

Niedawno napisałem artykuł na ten temat: Sending email with C#

Zasadniczo istnieją dwie możliwości, albo wysłać go za pomocą SMTP-klienta, oznacza to, że musisz mieć serwer SMTP i móc połączyć się z portem 25 (jeśli nie korzystasz z zewnętrznego SMTP, musisz sam nim zarządzać). Można też użyć zewnętrznego dostawcę poczty elektronicznej, takich jak:

Jeśli używasz AlphaMail można wysyłać wiadomości e-mail w następujący sposób:

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 
); 

Inną rzeczą, która różni się od budowania HTML i wysyłania go za pomocą klienta SMTP jest dzięki AlphaMail możesz edytować swoje e-maile poza swoim kodem bezpośrednio w GUI. Możesz także łatwo tworzyć wysoce dynamiczne szablony przy użyciu szablonu szablonowego Comlang AlphaMail.

<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

Jak zdołasz dołączyć biblioteki AlphaMail do projektu WP7, ponieważ nie są one kompilowane jako zespół WP7? – PmanAce

+0

Link do strony AlphaMail jest uszkodzony ... –

0

Innym sposobem na osiągnięcie tego byłoby hostowanie usługi WCF, która pobiera wiadomość i zapisuje ją w db lub/wysyła wiadomości e-mail. Jedną z wad tego rozwiązania jest to, że potrzebujesz serwera WWW.

Powiązane problemy