Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to download multiple attachments using openpop.net
    primarykey
    data
    text
    <p>I am trying to create a pop3 email client using openpop.net. Here is what I have tried in the download function (from a template field of a gridview):</p> <pre><code> [Serializable] public class Email { public Email() { this.Attachments = new List&lt;Attachment&gt;(); } public string Uuid { get; set; } public int MessageNumber { get; set; } public string From { get; set; } public string Subject { get; set; } public string Body { get; set; } public DateTime DateSent { get; set; } public List&lt;Attachment&gt; Attachments { get; set; } } [Serializable] public class Attachment { public string FileName { get; set; } public string ContentType { get; set; } public byte[] Content { get; set; } } public partial class Form1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected List&lt;Email&gt; Emails { get { return (List&lt;Email&gt;)ViewState["Emails"]; } set { ViewState["Emails"] = value; } } private void Read_Emails() { Pop3Client pop3Client = new Pop3Client(); pop3Client.Connect(txtMailAccount.Text, 995, true); pop3Client.Authenticate(txtUsername.Text, txtPassword.Text, AuthenticationMethod.TryBoth); Session["Pop3Client"] = pop3Client; int count = pop3Client.GetMessageCount(); this.Emails = new List&lt;Email&gt;(); DataSet ds = new DataSet(); ds = DB.ExecuteQuery_SP("getAllSeenUuids"); List&lt;string&gt; uuids = pop3Client.GetMessageUids(); List&lt;string&gt; listSeenUuids = new List&lt;string&gt;(); List&lt;string&gt; newListSeenUuids = new List&lt;string&gt;(); List&lt;Message&gt; newMessages = new List&lt;Message&gt;(); List&lt;string&gt; listUnreadUuids = new List&lt;string&gt;(); for (int i = 0; i &lt; ds.Tables[0].Rows.Count; i++) { listSeenUuids.Add(ds.Tables[0].Rows[i][0].ToString()); } int uuidCounter = 0; for (int i = uuids.Count - 1; i &gt;= 0; i--) { if (!listSeenUuids.Contains(uuids[i])) { Message unseenMessage = pop3Client.GetMessage(i + 1); newMessages.Add(unseenMessage); object[,] parArray = new object[,] { { "@seenUuid", uuids[i] } }; DB.ExecuteNonQuery_SP("saveToSeenUuids", parArray); uuidCounter++; } if (uuidCounter &gt;= Convert.ToInt32(txtNoOfMails.Text)) break; } int j = count; foreach (Message message in newMessages) { Email email = new Email() { MessageNumber = j, Subject = message.Headers.Subject, DateSent = message.Headers.DateSent, From = message.Headers.From.MailAddress.ToString(), }; MessagePart body = message.FindFirstPlainTextVersion(); if (body != null) { email.Body = body.GetBodyAsText(); } List&lt;MessagePart&gt; attachments = message.FindAllAttachments(); foreach (MessagePart attachment in attachments) { email.Attachments.Add(new Attachment { FileName = attachment.FileName, ContentType = attachment.ContentType.MediaType, Content = attachment.Body }); } this.Emails.Add(email); j--; } gvEmails.DataSource = this.Emails; gvEmails.DataBind(); } protected void OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { Repeater rptAttachments = (e.Row.FindControl("rptAttachments") as Repeater); List&lt;Attachment&gt; attachments = this.Emails.Where(email =&gt; email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[e.Row.RowIndex].Value)).FirstOrDefault().Attachments; rptAttachments.DataSource = attachments; rptAttachments.DataBind(); } } protected void SaveAll(object sender, EventArgs e) { Button btnSaveAll = (sender as Button); GridViewRow row = (GridViewRow)btnSaveAll.NamingContainer; int id = (int)gvEmails.DataKeys[row.RowIndex].Value; List&lt;Attachment&gt; attachments = this.Emails.Where(email =&gt; email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[row.RowIndex].Value)).FirstOrDefault().Attachments; foreach (Attachment attachment1 in attachments) { Attachment attachment = attachments.Where(a =&gt; a.FileName == attachment1.FileName).FirstOrDefault(); Response.AddHeader("content-disposition", "attachment;filename=" + attachment.FileName); Response.ContentType = attachment.ContentType; Response.BinaryWrite(attachment.Content); Response.End(); } } } </code></pre> <p>The problem is that it downloads only the first attachment. When I tried again by keeping the <code>Response.End()</code> function outside of the foreach loop, it says: "duplicate headers detected". Any help would be appreciated.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload