Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从asp.net webforms中的特定电子邮件地址获取和读取电子邮件?_C#_Asp.net_Pop3 - Fatal编程技术网

C# 如何从asp.net webforms中的特定电子邮件地址获取和读取电子邮件?

C# 如何从asp.net webforms中的特定电子邮件地址获取和读取电子邮件?,c#,asp.net,pop3,C#,Asp.net,Pop3,我想知道如何从特定的电子邮件地址获取和阅读网络表单中的电子邮件,我在互联网上搜索了一些解决方案,但现在找到了适合我需要的?我正在使用OPENPOP获取电子邮件。我正在分享我的代码,请告诉我怎么做 页面类别: public partial class CS : System.Web.UI.Page { protected List<Email> Emails { get { return (List<Email>)ViewState["Ema

我想知道如何从特定的电子邮件地址获取和阅读网络表单中的电子邮件,我在互联网上搜索了一些解决方案,但现在找到了适合我需要的?我正在使用OPENPOP获取电子邮件。我正在分享我的代码,请告诉我怎么做

页面类别:

public partial class CS : System.Web.UI.Page
{
    protected List<Email> Emails
    {
        get { return (List<Email>)ViewState["Emails"]; }
        set { ViewState["Emails"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.Read_Emails();
        }
    }

    private void Read_Emails()
    {
        Pop3Client pop3Client;
        if (Session["Pop3Client"] == null)
        {
            pop3Client = new Pop3Client();
            pop3Client.Connect("pop.gmail.com", 995, true);
            pop3Client.Authenticate("email@gmail.com", "123456", AuthenticationMethod.TryBoth);
            Session["Pop3Client"] = pop3Client;
        }
        else
        {
            pop3Client = (Pop3Client)Session["Pop3Client"];
        }
        int count = pop3Client.GetMessageCount();
        this.Emails = new List<Email>();
        int counter = 0;
        for (int i = count; i >= 1; i--)
        {
            Message message = pop3Client.GetMessage(i);
            Email email = new Email()
            {
                MessageNumber = i,
                Subject = message.Headers.Subject,
                DateSent = message.Headers.DateSent,
                From = string.Format("<a href = 'mailto:{1}'>{0}</a>", message.Headers.From.DisplayName, message.Headers.From.Address),
            };
            MessagePart body = message.FindFirstHtmlVersion();
            if (body != null)
            {
                email.Body = body.GetBodyAsText();
            }
            else
            {
                body = message.FindFirstPlainTextVersion();
                if (body != null)
                {
                    email.Body = body.GetBodyAsText();
                }
            }
            List<MessagePart> 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);
            counter++;
            if (counter > 2)
            {
                break;
            }
        }
        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<Attachment> attachments = this.Emails.Where(email => email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[e.Row.RowIndex].Value)).FirstOrDefault().Attachments;
            rptAttachments.DataSource = attachments;
            rptAttachments.DataBind();
        }
    }
    protected void Download(object sender, EventArgs e)
    {
        LinkButton lnkAttachment = (sender as LinkButton);
        GridViewRow row = (lnkAttachment.Parent.Parent.NamingContainer as GridViewRow);
        List<Attachment> attachments = this.Emails.Where(email => email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[row.RowIndex].Value)).FirstOrDefault().Attachments;
        Attachment attachment = attachments.Where(a => a.FileName == lnkAttachment.Text).FirstOrDefault();
        Response.AddHeader("content-disposition", "attachment;filename=" + attachment.FileName);
        Response.ContentType = attachment.ContentType;
        Response.BinaryWrite(attachment.Content);
        Response.End();
    }
}
公共部分类CS:System.Web.UI.Page
{
受保护列表电子邮件
{
获取{返回(列表)视图状态[“电子邮件”];}
设置{ViewState[“Emails”]=value;}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
这个。读你的电子邮件();
}
}
私人无效读_电子邮件()
{
POP3客户端POP3客户端;
如果(会话[“Pop3Client”]==null)
{
POP3客户端=新的POP3客户端();
pop3Client.Connect(“pop.gmail.com”,995,true);
pop3Client.Authenticate(“email@gmail.com“,“123456”,AuthenticationMethod.TryBoth);
会话[“POP3客户端”]=POP3客户端;
}
其他的
{
POP3客户端=(POP3客户端)会话[“POP3客户端”];
}
int count=pop3Client.GetMessageCount();
this.Emails=新列表();
int计数器=0;
对于(int i=count;i>=1;i--)
{
Message Message=pop3Client.GetMessage(i);
电子邮件=新电子邮件()
{
MessageNumber=i,
主题=message.Headers.Subject,
DateSent=message.Headers.DateSent,
From=string.Format(“,message.Headers.From.DisplayName,message.Headers.From.Address),
};
MessagePart body=message.FindFirstHtmlVersion();
if(body!=null)
{
email.Body=Body.GetBodyAsText();
}
其他的
{
body=message.FindFirstPlainTextVersion();
if(body!=null)
{
email.Body=Body.GetBodyAsText();
}
}
列表附件=message.FindAllAttachments();
foreach(附件中的MessagePart附件)
{
电子邮件.附件.添加(新附件)
{
FileName=附件.FileName,
ContentType=附件.ContentType.MediaType,
内容=附件.正文
});
}
这个.email.Add(email);
计数器++;
如果(计数器>2)
{
打破
}
}
gvaemails.DataSource=this.Emails;
gvmails.DataBind();
}
RowDataBound上受保护的void(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
中继器rptaachments=(e.Row.FindControl(“rptaachments”)作为中继器);
列出附件=this.Emails.Where(email=>email.MessageNumber==Convert.ToInt32(gvmails.DataKeys[e.Row.RowIndex].Value)).FirstOrDefault().attachments;
rptaachments.DataSource=附件;
rptaachments.DataBind();
}
}
受保护的无效下载(对象发送方、事件参数e)
{
LinkButton lnkAttachment=(发送方为LinkButton);
GridViewRow行=(lnkAttachment.Parent.Parent.NamingContainer作为GridViewRow);
列出附件=this.Emails.Where(email=>email.MessageNumber==Convert.ToInt32(gvmails.DataKeys[row.RowIndex].Value)).FirstOrDefault().attachments;
附件附件=附件。其中(a=>a.FileName==lnkAttachment.Text)。FirstOrDefault();
Response.AddHeader(“内容处置”、“附件;文件名=“+attachment.filename”);
Response.ContentType=附件.ContentType;
Response.BinaryWrite(附件.Content);
Response.End();
}
}
电子邮件和附件类:

