2015-08-10 2 views
1

У меня есть приложение ASP.net, а на странице # 2 (pg2) пользователь может загрузить вложение. На странице # 3 (pg3) мое подтверждение, когда пользователь нажимает кнопку отправки. Затем он отправляет мне электронное письмо со всеми подробностями. Эта функциональность работает нормально, но я не получаю вложение, так как не знаю, как передать страницу на страницу в сеансе.Сохранить вложение в сеансе

Page 2 Код

Приведенный ниже код показывает, как я прохожу детали, введенные на странице 2 в сессии

protected void pg2button_Click(object sender, EventArgs e) 
{ 
    Session["pg2"] = txtData2.Text; 
    Session["pg2Yes"] = pg2Yes.Checked ? "Yes" : ""; 
// CODE HERE TO PASS/STORE UPLOADED DOC 
    Session["pg2No"] = pg2No.Checked ? "No" : ""; 
    Response.Redirect("/Quotation/pg3.aspx"); 
} 

И это мой HTML

<div class="form-group">   
    <asp:Label ID="Label3" class="col-md-3 control-label" runat="server" Text="Upload"></asp:Label> 
    <div class="col-md-3"> 
      <asp:FileUpload ID="fuAttachment" runat="server" class="form-control"></asp:FileUpload> 
    </div> 
</div> 

Page 3 Код

protected void pg3button_Click(object sender, EventArgs e) 
{    
    try 
    { 
     //Create the msg object to be sent 
     MailMessage msg = new MailMessage(); 

     //Add your email address to the recipients 
     msg.To.Add("[email protected]"); 

     //Configure the address we are sending the mail from 
     MailAddress address = new MailAddress("[email protected]"); 
     msg.From = address; 

     //Append their name in the beginning of the subject 
     msg.Subject = "Quote Requst"; 

     msg.Body = Label1.Text + " " + Session["pg1input"].ToString() 
        + Environment.NewLine.ToString() + 
        Label5.Text + " " + Session["emailinput"].ToString() 
        + Environment.NewLine.ToString() + 
        Label2.Text + " " + Session["pg1dd"].ToString() 
        +Environment.NewLine.ToString() + 
        Label3.Text + " " + Session["pg2"].ToString(); 

     //Configure an SmtpClient to send the mail. 
     SmtpClient client = new SmtpClient("smtp.live.com", 587); 
     client.EnableSsl = true; //only enable this if your provider requires it 

     //Setup credentials to login to our sender email address ("UserName", "Password") 
     NetworkCredential credentials = new NetworkCredential("[email protected]", "Password"); 
     client.Credentials = credentials; 

     //Send the msg 
     client.Send(msg); 

     Response.Redirect("/Quotation/pg4.aspx"); 
    } 
    catch 
    { 
     //If the message failed at some point, let the user know 
     lblResult.Text = "<div class=\"form-group\">" + "<div class=\"col-xs-12\">" + "There was a problem sending your request. Please try again." + "</div>" + "</div>" + "<div class=\"form-group\">" + "<div class=\"col-xs-12\">" + "If the error persists, please contact us." + "</div>" + "</div>"; 
    } 
} 

Ссылка ниже я могу получить, чтобы работать, но только если поле загрузки находится на той же странице http://www.aspsnippets.com/Articles/How-to-send-email-with-attachment-in-ASPNet.aspx

+0

Какого контроля вы использовали для загрузки? Можете ли вы как-нибудь получить байты? –

+1

не сохранять вложение, сохранять путь скорее в сеансе – Imad

+0

@ImadoddinIbnAlauddin Не уверен, как это сделать – murday1983

ответ

1

Получить содержимое файла и хранить в сессии (добавить событие PG2 клику перед перенаправлением):

var file = fuAttachment.PostedFile; 
if (file != null) 
{ 
    var content = new byte[file.ContentLength]; 
    file.InputStream.Read(content, 0, content.Length); 
    Session["FileContent"] = content; 
    Session["FileContentType"] = file.ContentType; 
} 

для пуха загрузить этот файл:

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AppendHeader("content-length", ((byte[])Session["FileContent"]).Length); 
Response.ContentType = (string)Session["FileContentType"]; 
Response.AppendHeader("Content-Disposition", "attachment; filename=fileName"); 
Response.BinaryWrite((byte[])Session["FileContent"]); 

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

В PG3 Для присоединять сохраненный файл:

var contentStream = new MemoryStream((byte[]) Session["FileContent"]); 
msg.Attachments.Add(new Attachment(contentStream,"file.ext",(string) Session["FileContentType"])); // Or store file name to Session for get it here. 
+0

Может показаться немного глупым, но я прав, сказав, что это должно быть в моем защищенном void pg2button_Click (object sender, EventArgs e) ' – murday1983

+0

Я пробовал свой код, и он не работает, как только я нажимаю на кнопку« Далее », кнопка снова перенаправляет меня на мою первую страницу. Не могли бы вы помочь мне или предоставить код для меня. Я попробовал добавить код под «Store In Session». Кроме того, я добавил свой код электронной почты из pg3, если возможно, вы можете помочь мне с этим, так как я немного смущен всем этим. Спасибо – murday1983

+0

@ murday1983 Я создам проект для файла магазина и отправлю письмо с этим вложением. Я вернусь к вам. (Я написал его в блокноте: D) –

1

Если вы храните путь в сессии, то вы можете получить байты файла с этим метод:

private byte[] GetFileBytes(string myPath) 
{ 
    FileInfo file = new FileInfo(myPath); 
    byte[] bytes = new byte[file.Length]; 
    using (FileStream fs = file.OpenRead()) 
    { 
     fs.Read(bytes, 0, bytes.Length); 
    } 
    return bytes; 
} 
Смежные вопросы