1

「共有」を使用してテキスト(文字列)をメールで送信しています。

私が共有しているデータは次のように作成されます。

string data = "Log Data\n" + "========\n";

data += "Log Type   : " + log.LogType.ToString() + "\n";

data += "Date/Time:   " + log.TimeStamp.ToString( "MM/dd/yy - HH:mm:ss" ) + "\n";

data += "Result:      " + log.Result.ToString() + "\n";

data += "Value1:      " + log.Value1 + "     Value2:      " + log.Value2 + "\n";

data += "Note:        " + log.Note + "\n\n";  

データが準備され、電子メールで送信されます。ただし、「\ n」は、(Windows 8メールプログラムによって)送信する前でも受信側のGMailでも正しく解釈されません。

送信側に表示されるデータは次のようになります。

Log Data ======== Log Type : ToDo Date/Time: 06/05/12 - 08:00:00 Result: Normal Value1: 170 Value2: 0 Note: note 1 

ShareTextHandlerは次のようになります。

DataRequestリクエスト=e.Request;

request.Data.Properties.Title = "Share Data: ";

request.Data.Properties.Description = "Send Data to an email address";

request.Data.SetText( data );

「\n」はWindows8で変更されましたか?またはSetTextはそれを削除するために何かをしますか?

EitanB

アップデート....

やあ、

HTMLでそれをやろうとしました:

次のようなHTMLでいくつかのテストデータを試しました。privatestringPrepareShareData(){string CR = System.Environment.NewLine; string data = string.Empty;

        data += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">" + CR;
        data += "<html>" + CR;
        data += "<body>" + CR;
        data += "<p>" + CR;
        data += "Log Data" + "<br/>" + CR;
        data += "========" + "<br/>" + CR;
        data += "Line 1" + "<br/>" + CR;
        data += "Line 2" + "<br/>" + CR;
        data += "<p>" + CR;
        data += "</body>" + CR;
        data += "</html>" + CR;

        return data;
        }

動作しませんでした...

また試した:

    private string PrepareShareData()
        {
        string CR = System.Environment.NewLine;
        string data = string.Empty;

        data += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">";
        data += "<html>";
        data += "<body>";
        data += "<p>";
        data += "Log Data" + "<br/>";
        data += "========" + "<br/>";
        data += "Line 1" + "<br/>";
        data += "Line 2" + "<br/>";
        data += "<p>";
        data += "</body>";
        data += "</html>";

        return data;
        }

どちらも機能しませんでした...

正常に機能するメモ帳を使用して.HTMLファイルを作成しました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<html>
<body>
<p>
Log Data<br/>
========<br/>
Line 1<br/>
Line 2<br/>
</p>
</body>
</html>

HTMLにもメールの問題がありますか、それともHTMLが間違っていますか?

ありがとう、EitanB

4

4 に答える 4

1

使用済み:

var htmlFormat = Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.CreateHtmlFormat( data );
request.Data.SetHtmlFormat( htmlFormat );

データの場所:

        string data = string.Empty;
        string BR = @"<br/>";
        data += @"<html>";
        data += @"<head><title>";
        data += @"<title>";
        data += @"Log Data<br/>";
        data += @"========<br/>";
        data += @"</title>";
        data += @"</head>";
        data += @"<body>";
        data += @"Date/Time:   " + log.TimeStamp.ToString( "MM/dd/yy - HH:mm:ss" ) + BR;
        data += @"Note:        " + log.Note + BR + BR;
        data += @"</body>";
        data += @"</html>";

Microsoftの問題を回避するにはあまりにも多くの作業が必要です。

EitanB

于 2012-10-05T20:02:13.177 に答える
1

args.Request.Data.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat(html));を試してください。

于 2012-10-10T14:12:44.923 に答える
0

Environment.Newlineは確かに正しい方向への一歩ですが、それがあなたの問題を解決するかどうかはわかりません。

これは、Consumer Previewの組み込みメールアプリの問題でした(RTMで修正されたかどうかは確認していません)。改行を尊重したくないようだと気づきました。小さなダミーの共有ターゲットを作成し、テキストが正しくレンダリングされていることを確認して、正しいデータが送信されていることを確認しました。共有リクエストでHTMLを送信できるかもしれません-メールはテキストだけでなくHTMLもサポートしています。

于 2012-10-05T09:11:33.087 に答える
0

まず、一般的な経験則として、文字列を一緒に追加するには、常にStringBuilderオブジェクトを使用する必要があります。この理由は次のとおりです。文字列変数は不変であるため、「+」記号を追加するたびに、実際には文字列変数のまったく新しいインスタンスが作成されます。

string data = string.Empty;
data += "Some Text Creates 1 variable";
data += "This creates a second variable" + "and this a third";
return data;

としてより適しています

StringBuilder builder = new StringBuilder()

builder.Append("Some Text Creates 1 variable");
builder.Append("Since we havent yet created a string no 2nd variable is created");
builder.AppendLine("Should create a return before this line");
builder.AppendLine(Environment.NewLine);
builder.AppendLine("Should have an empty line above it");
return builder.ToString();
// only creates 1 string variable

または、説明されているHTMLEncodeメソッドで単一の変数をラップすることもできます

return System.Net.WebUtillity.UrlEncode(builder.ToString());
于 2012-10-10T14:32:06.367 に答える