[Serializable]
public class Email
{
    public Email()
    {
        this.Attachments = new List<Attachment>();
    }
    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<Attachment> Attachments { get; set; }
}
[Serializable]
public class Attachment
{
    public string FileName { get; set; }
    public string ContentType { get; set; }
    public byte[] Content { get; set; }
}
[可序列化]
公共类电子邮件
{
公共电子邮件()
{
this.Attachments=新列表();
}
public int MessageNumber{get;set;}
来自{get;set;}的公共字符串
公共字符串主题{get;set;}
公共字符串体{get;set;}
public DateTime DateSent{get;set;}
公共列表附件{get;set;}
}
[可序列化]
公共类附件
{
公共字符串文件名{get;set;}
公共字符串ContentType{get;set;}
公共字节[]内容{get;set;}
}

如何从特定发件人获取电子邮件,如“abc@def.com“

您无法直接从特定用户处获取消息。但是,如果您不想下载所有内容以了解是否需要任何内容,请使用GetMessageHeaders()获取消息头并查看.From属性以查看它是否与您想要的内容匹配。。。如果有,则下载电子邮件内容。

@Usama,我查看了这个OpenPop文档,似乎没有内置的方法只获取特定发件人的电子邮件。您可以按现在的方式获取所有这些文件,然后只对具有write-From-address值的文件执行任何操作(使用if语句)。@Savanna谢谢您的评论,还有其他方法吗?我的意思是从特定的发件人那里获取和阅读电子邮件?@Usama我使用了一个名为ImapX的库从gmail帐户获取电子邮件。它有一个功能,允许您根据特定条件搜索文件夹。这是我能为你提供的最大帮助。请看这里:@Savanna我也可以使用ImapX下载附件吗?是的。看看他们的文档,非常好。