使用CDOSYS通过C#发送已生成的MHTML?

时间:2010-06-07 22:46:24

标签: c# email com-interop mhtml

我有一个现成的MHTML作为字节数组(来自Aspose.Words),并希望将其作为电子邮件发送。我试图通过CDOSYS做到这一点,但我愿意接受其他建议。目前虽然我有以下内容:

        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 = "system@example.com";
        oMsg.To = warning.EmailAddress;
        oMsg.Send();

在此片段中,警告变量具有Body属性,该属性是byte []。在上面的代码中它说“NEED MAGIC HERE”,我想使用这个byte []来设置CDO消息的正文。

我尝试了以下内容,不出意料地无效:

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

任何人都有任何想法如何用CDOSYS或其他东西实现我想要的东西?

2 个答案:

答案 0 :(得分:0)

请不要使用CDO,它可以追溯到计算机仍然使用烟雾信号来交换电子邮件的时代。 System.Net.Mail包含您需要的一切,MailMessage是您的朋友。注意它的IsBodyHtml属性。

答案 1 :(得分:0)

可以通过CDO.Message(有必要添加到项目引用COM库“Microsoft CDO for 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
    }
}