2008年12月29日月曜日

VC# mailtoでメール作成 その2

VC# mailto でメール作成する時に、
Urlエンコードされちゃ、マズイのをゴリゴリ回避

URLエンコードの特性上(?)、ダブルコーテーション["] → %22、半角スペース[ ] → + にと変換されてしまうらしいので、ダミー文字列に置き換えて、UrlEncodeした後、再度ダミーを元に戻す。
→ ["]は、そのままで大丈夫だったので、とりあえずスペースだけ。

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
private string MailEncode(string iData, string iEncNm)
{
  // ダミー置換定義 [i,0]=ORG [i,1]=ダミー
  // 定義1個しかないけど、、、とりあえず配列にしておく。 後で追加するかも!?
  // ダミー文字列は、URLエンコードされない文字で、かつ元データで使わないだろう・・・と思われるものを適切に(適当に?)
  const int ORG = 0;
  const int DMY = 1;
  string[,] RepDefs = new string[,] { {" ", "(((SpaceDeSuYo)))"}};

  string RtnVal = iData;
  System.Text.Encoding enc = System.Text.Encoding.GetEncoding(iEncNm);

  int MaxRow = RepDefs.GetLength(0); // 定義行数
  for (int i = 0; i < intMaxRow; i++)
     {
     // URLエンコードしたくない文字を一旦ダミーの文字に置換
     RtnVal = RtnVal.Replace(RepDefs[i, ORG], RepDefs[i, DMY]); 
    // URLエンコード
     RtnVal = System.Web.HttpUtility.UrlEncode(RtnVal, enc);
     // ダミーの文字にしたものを、戻す
     RtnVal = RtnVal.Replace(strRepDefs[i, DMY], RepDefs[i, ORG]);
   }
   return RtnVal; 
}


参考:自blog
・VC# mailtoでメール作成  http://oojima33.blogspot.com/2008/12/vcmailto.html

 ってか、本当は、1記事で書いていたんだけど、途中から文章が壊れる。。。ので、2分割しただけ。 文字数多すぎた? そのうち調べてみようかな。

0 件のコメント: