如何以编程方式单击电子邮件正文中的.zip链接

时间:2017-10-03 16:59:34

标签: c# winforms exchangewebservices email-attachments listviewitem

这可能非常简单,但我对编码任何东西都是新手,提前抱歉。

目前我有一个button4,它将通过我的收件箱读取具有特定主题的邮件,如果满足条件,它会在列表视图中显示邮件的第一类属性,但我希望它还下载每封电子邮件中找到的链接。

这是一个.zip链接,当从电子邮件内部点击链接时,它将下载zip。我希望它能够自动下载点击button4时找到的所有链接。

我将显示我的button4代码,然后显示电子邮件的示例。

button4代码:

private void button4_Click(object sender, EventArgs e)
{
    EmailConnect();
    TimeSpan ts = new TimeSpan(0, -2, 0, 0);
    DateTime date = DateTime.Now.Add(ts);
    SearchFilter.IsGreaterThanOrEqualTo filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date);

    if (service != null)
    {
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50));

        foreach (Item item in findResults)
        {

            EmailMessage message = EmailMessage.Bind(service, item.Id);
            string subject = message.Subject.ToString();

            if (subject.Contains("NFIRS File Validation"))
            {
                ListViewItem listitem = new ListViewItem(new[]
                {message.DateTimeReceived.ToString(), message.From.Name.ToString() + "(" + message.From.Address.ToString() + ")", message.Subject, ((message.HasAttachments) ? "Yes" : "No")});

                lstMsg.Items.Add(listitem);
            }
        }

        if (findResults.Items.Count <= 0)
        {
            lstMsg.Items.Add("No Messages found!!");
        }
    }
}

电子邮件示例:

  

NFIRS文件验证

     

NFIRS文件验证服务已完成处理您的文件。请点击此链接检索包含结果的zip文件。

     

https://www.nfirs.fema.gov/biarchive/xxxxxxxxx_xxxxxxxxx.zip

     

此文件将在28天后删除。

     

如果您有任何疑问,请不要回复此电子邮件。相反,请联系NFIRS支持中心。

1 个答案:

答案 0 :(得分:0)

这基本上是@DonBoitnott链接的重复注释我正在采取的唯一额外步骤是将每封电子邮件的正文放入解析它的属性列表中,并确保它保存为与原始URL中的URL相同的文件名电子邮件

    private void handleLinks(List<EmailProperties> properties)
    {
        using (WebClient client = new WebClient())
        {
            foreach (var prop in properties)
            {
                string link = searchForLink(prop.Body);
                string fileName = MyExtensions.Between(link, "https://www.nfirs.fema.gov/biarchive/", ".zip");
                string saveTo = string.Format((@"C:\Users\Foo\Downloads\{0}.zip"), fileName);
                prop.Name = fileName;

                client.DownloadFile(link, saveTo);
            }
        }
    }

    private string searchForLink(string body)
    {
        return MyExtensions.Between(body, "results.\r\n\r\n", "\r\n\r\nThis file will");
    }