惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
博客园 - 聂微东
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
月光博客
月光博客
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
T
Threatpost
Scott Helme
Scott Helme
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Engineering at Meta
Engineering at Meta
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
V2EX - 技术
V2EX - 技术
罗磊的独立博客
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
S
Secure Thoughts
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Docker
V
V2EX
T
Troy Hunt's Blog
Forbes - Security
Forbes - Security
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Last Week in AI
Last Week in AI
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
O
OpenAI News
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG

博客园 - 蜗牛的礼物

Visual Studio Install 2022安装问题 C#使用SHA256withRSA加密对接口进行访问 JsBarcode生成一维码 C#执行存储超时过长,但是数据库执行很快问题 远程服务器无法复制文件上去问题处理 SQLServer数据同步 + Nginx代理自动切换SFTP和Web网站 Html转Text SQLServer数据库邮件异常信息获取 SQLServer分批删除 CMD查询端口被占用并关闭 SQLServer循环生成文件死锁问题 查询数据库表 ASP.NET Core的Web页面调用微信的扫一扫、上传图片等功能 Vue UI创建项目问题 Html5QRCode扫描条形码+二维码+5秒没扫出后截图以文件扫描 JS放大镜 JS根据元素Id截图 Html5QRCode扫描条形码+二维码 HTML播放语音 JS分隔换行成数组+去重 C#XML读取
C#获取邮箱邮件信息+附件下载
蜗牛的礼物 · 2024-10-17 · via 博客园 - 蜗牛的礼物

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

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

邮箱设置:

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

引用包【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("邮件附件文件:{0}", fileName);
                                //下载
                                using (var stream = File.Create(savePath + fileName))
                                {
                                    rfc.Message.WriteTo(stream);
                                }
                            }
                            else
                            {
                                var part = (MimePart)attachment;
                                var fileName = part.FileName;

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

补充:

//获取未读的邮件
var uidss = folder.Search(SearchQuery.NotSeen);
//标记已读(这里记得将前面的模式改成ReadWrite =》 folder.Open(FolderAccess.ReadWrite); )
folder.SetFlags(new UniqueId(item.Id), MessageFlags.Seen, true);
//内容按照换行分隔
string[] lines = content.Split(new string[] { "\r\n" }, StringSplitOptions.None);

参考: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

https://blog.csdn.net/qq_43170460/article/details/117034942