2009-07-11 3 views
15

отправки почты вместе со встроенным изображение с помощью ASP.NETотправка почты вместе с вставленным изображением, используя asp.net

Я уже использовал следующие, но он не может работать

Dim EM As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage(txtFrom.Text, txtTo.Text) 
     Dim A As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(txtImagePath.Text) 
     Dim RGen As Random = New Random() 
     A.ContentId = RGen.Next(100000, 9999999).ToString() 
     EM.Attachments.Add(A) 
     EM.Subject = txtSubject.Text 
     EM.Body = "<body>" + txtBody.Text + "<br><img src='cid:" + A.ContentId +"'></body>" 
     EM.IsBodyHtml = True 
     Dim SC As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient(txtSMTPServer.Text) 
     SC.Send(EM) 

ответ

29

Если вы используете. NET 2 или выше вы можете использовать AlternateView и классы LinkedResource вроде этого:

string html = @"<html><body><img src=""cid:YourPictureId""></body></html>"; 
AlternateView altView = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html); 

LinkedResource yourPictureRes = new LinkedResource("yourPicture.jpg", MediaTypeNames.Image.Jpeg); 
yourPictureRes.ContentId = "YourPictureId"; 
altView.LinkedResources.Add(yourPictureRes); 

MailMessage mail = new MailMessage(); 
mail.AlternateViews.Add(altView); 

Надеюсь, вы можете вывести VB эквивалент.

+2

Избито человеком с тем же именем. –

+1

Иногда это случается;) – Alex

+6

получить избили лучше, чем получить ваши глаза «клюнул», я бы догадался –

8

После поиска и попыток должно быть четыре или пять «ответов». Я чувствовал, что должен делиться тем, что, как я понял, действительно работает, так как многие люди, похоже, не знают, как это сделать, или некоторые из них дают подробные ответы, которые так много других имеют проблемы с, плюс несколько делают и дают только отрывочный ответ, который затем должен интерпретироваться. Поскольку у меня нет блога, но я хотел бы помочь другим, вот полный код, чтобы сделать все это. Большое спасибо Алексу Пеку, так как его ответ расширился.

файл inMy.aspx asp.net

<div> 
    <asp:LinkButton ID="emailTestLnkBtn" runat="server" OnClick="sendHTMLEmail">testemail</asp:LinkButton> 
</div> 

inMy.aspx.cs код за C# файл

protected void sendHTMLEmail(object s, EventArgs e) 
{ 
    /* adapted from http://stackoverflow.com/questions/1113345/sending-mail-along-with-embedded-image-using-asp-net 
     and http://stackoverflow.com/questions/886728/generating-html-email-body-in-c-sharp */ 

    string myTestReceivingEmail = "[email protected]"; // your Email address for testing or the person who you are sending the text to. 
    string subject = "This is the subject line"; 
    string firstName = "John"; 
    string mobileNo = "07711 111111"; 

    // Create the message. 
    var from = new MailAddress("[email protected]", "displayed from Name"); 
    var to = new MailAddress(myTestReceivingEmail, "person emailing to's displayed Name"); 
    var mail = new MailMessage(from, to); 
    mail.Subject = subject; 

    // Perform replacements on the HTML file (which you're using as a template). 
    var reader = new StreamReader(@"c:\Temp\HTMLfile.htm"); 
    string body = reader.ReadToEnd().Replace("%TEMPLATE_TOKEN1%", firstName).Replace("%TEMPLATE_TOKEN2%", mobileNo); // and so on as needed... 

    // replaced this line with imported reader so can use a templete .... 
    //string html = body; //"<html><body>Text here <br/>- picture here <br /><br /><img src=""cid:SACP_logo_sml.jpg""></body></html>"; 

    // Create an alternate view and add it to the email. Can implement an if statement to decide which view to add // 
    AlternateView altView = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html); 

    // Logo 1 // 
    string imageSource = (Server.MapPath("") + "\\logo_sml.jpg"); 
    LinkedResource PictureRes = new LinkedResource(imageSource, MediaTypeNames.Image.Jpeg); 
    PictureRes.ContentId = "logo_sml.jpg"; 
    altView.LinkedResources.Add(PictureRes); 

    // Logo 2 // 
    string imageSource2 = (Server.MapPath("") + "\\booking_btn.jpg"); 
    LinkedResource PictureRes2 = new LinkedResource(imageSource2, MediaTypeNames.Image.Jpeg); 
    PictureRes2.ContentId = "booking_btn.jpg"; 
    altView.LinkedResources.Add(PictureRes2); 

    mail.AlternateViews.Add(altView); 

    // Send the email (using Web.Config file to store email Network link, etc.) 
    SmtpClient mySmtpClient = new SmtpClient(); 
    mySmtpClient.Send(mail); 
} 

HTMLfile.htm

<html> 
<body> 
    <img src="cid:logo_sml.jpg"> 
    <br /> 
    Hi %TEMPLATE_TOKEN1% . 
    <br /> 
    <br/> 
    Your mobile no is %TEMPLATE_TOKEN2% 
    <br /> 
    <br /> 
    <img src="cid:booking_btn.jpg"> 
</body> 
</html> 

в файле Web.Config , внутри вашей конфигурации <> вам потребуется следующее, чтобы разрешить тестирование в папке TempMail на вашем c: \ dri ве

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="SpecifiedPickupDirectory" from="[email protected]"> 
      <specifiedPickupDirectory pickupDirectoryLocation="C:\TempMail"/> 
     </smtp> 
    </mailSettings> 
</system.net> 

единственных других вещей, которые вы будете нуждаться в верхней части вашего aspx.cs код позади файла являются Использование системы включает в себя (если я пропустил один из вас просто щелкнуть правую кнопку мыши на неизвестном классе и выбрать опция «Resolve»)

using System.Net.Mail; 
using System.Text; 
using System.Reflection; 
using System.Net.Mime; // need for mail message and text encoding 
using System.IO; 

Надеется, что это помогает кому-то и большое спасибо вышеприведенном плакату для давая ответ, необходимый для выполнения работы (а также другая ссылка в моем коде).

Это работает, но я открыт для улучшения.

ура.