首页 > 编程语言 >C#获取邮箱邮件信息+附件下载

C#获取邮箱邮件信息+附件下载

时间:2024-10-17 15:34:27浏览次数:6  
标签:C# fileName 附件 client using var 邮箱 folder 邮件

需求:客户通过邮件发送报表,我方自行下载上传更新到系统

目标:自动下载到服务器,然后再自动读取到系统上。

邮箱设置:

 这里可以设置自动移动到此文件夹的规则(我这里设置了针对固定客户的发送邮箱、表头内容包括哪些字的、以及带有附件之类其它的条件)

 

引用包【MailKit】:

 

using MailKit;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;

代码:

     /// <summary>
        /// IMAP 读取邮箱信息   MimeKit包下 
        /// </summary>
        public static void IMAP()
        {
            try
            {
                //注册字符集,缺失字符集,一些中文编码数据为乱码 --千万别删,不然就是乱码了
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                // 设置IMAP服务器地址、端口、用户名和密码
                string imapServer = "smtp.com";
                int port = 993;//这里是993,不要考虑什么110、25的
                string username = "";   //用户名
                string password = "";    //密码

                // 创建IMAP客户端
                using (var client = new ImapClient())
                {
                    //client.Connect(imapServer, port, true);
                    client.Connect(imapServer);
                    client.Authenticate(username, password);

                    // 打开发件箱  不可随哟更改邮箱文件夹名称和移动邮件
                    //var folder = client.GetFolder("已发送邮件");
                    var folder = client.GetFolder("StockReleationFiles");//这里是你邮箱的文件夹(需要自己在邮箱设置)

                    folder.Open(FolderAccess.ReadOnly);

                    // 获取收件箱中的邮件数量
                    Console.WriteLine("收件箱中共有 {0} 封邮件", folder.Count);
                    //获取昨天到今天的邮件 一般两天足已
                    var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))));

                    string savePath = @"D:\Syn\Email\";
                    if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

                    //获取完整邮件
                    foreach (var item in uidss)
                    {
                        MimeMessage message = folder.GetMessage(new UniqueId(item.Id));
                        Console.WriteLine("邮件主题:{0}", message.Subject);
                        //获取邮件附件
                        var files = folder.GetMessage(new UniqueId(item.Id));
                        var items = files.Attachments;
                        foreach (var attachment in items)
                        {
                            if (attachment is MessagePart)
                            {
                                var fileName = attachment.ContentDisposition?.FileName;
                                var rfc = (MessagePart)attachment;
                                if (string.IsNullOrEmpty(fileName))
                                    fileName = "attached-message.eml";

                                Console.WriteLine("邮件附件文件:", fileName);
                                //下载
                                using (var stream = File.Create(savePath + fileName))
                                {
                                    rfc.Message.WriteTo(stream);
                                }
                            }
                            else
                            {
                                var part = (MimePart)attachment;
                                var fileName = part.FileName;

                                Console.WriteLine("邮件附件文件:", fileName);
                                //下载
                                using (var stream = File.Create(savePath + fileName))
                                {
                                    part.Content.DecodeTo(stream);
                                }
                            }
                        }
                    }
//必须得关,坑已经踩过了 client.Disconnect(true); client.Dispose(); } } catch (Exception ex) { Console.WriteLine("读取收件箱失败:" + ex.Message); } }

 

参考:https://blog.csdn.net/qq_44384774/article/details/139686615

https://blog.csdn.net/weixin_45792450/article/details/104322252?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-104322252-blog-2047410.235^v43^pc_blog_bottom_relevance_base7&spm=1001.2101.3001.4242.1&utm_relevant_index=1

 

标签:C#,fileName,附件,client,using,var,邮箱,folder,邮件
From: https://www.cnblogs.com/dzw159/p/18472404

相关文章

  • 关于 KubeSphere IDOR 安全漏洞 CVE-2024-46528 的声明及解决方案
    近期,有第三方平台的安全技术人员发现了在KubeSphere开源版3.4.1及4.1.1上存在不安全的直接对象引用(IDOR)的漏洞,该漏洞允许低权限的通过认证的攻击者在没有适当授权检查的情况下访问敏感资源。我们及时与对方进行了联系,并帮助对方解决了此问题,CVE漏洞的详细信息及问题处理过......
  • CentOS 7 下 yum 安装和配置 Nginx
    CentOS7下yum安装和配置Nginx 前言Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。。本例演示CentOS7下安装和配置Nginx的基本步骤。环境说明CentOS7(MinimalInstall)$cat/etc/redhat-releaseCentOSLinuxrelea......
  • CSS的学习(二)
    本篇呢,我们接着学习CSS,浮动和定位是两者常用的布局方式,可以实现更加丰富和灵活的网页效果。 有实操代码和效果方便理解一、浮动CSS提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):普通流(标准流)浮动定位这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布......
  • oracle和hive之间关于sql的语法差异及转换
    目录前言1、oracle中的(+)写法1.1、区分左右连接1.2、hive中的写法a、最常用b、副表带条件c、只显示过滤条件的数据2、select中含有子查询3、oracle的decode函数4、oracle的时间转化5、oracle的trunc函数6、oracleinstr函数 7、截取7、临时表名8、with插入用法......
  • leetcode 876. Middle of the Linked List
    leetcode876.MiddleoftheLinkedList不容易出错的写法,慢classSolution{public:ListNode*middleNode(ListNode*head){if(!head||!head->next){returnhead;}ListNode*single=head,*double_=head;int......
  • 【进阶OpenCV】 (17)-- Dlib库 --实现人脸检测
    文章目录Dlib库一、Dlib库安装二、实现人脸检测1.生成人脸检测器2.检测人脸3.显示人脸总结Dlib库Dlib提供了丰富的图像处理和计算机视觉工具,如面部特征检测、物体检测、图像变换等,这些工具使得开发者能够轻松地进行各种图像处理任务。一、Dlib库安装pipinst......
  • The 2024 CCPC National Invitational Contest (Northeast) ADEJ
    The2024CCPCNationalInvitationalContest(Northeast)ADEJA.PaperWatering思路:有两种类型的操作,对一个数开根号或平方。平方没有什么问题,开根号由于是向下取整再平方就会产生不一样的数。那么做法也很简单了。对于一个数\(x\),\(k\)步,首先它能平方往后变\(k\)步,往前能......
  • Docker 安全及日志管理
    一、Docker容器与虚拟机的区别容器的安全性问题的根源在于容器和宿主机共享内核。如果容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃。与虚拟机是不同的,虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机崩溃隔离与共享:虚拟机通过添加Hypervisor层(虚拟化中间......
  • CMSC Manual testing Completeness SNU Score
    Homework#3Due:Friday,October18that4:00pmCSTTableofContentsHomework#3GettingstartedManualtestingCompletenessSNUScoreCodeQualitySubmissionThepurposeofthisassignmentistogiveyouexperiencewithconditionals,lists,andloops.......
  • DHCP客户端配置命令
    DHCP客户端配置命令ipaddressdhcp-alloc1.1ipaddressdhcp-alloc命令用来配置接口通过DHCP协议获取IP地址。1.2undoipaddressdhcp-alloc命令用来取消接口通过DHCP协议获取的IP地址。【命令】ipaddressdhcp-allocundoipaddressdhcp-alloc【缺省情况】接口......