отправка встроенного MHTML - PullRequest
2 голосов
/ 27 мая 2009

Мне было интересно, возможно ли с помощью объекта .NET 2.0 MailMessage отправить встроенный файл MHTML, созданный на лету.

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

Ответы [ 5 ]

3 голосов
/ 28 мая 2009

(jdecuyper - спасибо за плагин, как я написал aspNetEmail).

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

Вы не можете сделать это с System.Net.Mail, но если вы хотите пойти по коммерческому маршруту, напишите мне по электронной почте на dave@advancedintellect.com, и я покажу вам, как это можно сделать.

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

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

3 голосов
/ 02 июня 2009

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

MailMessage mailMessage = new MailMessage("me@me.com"
    ,"me@me.com"
    ,"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);
1 голос
/ 27 мая 2009

Вы пытаетесь добавить изображения в HTML-письмо?

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

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

0 голосов
/ 16 ноября 2010

Это возможно через CDO.

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 голосов
/ 16 ноября 2010

Возможно через 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
    }
}
...