2010-06-07 4 views
0

У меня есть готовый MHTML-массив в виде байтового массива (из Aspose.Words) и вы хотите отправить его в виде электронной почты. Я пытаюсь сделать это через CDOSYS, хотя я открыт для других предложений. В настоящее время, хотя у меня есть следующие:Отправить уже сгенерированный MHTML с помощью CDOSYS через 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(); 

В этом фрагменте переменная предупреждение имеет свойство тела, которое является байт []. Где он говорит «НЕОБХОДИМО ВОЛШЕБНО ЗДЕСЬ» в приведенном выше коде, я хочу использовать этот байт [] для установки тела сообщения CDO.

Я попробовал следующее, что неудивительно, не работает:

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

Кто-нибудь есть какие-либо идеи, как я могу добиться того, что я хочу с CDOSYS или что-то еще?

ответ

0

Пожалуйста, не используйте CDO, это датируется эпохой, когда компьютеры по-прежнему используют дымовые сигналы для обмена электронными письмами. System.Net.Mail содержит все, что вам нужно, MailMessage - ваш друг. Обратите внимание на его свойство IsBodyHtml.

+0

Я смотрю на System.Net.Mail и MailMessage, но это похоже, не поддерживает MHTML. И разве это не просто обертка для CDOSYS? У CDOSYS, по-видимому, есть * некоторая * поддержка MHTML, но, похоже, вам нужно использовать CDOSYS для создания MHTML, чего я не хочу. – 2010-06-08 02:56:18

+0

Возможно, вам лучше работать, исходя из предположения, что мало кто из читающих это знает, что означает MHTML. –

+0

Это не сработает. Другой ответ здесь будет. – thomas

0

Это возможно через CDO.Message (необходимо добавить к проекту ссылки COM библиотеки «Microsoft CDO для Windows 2000. Библиотека»):

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

Это работает. Не допускайте, чтобы принятый ответ обманул вас, полагая, что вы должны использовать MailMessage. Мне еще не удалось найти способ сделать это без CDO (и без оплаты коммерческого программного обеспечения). – thomas