2016-02-22 1 views
0

J'utilise le protocole IMAP pour obtenir le courrier électronique à partir des boîtes de réception. Maintenant, je dois convertir le résultat qui est une liste de MailMessage à RawContent, pour le convertir en OpenPop.Pop3 message, mais quand je l'utiliseComment faire pour convertir System.Net.MailMessage à RawContent

var message = nouveau OpenPop.Mime.Message (rawMessage);

si elle est le contenu contient le contenu persan, par exemple dans « From » ou « A » section du courrier électronique d'en-tête si le nom d'affichage est « مسعود بهرامی », Après le convertir en OpenPop message il convertir en « ???? ?????????? "

est ici code pour Extrait RawMessage de MailMessage

private const BindingFlags Flags = BindingFlags.Instance | BindingFlags.NonPublic; 
    private static readonly Type MailWriter = typeof(SmtpClient).Assembly.GetType("System.Net.Mail.MailWriter"); 
    private static readonly ConstructorInfo MailWriterConstructor = MailWriter.GetConstructor(Flags, null, new[] { typeof(Stream) }, null); 
    private static readonly MethodInfo CloseMethod = MailWriter.GetMethod("Close", Flags); 
    private static readonly MethodInfo SendMethod = typeof(MailMessage).GetMethod("Send", Flags); 

    /// <summary> 
    /// A little hack to determine the number of parameters that we 
    /// need to pass to the SaveMethod. 
    /// </summary> 
    private static readonly bool IsRunningInDotNetFourPointFive = SendMethod.GetParameters().Length == 3; 

    /// <summary> 
    /// The raw contents of this MailMessage as a MemoryStream. 
    /// </summary> 
    /// <param name="self">The caller.</param> 
    /// <returns>A MemoryStream with the raw contents of this MailMessage.</returns> 
    public static MemoryStream RawMessage(this MailMessage self) 
    { 
     var result = new MemoryStream(); 

     var mailWriter = MailWriterConstructor.Invoke(new object[] { result }); 
     SendMethod.Invoke(self, Flags, null, IsRunningInDotNetFourPointFive ? new[] { mailWriter, true, true } : new[] { mailWriter, true }, null); 
     result = new MemoryStream(result.ToArray()); 
     CloseMethod.Invoke(mailWriter, Flags, null, new object[] { }, null); 
     return result; 
    } 

Répondre

0

Essayez de remplacer

résultat = new MemoryStream (result.ToArray());

avec:

résultat = new MemoryStream (. Encoding.UTF8.GetBytes (result.ToArray() ToString()));

Espérons que ça aide.

+0

merci, mais cette web sera le résultat d'une exception "flux de mémoire n'est pas extensible." –