OpenSmtp es un buen componente de envío de correo electrónico en la plataforma .Net, pero tiene algunos errores que afectan nuestro uso. Durante el uso, encontré mensajes confusos cuando la longitud del asunto del correo electrónico era grande.
Después de verificar el código fuente, se descubrió que había problemas con el proceso de procesamiento original: en primer lugar, el tema se codificó mediante ASCII y, en segundo lugar, se utilizó la codificación QP, pero no se consideró la diferencia entre tema y contenido.
Al codificar dentro de temas, cada fila debe codificarse individualmente y no se puede codificar el tema completo.
Después de comparar con Outlook Express, se agrega un método a la clase MailEncoding para realizar la codificación Base64 específicamente para el asunto del correo electrónico.
cadena estática pública ConvertHeaderToBase64 (cadena s, conjunto de caracteres de cadena)
{
int lineLength = 40; // Cada línea procesa 40 bytes
Codificación codificación = Encoding.GetEncoding(charset); // Obtiene la codificación especificada;
byte[] buffer = codificación.GetBytes(s); // Convertir a código de bytes
StringBuilder sb = new StringBuilder(); // Guarda el resultado final
línea base64 de cadena;
int block = buffer.Length%lineLength==0?buffer.Length/lineLength:buffer.Length/lineLength + 1;
para(int i=0; i< bloque; i++)
{
if( buffer.Longitud - i*longituddelinea >=longituddelinea )
linebase64 = Convert.ToBase64String(búfer, i*longituddelínea,longituddelínea);
demás
linebase64 = Convert.ToBase64String(búfer, i*longituddelínea, búfer.Longitud - i*longituddelínea);
sb.Append("=?");
sb.Append(juego de caracteres);
sb.Append("?B?");
sb.Append(linebase64);
sb.Append( "?=rnt" );
}
sb.Remove( sb.Length-3, 3); // Elimina el último carácter de nueva línea
devolver sb.ToString();
}
Luego, modifique el procesamiento del asunto del correo electrónico en el método ToString en la clase MailMessage para llamar a un método personalizado.
// sb.Append("Asunto: " + MailEncoder.ConvertHeaderToQP(cleanSubject.ToString(), conjunto de caracteres) + "rn");
sb.Append("Asunto: " + MailEncoder.ConvertHeaderToBase64( cleanSubject.ToString(), conjunto de caracteres) + "rn");
Simplemente vuelva a compilar
Fuente: haogj