12

「バグ/提案を報告する」オプションをゲームに実装することを考えていますが、それをどのように機能させることができるかはよくわかりません。私は自分のサーバーなどを持っていないので、ユーザーが書いたテキストをそこに送信することはできません。

私が思いついた唯一の方法は、クライアントがメッセージを書いて、それを私が読むことができる電子メールアカウントに送信することでした。ただし、ユーザーが個人アカウントを介してレポートを送信する必要がないようにしたいと思います。これをどのように実装できるかはよくわかりませんが、グーグルで良い提案は得られませんでした。

私は多くのネットワーク関連の作業を行ったことがないので、プロセスをステップバイステップで(おそらくコードでさえ)説明していただければ幸いです。

私はC#を使用しており、ゲームはWindowsPhone7用にプログラムされています。

4

6 に答える 6

11

はい、それは絶対に可能です。比較的低レベルの観点から、次のことを行う必要があります。

  1. 送信先の電子メールアカウントのMX(メールエクスチェンジャー)サーバーを解決します。
  2. MXサーバーへのソケットを開きます。
  3. 適切なSMTPコマンドを送信して、電子メールメッセージが受信者アカウントに配信されるようにします。基本的に、「差出人」アドレスを任意の任意のものに設定する自由があります。

SMTPは非常にシンプルで人間に優しいプロトコルであるため、これらすべてを手作業で行うのはそれほど手間がかかりません。同時に、それらすべてを処理するビルド済みのライブラリがあります(受信者のMXサーバーの解像度を除く)。

この方法で送信された電子メールは、スパムとして除外される可能性が高いことに注意してください(通常、送信者のIP /ホスト名は、使用することを決定した送信電子メールアドレスに設定したドメインと一致しないため)。

また、「差出人」アドレスは任意に設定できるため、実際の連絡先アドレスを提供するかどうかをユーザーに尋ねるオプションがあり、提供する場合は、「差出人」アドレスを作成して、次のことができるようにすることもできます。必要に応じて、実際に連絡を取り直してください。

于 2012-10-05T13:28:46.243 に答える
3

メールを使う必要はまったくありません。歩哨エアブレーキなどのエラー報告サービスの使用を検討してください。

これらのサービスには、プログラムに組み込んだクライアントがあります。デバッグ情報/スタックトレースを含むエラーを自動的にログに記録します。アプリケーションが問題を報告したときに電子メールで通知します。

通常、アプリのAPIを独自のエラー処理メカニズムに統合します。エラーの時点で、クライアントはデバッグ情報をキャプチャします。「このエラーが発生したときに何をしていましたか?」などの情報をユーザーに求めるモーダルをポップアップ表示し、エラー応答の一部として保存して、に返送します。サービス。

アプリはHTTP経由で動作するため、特別なポートを開く必要はありません。ユーザーに「機能しません!!」というメールを送信させるよりも簡単で便利であり、メール送信の頭痛の種に対処する必要はありません。

于 2012-10-05T13:27:35.467 に答える
2

私は最近これに関する記事を書きました:C#でメールを送信する

基本的に2つの選択肢があります。SMTPクライアントを使用して送信します。つまり、SMTPサーバーが必要であり、ポート25に接続できる必要があります(外部SMTPを使用していない場合は、次のことを行う必要があります)。自分で管理してください)。または、次のような外部の電子メールプロバイダーを使用できます。

AlphaMailを使用している場合は、次の方法でメールを送信できます。

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("support@company.com", "from@example.com"))
    .SetReceiver(new EmailContact("Joe E. Receiver", "to@example.org"))
    .SetBodyObject(person) // Any serializable object
);

HTMLを作成してSMTPクライアントで送信することとのもう1つの違いは、AlphaMailを使用すると、GUIでコードの外部にある電子メールを直接編集できることです。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>
于 2012-10-05T19:05:15.343 に答える
0

だから、これは私の考えです、なぜあなたはあなたに電子メールを送ってもらいませんか...あなたのように?

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

var fromAddress = new MailAddress("from@gmail.com", "From Name"); //Both the email addresses would be yours
var toAddress = new MailAddress("to@example.com", "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);
}

ここからのコード

送信ボタンだけが表示されるので、個人のユーザー名/パスワードがすべて表示されることはありません。また、ダミーアカウントを設定して、実際のメールアカウントに転送した場合でも送信するようにする必要があります。

于 2012-10-05T13:31:50.077 に答える
0

これを実現する別の方法は、メッセージを受け取り、dbまたは/sends電子メールに保存するWCFサービスをホストすることです。これの1つの欠点は、これを行うためにWebサーバーが必要になることです。

于 2012-10-05T19:53:34.373 に答える
-2

次のコードを試してみてくださいこれはあなたを助けるかもしれません:

Dim objCDOMail
Set objCDOMail = Server.CreateObject("CDONTS.NewMail")
objCDOMail.From = "sender@domain.com" 
objCDOMail.To = "receiver@domain.com" 
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 
于 2012-10-05T13:39:36.457 に答える