2010-04-13 72 views
1

我試圖創建一個表單,將發送一個附加的圖像的電子郵件,並遇到一些問題。我創建的表單非常大,因此我爲此問題創建了一個小測試表單。電子郵件將發送並且附件將存在於電子郵件中,但圖像已損壞或無法觀看。ASP.NET發送圖像附件與電子郵件不保存到文件系統

另外..

我不想將圖像保存到文件系統。您可能認爲將文件上載中的映像文件轉換爲流是錯綜複雜的,但這是由於我正在處理的實際表單將允許通過單個文件上載添加多個文件,並將保存在會話中,因此圖像不會直接來自文件上傳控件提交。

文件: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; 

     } 
    } 
} 

回答

1

關閉我的頭頂,你並不需要創建一個Image對象。

變化:

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)); 

//can't remember, but you may also need to set the position to 0 ? 
    //fulImage.PostedFile.InputStream.Position = 0 
    EmailMsg..Attachments.Add(new Attachment(fulImage.PostedFile.Inputstream, filename, System.Net.Mime.MediaTypeNames.Image.Jpeg)); 

而且,這是假定您要上傳的圖像是JPEG格式。

相關問題