2009-05-27 2 views
2

Мне было интересно, возможно ли через .NET 2.0 MailMessage object отправить встроенный файл MHTML, созданный «на лету».Отправка inline MHTML

Byline Я имею в виду: он должен быть отправлен таким образом, чтобы пользователь мог его увидеть, как только он откроет письмо, без необходимости открывать/загружать вложение.

ответ

1

Вы пытаетесь добавить некоторые изображения в электронную почту html?

Для этого вам нужно будет встроить изображения в свой адрес электронной почты. Я нашел tutorial, чтобы выполнить его в нескольких строках кода. Вы также можете купить сборку aspnetemail. Это всегда помогало мне отправлять электронные письма со встроенными изображениями, у них также есть отличная команда поддержки, если что-то пойдет не так.

Имейте в виду, что встраивание изображения делает вашу электронную почту тяжелее, но лучше :)

+0

привет там, ну не совсем, я не пытаюсь для встраивания изображения У меня есть отчет (SSRS), озвученный и сохраненный как файл MHTML в определенное время дня на сервере, я отправляю его как вложение электронной почты, вопрос в том, могу ли я отправить его, чтобы он был включен в сообщение электронной почты it self – Ali

+0

Привет, хорошо, вы могли бы прочитать MHTML в буфер (например, любой файл) и добавить его в тело вашего письма. Возможно, вам понадобится сделать дополнительную работу для замены CID, содержащегося внутри MHTML. Это то, чего вы пытаетесь достичь? – jdecuyper

3

(jdecuyper - спасибо за вилку, как я уже писал aspNetEmail).

Вы можете сделать это с помощью aspNetEmail. Вы можете заменить все содержимое сообщения электронной почты своим MHT.

Вы не можете сделать это с помощью System.Net.Mail, но если вы хотите пойти по коммерческому маршруту, напишите мне письмо по адресу [email protected], и я покажу вам, как это можно сделать.

Если вы хотите перейти с открытым исходным кодом, возможно, есть код SMTP для кодапроекта, который вы можете изменить для этого. В основном, вы должны вводить свое содержимое в команду DATA процесса SMTP.

Замечание: Если ваш документ MHT имеет встроенные скрипты, объекты flash, activeX или что-либо, что может быть заблокировано почтовым клиентом, оно, вероятно, не будет выглядеть так же, как то, что вы видите в браузере.

+0

Вы очень желанны, это отличный продукт :) – jdecuyper

3

Это немного сложно, но да, вы можете это сделать. На самом деле класс MailMessage - это не что иное, как обертка над классом CDO.Message, который может сделать трюк. Также вы можете использовать функциональные возможности AlternateView, это более простой:

MailMessage mailMessage = new MailMessage("[email protected]" 
    ,"[email protected]" 
    ,"test" 
    ,""); 
string ContentId = "wecandoit.jpg"; 
mailMessage.Body = "<img src=\"cid:" + ContentId + "\"/>"; 
AlternateView av = AlternateView.CreateAlternateViewFromString(mailMessage.Body 
    ,null 
    ,MediaTypeNames.Text.Html); 
LinkedResource lr = new LinkedResource(@"d:\Personal\My Pictures\wecandoit.jpg"); 
lr.ContentId = ContentId; 
lr.ContentType.Name = ContentId; 
lr.ContentType.MediaType = "image/jpeg"; 
av.LinkedResources.Add(lr); 
mailMessage.AlternateViews.Add(av); 
SmtpClient cl = new SmtpClient(); 
cl.PickupDirectoryLocation = @"c:\test"; 
cl.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
cl.Send(mailMessage); 
+0

извините, но вы не включили файл jpeg? !! я спрашивал о файле MHTML – Ali

+0

, это просто пример того, как создать тело, закодированное в mime. Если у вас уже есть такое тело, это единственный способ отправить его - вы должны использовать CDO.Message. – Nisus

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

это возможно через 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 
    } 
} 
Смежные вопросы