отправка почты вместе со встроенным изображением с использованием asp.net - PullRequest
16 голосов
/ 11 июля 2009

отправка почты вместе со встроенным изображением с использованием 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)

Ответы [ 2 ]

30 голосов
/ 11 июля 2009

Если вы используете .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.

9 голосов
/ 22 февраля 2014

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

inMy.aspx asp.net file

<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 /957483/otpravka-pochty-vmeste-so-vstroennym-izobrazheniem-s-ispolzovaniem-asp-net 
       and http://stackoverflow.com/questions/886728/generating-html-email-body-in-c-sharp */

    string myTestReceivingEmail = "yourEmail@address.com"; // 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("emailFrom@address.co.uk", "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: \ 1012 *

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory" from="madeupEmail@address.com">
            <specifiedPickupDirectory pickupDirectoryLocation="C:\TempMail"/>
        </smtp>
    </mailSettings>
</system.net>

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

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

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

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

веселит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...