Я пытаюсь создать форму, которая отправит электронное письмо с прикрепленным изображением, и у меня возникли некоторые проблемы. Форма, которую я создаю, довольно большая, поэтому для этого вопроса я создал небольшую тестовую форму. Электронное письмо будет отправлено, и в нем будет вложение, но изображение повреждено или что-то в этом роде.
Также ..
Я не хочу сохранять изображение в файловую систему. Вы можете подумать, что извлекать файл изображения из файла загрузки в поток непросто, но это связано с тем фактом, что реальная форма, над которой я работаю, позволит добавить несколько файлов через одну загрузку файла и будет сохранена в сессии таким образом, изображения не будут поступать из элемента управления загрузкой файлов непосредственно при отправке.
Файл: TestAttachSend.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestAttachSend.aspx.cs" Inherits="TestAttachSend" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Send Email with Image Attachment</h1>
Email Address TO: <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox><br />
Attach JPEG Image: <asp:FileUpload ID="fuImage" runat="server" /><br />
<br />
<asp:Button ID="btnSend" runat="server" Text="Send" onclick="btnSend_Click" /><br />
<br />
<asp:label ID="lblSent" runat="server" text="Image Sent!" Visible="false" EnableViewState="false"></asp:label>
</div>
</form>
</body>
</html>
Файл: TestAttachSend.aspx.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.IO;
public partial class TestAttachSend : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSend_Click(object sender, EventArgs e)
{
if (fuImage.HasFile && fuImage.PostedFile.ContentType == System.Net.Mime.MediaTypeNames.Image.Jpeg)
{
SmtpClient emailClient = new SmtpClient();
MailMessage EmailMsg = new MailMessage();
EmailMsg.To.Add(txtEmail.Text.Trim());
EmailMsg.From = new MailAddress(txtEmail.Text.Trim());
EmailMsg.Subject = "Attached Image";
EmailMsg.Body = "Image is attached!";
MemoryStream imgStream = new MemoryStream();
System.Drawing.Image img = System.Drawing.Image.FromStream(fuImage.PostedFile.InputStream);
string filename = fuImage.PostedFile.FileName;
img.Save(imgStream, System.Drawing.Imaging.ImageFormat.Jpeg);
EmailMsg..Attachments.Add(new Attachment(imgStream, filename, System.Net.Mime.MediaTypeNames.Image.Jpeg));
emailClient.Send(EmailMsg);
lblSent.Visible = true;
}
}
}