Как я могу отправить данные MIME с электронной почтой, используя c # aspx - PullRequest
1 голос
/ 04 декабря 2009

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

Я создал электронное письмо, сохранил данные в текстовый файл, во время чтения кода в шаблоне, но когда я отправляю его, окончание строк прерывается, и поэтому данные MIME нарушаются. Я просто получаю = 3D

Что я делаю не так?

    string FILENAME = Server.MapPath("~/GuestUserTemplate.txt");
    StreamReader objStreamReader = File.OpenText(FILENAME);
    string sEmailTemplate = "";
    string input = null;
    while ((input = objStreamReader.ReadLine()) != null)
    {
        sEmailTemplate = sEmailTemplate + input;
    }
    objStreamReader.Close();

    /* send an email */
    MailMessage msg = new MailMessage();
    msg.IsBodyHtml = true;
    msg.To.Add(new MailAddress(sToEmail));
    msg.From = new MailAddress(sFromEmail);
    msg.Subject = sEmailSubject;
    msg.Body = sEmailTemplate;
    //try
    {
        client.Send(msg);
    }
    //catch (Exception excm)
    {

    }

Только что сделал немного больше детективной работы. Письмо, которое я отправляю, имеет это в заголовке:

MIME-Version: 1.0
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Где электронное письмо со встроенными изображениями имеет:

Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/related;
    boundary="----_=_NextPart_001_01C9C98D.6552117E";
    type="multipart/alternative"

Кажется, мне нужно установить тип содержимого на несколько частей, но я не уверен, как ...

Ответы [ 5 ]

2 голосов
/ 07 декабря 2009

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

Используйте image - для встроенного изображения в теле сообщения HTML (в вашем шаблоне).

Затем вам нужно будет добавить соответствующее изображение в коллекцию LinkedResources MailMessage и установить для его заголовка ContentID значение «logo.png» или как вы его называете. После этого перейдите и отправьте свою почту (тип составного содержимого будет автоматически установлен для вас в зависимости от структуры почтового сообщения).

P.S. : используйте SendAsync () или напишите письмо в локальную очередь получения вашего собственного сервера smtp, в противном случае вы связываете свой рабочий поток ASP.NET. Подключение к удаленным SMTP-серверам / веб-службам и т. Д. Занимает значительное время (по сравнению со временем выполнения запроса), и рабочий поток находится в ожидании и не может обслуживать другие входящие запросы.

0 голосов
/ 07 декабря 2009

Суть в том, что вы не можете сделать это с System.Net.Mail.

Вот проблема, с которой вы столкнулись.

  1. Кодировка.

    Ваше оригинальное письмо было сохранено в кодировке для печати в кавычках (отсюда и "= 3D", которые вы видите). Кодировки используются для защиты сообщения во время передачи SMTP.

  2. Границы.

    Когда создается сообщение, в заголовках используются границы, чтобы сообщить почтовому клиенту границы различных частей сообщения. Вы пытаетесь взять границы одного сообщения и объединить их в новое сообщение. Поскольку System.Net.Mail не дает достаточного контроля над внутренними границами, вы не можете этого сделать.

    Если вы хотите отправить встроенное изображение с помощью System.Net.Mail, вам нужно будет создать сообщение с использованием связанного ресурса. Вот ссылка с более:

http://systemnetmail.com/faq/4.4.aspx

0 голосов
/ 04 декабря 2009

Проверьте ваш текстовый файл - в нем может отсутствовать ожидаемое окончание строки (Cr + Lf).

0 голосов
/ 04 декабря 2009

Изменить цикл while с:

while ((input = objStreamReader.ReadLine()) != null)
{
    sEmailTemplate = sEmailTemplate + input;
}

Кому:

sEmailTemplate = sEmailTemplate + objStreamReader.ReadToEnd();
0 голосов
/ 04 декабря 2009

Вы должны использовать System.Net.Mail. Создайте сообщение MailMessage, затем добавьте вложение и отправьте с помощью SmtpClient.

...