0

我有一个已生成的 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[]。在上面的代码中它说“这里需要魔法”的地方我想使用这个字节 [] 来设置 CDO 消息的正文。

我尝试了以下方法,不出所料,这不起作用:

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

有人知道如何使用 CDOSYS 或其他东西实现我想要的吗?

4

2 回答 2

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
    }
}
于 2010-11-16T17:08:46.957 回答
0

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

于 2010-06-08T00:31:17.590 回答