MailUtil.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //
  2. // System.Web.Mail.MailUtil.cs
  3. //
  4. // Author(s):
  5. // Per Arneng <[email protected]>
  6. //
  7. //
  8. //
  9. // Permission is hereby granted, free of charge, to any person obtaining
  10. // a copy of this software and associated documentation files (the
  11. // "Software"), to deal in the Software without restriction, including
  12. // without limitation the rights to use, copy, modify, merge, publish,
  13. // distribute, sublicense, and/or sell copies of the Software, and to
  14. // permit persons to whom the Software is furnished to do so, subject to
  15. // the following conditions:
  16. //
  17. // The above copyright notice and this permission notice shall be
  18. // included in all copies or substantial portions of the Software.
  19. //
  20. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  21. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  23. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  24. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  25. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  26. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27. //
  28. using System;
  29. using System.Text;
  30. namespace System.Web.Mail {
  31. // This class contains some utillity functions
  32. // that doesnt fit in other classes and to keep
  33. // high cohesion on the other classes.
  34. internal class MailUtil {
  35. // determines if a string needs to
  36. // be encoded for transfering over
  37. // the smtp protocol without risking
  38. // that it would be changed.
  39. public static bool NeedEncoding( string str ) {
  40. foreach( char chr in str ) {
  41. int ch = (int)chr;
  42. if( ! ( (ch > 61) && (ch < 127) || (ch>31) && (ch<61) ) ) {
  43. return true;
  44. }
  45. }
  46. return false;
  47. }
  48. // Encodes a string to base4
  49. public static string Base64Encode( string str ) {
  50. return Convert.ToBase64String( Encoding.Default.GetBytes( str ) );
  51. }
  52. // Generate a unique boundary
  53. public static string GenerateBoundary() {
  54. StringBuilder boundary = new StringBuilder("__MONO__Boundary");
  55. boundary.Append("__");
  56. DateTime now = DateTime.Now;
  57. boundary.Append(now.Year);
  58. boundary.Append(now.Month);
  59. boundary.Append(now.Day);
  60. boundary.Append(now.Hour);
  61. boundary.Append(now.Minute);
  62. boundary.Append(now.Second);
  63. boundary.Append(now.Millisecond);
  64. boundary.Append("__");
  65. boundary.Append((new Random()).Next());
  66. boundary.Append("__");
  67. return boundary.ToString();
  68. }
  69. }
  70. }