2010-06-07 3 views
0

J'ai un MHTML déjà généré sous la forme d'un tableau d'octets (de Aspose.Words) et je voudrais l'envoyer sous forme de courrier électronique. J'essaye de faire ceci par l'intermédiaire de CDOSYS, bien que je suis ouvert à d'autres suggestions. Pour l'instant, si je donne les résultats suivants:Envoyer MHTML déjà généré en utilisant CDOSYS à travers C#?

 CDO.Message oMsg = new CDO.Message(); 
     CDO.IConfiguration iConfg = oMsg.Configuration; 
     Fields oFields = iConfg.Fields; 

     // Set configuration. 
     Field oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"]; 
     oField.Value = CDO.CdoSendUsing.cdoSendUsingPort; 
     oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpserver"]; 
     oField.Value = SmtpClient.Host; 
     oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"]; 
     oField.Value = SmtpClient.Port; 
     oFields.Update(); 

     //oMsg.CreateMHTMLBody("http://www.microsoft.com", CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); 
     // NEED MAGIC HERE :) 
     oMsg.Subject = warning.Subject;    // string 

     oMsg.From = "[email protected]"; 
     oMsg.To = warning.EmailAddress; 
     oMsg.Send(); 

Dans cet extrait, la variable d'avertissement a une propriété du corps qui est un octet []. Où il est dit "BESOIN MAGIQUE ICI" dans le code ci-dessus, je veux utiliser ce byte [] pour définir le corps du message CDO.

J'ai essayé ce qui suit, ce qui ne fonctionne pas sans surprise:

oMsg.HTMLBody = System.Text.Encoding.ASCII.GetString(warning.Body); 

quelqu'un a des idées comment je peux obtenir ce que je veux avec CDOSYS ou autre chose?

Répondre

0

Veuillez ne pas utiliser CDO, il date d'une époque où les ordinateurs utilisaient encore des signaux de fumée pour échanger des courriels. System.Net.Mail contient tout ce dont vous avez besoin, MailMessage est votre ami. Notez sa propriété IsBodyHtml.

+0

J'ai regardé System.Net.Mail et MailMessage mais ne semble pas supporter MHTML. Et n'est-ce pas juste un emballage pour CDOSYS de toute façon? CDOSYS semble au moins avoir un peu de support pour MHTML, mais il semble que vous deviez utiliser CDOSYS pour générer le MHTML qui n'est pas vraiment ce que je veux. –

+0

Vous feriez mieux de partir du principe que peu de gens lisent ce que MHTML signifie. –

+0

Cela ne fonctionnera pas. L'autre réponse ici sera. – thomas

0

Il est possible via CDO.Message (il est nécessaire ajouter des références au projet bibliothèque COM "Microsoft CDO pour Windows 2000 Library"):

protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) 
{ 
    string smtpAddress = "smtp.email.com"; 

    try 
    { 
     CDO.Message oMessage = new CDO.Message(); 

     // set message 
     ADODB.Stream oStream = new ADODB.Stream(); 
     oStream.Charset = "ascii"; 
     oStream.Open(); 
     oStream.WriteText(MHTmessage); 
     oMessage.DataSource.OpenObject(oStream, "_Stream"); 

     // set configuration 
     ADODB.Fields oFields = oMessage.Configuration.Fields; 
     oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; 
     oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; 
     oFields.Update(); 

     // set other values 
     oMessage.MimeFormatted = true; 
     oMessage.Subject = subject; 
     oMessage.Sender = emailFrom; 
     oMessage.To = emailTo; 
     oMessage.Send(); 
    } 
    catch (Exception ex) 
    { 
     // something wrong 
    } 
} 
+0

Cela fonctionne. Ne laissez pas la réponse acceptée vous tromper en pensant que vous devriez utiliser MailMessage. Je n'ai pas encore réussi à trouver un moyen de le faire sans CDO (et sans payer pour un logiciel commercial). – thomas

Questions connexes