2009-05-27 4 views
2

Je me demandais s'il était possible via le .NET 2.0 MailMessage object d'envoyer un fichier MHTML en ligne créé à la volée.envoi en ligne MHTML

Par inline, je veux dire: Il doit être envoyé de manière à ce que l'utilisateur puisse le voir, une fois qu'il a ouvert l'email, sans devoir ouvrir/télécharger la pièce jointe.

Répondre

1

Etes-vous en train d'essayer d'ajouter des images à un email html?

Pour ce faire, vous devrez intégrer les images dans votre courriel. J'ai trouvé un tutorial pour l'accomplir dans quelques lignes de code. Vous pouvez également acheter l'ensemble aspnetemail. Cela m'a toujours beaucoup aidé à envoyer des emails avec des images intégrées, ils ont aussi une excellente équipe de support si quelque chose ne va pas.

Gardez à l'esprit que l'intégration des images rend votre email plus lourd, mais plus agréable :)

+0

bonjour là, eh bien pas exactement, je ne suis pas en train pour incorporer une image J'ai un rapport de rapport (SSRS) genuated et enregistré en tant que fichier MHTML à l'heure de la journée dans le serveur Je l'envoie en pièce jointe, la question est: puis-je l'envoyer pour être intégré dans l'email? – Ali

+0

Salut, bien, vous pouvez lire le MHTML dans un tampon (comme n'importe quel type de fichier) et l'ajouter le corps de votre e-mail. Vous devrez peut-être effectuer un travail supplémentaire pour remplacer le CID contenu dans le MHTML. Est-ce ce que vous essayez d'accomplir? – jdecuyper

3

(jdecuyper - merci pour la prise, comme je l'ai écrit aspNetEmail).

Vous pouvez le faire avec aspNetEmail. Vous pouvez remplacer tout le contenu du message électronique par votre MHT.

Vous ne pouvez pas faire cela avec System.Net.Mail, mais si vous voulez suivre la route commerciale, envoyez moi un courriel à [email protected] et je vous montrerai comment cela peut être fait.

Si vous souhaitez utiliser une route open source, il existe probablement du code SMTP sur codeproject que vous pouvez modifier pour ce faire. Fondamentalement, vous devez injecter votre contenu dans la commande DATA du processus SMTP. Une chose à noter: Si votre document MHT a des scripts intégrés, des objets flash, des objets ActiveX ou tout ce qui peut être bloqué par le client de messagerie, il ne sera probablement pas rendu le même que ce que vous voyez dans le navigateur.

+0

Vous êtes les bienvenus, c'est un excellent produit :) – jdecuyper

3

C'est un peu difficile, mais oui, vous pouvez le faire. En fait, la classe MailMessage n'est rien de plus qu'un wrapper au-dessus de la classe CDO.Message du système qui peut faire l'affaire. vous pouvez également utiliser la fonctionnalité de AlternateView, il est plus simple:

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

désolé mais vous ne comprenez pas un fichier jpeg? !! Je demandais à propos du fichier MHTML – Ali

+0

c'est juste pour donner un exemple sur la façon de produire un corps encodé mime. Si vous avez déjà un tel corps, c'est seulement la seule façon de l'envoyer - vous devriez utiliser CDO.Message. – Nisus

0

Il est possible via CDO.Message (il est nécessaire, ajouter de projet références COM bibliothèque "CDO Microsoft pour 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 
    } 
} 
0

il est possible via CDO.Message (il est nécessaire ajouter des références au projet bibliothèque COM "Microsoft CDO pour 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 
    } 
}