電子郵件傳輸非文字資料(圖片、附件)需經 MIME 編碼(RFC 1341/2045)。常見兩種:
using System;
public static class Base64Util
{
private const string Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
public static string Encode(byte[] input)
{
if (input == null || input.Length == 0) return string.Empty;
return Convert.ToBase64String(input);
}
public static byte[] Decode(string input)
{
if (string.IsNullOrEmpty(input)) return Array.Empty<byte>();
return Convert.FromBase64String(input);
}
}
.NET 內建 Convert.ToBase64String/FromBase64String 已完整實作標準演算法,建議直接使用。
public static class QuotedPrintableUtil
{
public static string Encode(string input)
{
// 簡易實作:將非 ASCII 字元轉為 =XX 形式
var bytes = System.Text.Encoding.GetEncoding("Big5").GetBytes(input); // 或 UTF-8
var sb = new System.Text.StringBuilder();
foreach (byte b in bytes)
{
if (b > 127 || b == '=')
sb.AppendFormat("={0:X2}", b);
else
sb.Append((char)b);
}
return sb.ToString();
}
public static string Decode(string input)
{
var sb = new System.Text.StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (input[i] == '=' && i + 2 < input.Length)
{
string hex = input.Substring(i + 1, 2);
if (byte.TryParse(hex, System.Globalization.NumberStyles.HexNumber, null, out byte b))
{
sb.Append((char)b);
i += 2;
continue;
}
}
sb.Append(input[i]);
}
return sb.ToString();
}
}
System.Net.Mime 或第三方庫 (MimeKit) 完整解析 MIME 訊息。