.NET 4.x Отправка почты с вложением - C#

Узнай цену своей работы

Формулировка задачи:

Есть необходимость выполнить отправку сообщения с прикрепленным файлом. Скрипт отправки расположен на хостинге в виде PHP. В HTML отправка происходит нормально:
Листинг программы
  1. <form action=sendMail.php enctype='multipart/form-data' method=post>
  2. <tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
  3. <tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
  4. <tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
  5. <tr><td width=50%>Файл:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
  6. </tr><tr><td colspan=2><input type=submit value='Отправить'></td></tr>
  7. </form>
Как эти данные отправить скрипту из C#?

Решение задачи: «.NET 4.x Отправка почты с вложением»

textual
Листинг программы
  1. // [url]https://stackoverflow.com/a/2996904[/url]
  2.  
  3.     public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc) {
  4.         log.Debug(string.Format("Uploading {0} to {1}", file, url));
  5.         string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  6.         byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  7.  
  8.         HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  9.         wr.ContentType = "multipart/form-data; boundary=" + boundary;
  10.         wr.Method = "POST";
  11.         wr.KeepAlive = true;
  12.         wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  13.  
  14.         Stream rs = wr.GetRequestStream();
  15.  
  16.         string formdataTemplate = "Content-Disposition: form-data; name="{0}"\r\n\r\n{1}";
  17.         foreach (string key in nvc.Keys)
  18.         {
  19.             rs.Write(boundarybytes, 0, boundarybytes.Length);
  20.             string formitem = string.Format(formdataTemplate, key, nvc[key]);
  21.             byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  22.             rs.Write(formitembytes, 0, formitembytes.Length);
  23.         }
  24.         rs.Write(boundarybytes, 0, boundarybytes.Length);
  25.  
  26.         string headerTemplate = "Content-Disposition: form-data; name="{0}"; filename="{1}"\r\nContent-Type: {2}\r\n\r\n";
  27.         string header = string.Format(headerTemplate, paramName, file, contentType);
  28.         byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  29.         rs.Write(headerbytes, 0, headerbytes.Length);
  30.  
  31.         FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
  32.         byte[] buffer = new byte[4096];
  33.         int bytesRead = 0;
  34.         while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) {
  35.             rs.Write(buffer, 0, bytesRead);
  36.         }
  37.         fileStream.Close();
  38.  
  39.         byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  40.         rs.Write(trailer, 0, trailer.Length);
  41.         rs.Close();
  42.  
  43.         WebResponse wresp = null;
  44.         try {
  45.             wresp = wr.GetResponse();
  46.             Stream stream2 = wresp.GetResponseStream();
  47.             StreamReader reader2 = new StreamReader(stream2);
  48.             log.Debug(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
  49.         } catch(Exception ex) {
  50.             log.Error("Error uploading file", ex);
  51.             if(wresp != null) {
  52.                 wresp.Close();
  53.                 wresp = null;
  54.             }
  55.         } finally {
  56.             wr = null;
  57.         }
  58.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы