.NET 4.x Отправка почты с вложением - C#
Формулировка задачи:
Есть необходимость выполнить отправку сообщения с прикрепленным файлом. Скрипт отправки расположен на хостинге в виде PHP.
В HTML отправка происходит нормально:
Как эти данные отправить скрипту из C#?
Листинг программы
- <form action=sendMail.php enctype='multipart/form-data' method=post>
- <tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
- <tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
- <tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
- <tr><td width=50%>Файл:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
- </tr><tr><td colspan=2><input type=submit value='Отправить'></td></tr>
- </form>
Решение задачи: «.NET 4.x Отправка почты с вложением»
textual
Листинг программы
- // [url]https://stackoverflow.com/a/2996904[/url]
- public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc) {
- log.Debug(string.Format("Uploading {0} to {1}", file, url));
- string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
- byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
- HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
- wr.ContentType = "multipart/form-data; boundary=" + boundary;
- wr.Method = "POST";
- wr.KeepAlive = true;
- wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
- Stream rs = wr.GetRequestStream();
- string formdataTemplate = "Content-Disposition: form-data; name="{0}"\r\n\r\n{1}";
- foreach (string key in nvc.Keys)
- {
- rs.Write(boundarybytes, 0, boundarybytes.Length);
- string formitem = string.Format(formdataTemplate, key, nvc[key]);
- byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
- rs.Write(formitembytes, 0, formitembytes.Length);
- }
- rs.Write(boundarybytes, 0, boundarybytes.Length);
- string headerTemplate = "Content-Disposition: form-data; name="{0}"; filename="{1}"\r\nContent-Type: {2}\r\n\r\n";
- string header = string.Format(headerTemplate, paramName, file, contentType);
- byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
- rs.Write(headerbytes, 0, headerbytes.Length);
- FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
- byte[] buffer = new byte[4096];
- int bytesRead = 0;
- while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) {
- rs.Write(buffer, 0, bytesRead);
- }
- fileStream.Close();
- byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
- rs.Write(trailer, 0, trailer.Length);
- rs.Close();
- WebResponse wresp = null;
- try {
- wresp = wr.GetResponse();
- Stream stream2 = wresp.GetResponseStream();
- StreamReader reader2 = new StreamReader(stream2);
- log.Debug(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
- } catch(Exception ex) {
- log.Error("Error uploading file", ex);
- if(wresp != null) {
- wresp.Close();
- wresp = null;
- }
- } finally {
- wr = null;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д