c# 收发邮件

话不多说,请看代码:(后面附上项目整体代码,可详细查看。)。

算了,vip文章要评审,还是在这里给朋友们注释一下代码内容吧,方便大家参考使用。

收邮件:

核心代码:

pop3:

//using是个好东西,如果你没有关资源,他自动给你关,特别是对于流来说。pop3其实也是输入流,这里就需要用它来保证一下安全。 
using (var client = new Pop3Client())
            {
                client.Connect(PopName, PopPort, true); // 使用SSL连接,不用的话最后一个参数改成false。
                client.Authenticate(MailMS.AccountName, UPwd);//如果是非ssl连接,这里的密码最好也使用邮箱厂商后台可以设置的链接码。这个链接码在邮箱的pop3说明里面有,imap和smtp的说明里面也有。
                // 获取邮件数量
                int count = client.GetMessageCount();
                Console.WriteLine($"Total messages: {count}");

                // 获取最新的邮件(索引从0开始)
                for (int i = 0; i < count; i++)
                {
                    string c0 = "", c1 = "", c2 = "";
                    int key = count - 1 - i;
                    var message = client.GetMessage(key);
                    c1 = message.Subject;
                    c0 = message.From.ToString();
                    c2 = message.Date.ToString();
                    dataGridView1.Rows.Add(key + 1, "",
                    c1,
                    c0,
                    c2
                    );//我的页面有个dataGridView来显示邮件列表,所以这里绑一下数据。

                    Hashtable savedMail = new Hashtable();//这个hashtable用来在页面暂存邮件
                    savedMail.Add("Subject", message.Subject);
                    savedMail.Add("From", message.From.ToString());
                    savedMail.Add("Date", message.Date.ToString());
                    savedMail.Add("text", message.TextBody == null ? "" : message.TextBody);
                    savedMail.Add("html", message.HtmlBody == null ? "" : message.HtmlBody);

                    //附件
                    if (message.Attachments.Count() > 0)
                    {
                        savedMail.Add("Attachments", message.Attachments);
                    }
                    else
                    {
                        savedMail.Add("Attachments", null);
                    }

                    mails.Add((key + 1).ToString(), savedMail);//暂存所有邮件
                }
            }

imap:

//建立连接
            var client = new ImapClient();
            if (_ssl == "启用")
            {
                client.Connect(MailMS.Imap, MailMS.ImapPort, true); // 替换为你的 IMAP 服务器地址和端口
            }
            else {
                client.Connect(MailMS.Imap, MailMS.ImapPort, false); // 替换为你的 IMAP 服务器地址和端口
            }
            client.Authenticate(MailMS.UserName, MailMS.PassWd);

            client.Inbox.Open(FolderAccess.ReadWrite);

            打开smtp接口
            //MailKit.Net.Smtp.SmtpClient smtpClient = new MailKit.Net.Smtp.SmtpClient();
            //smtpClient.Connect(MailMS.SmtpName, MailMS.SmtpPort, true);
             注:用户名和密码应妥善保管,不要硬编码到源码中
            //smtpClient.Authenticate(MailMS.UserName, MailMS.PassWd);

            //加载分类邮箱
            AccountHandle acOperate = new AccountHandle();
            string[] addressInfo = acOperate.GetToAddress("select * from AutoeMailAddress where AccountName='" + MailMS.UserName + "'");
            string address1 = addressInfo[1];
            string address2 = addressInfo[2];
            string address3 = addressInfo[3];
            string address4 = addressInfo[4];

            //获取每一个邮件,保存到本地,同时转发,转移完后将邮件标记为已读,
            int size = 0;
            int uidCount = 0;
            int lastPage = 0;
            var query = SearchQuery.NotSeen;
            var uids = client.Inbox.Search(query);
            uidCount = uids.Count();
            lastPage = lastPage + uidCount;
            var inbox = client.Inbox;
            foreach (var uid in uids)
            {
                if (!IsMove)
                {
                    //停止进程
                    break;
                }
                //获取邮件
                var oldmail = inbox.GetMessage(uid);
                var flags = inbox.AcceptedFlags;
                var isRead = oldmail.Headers;
                string subject = oldmail.Subject;
                WriteStatus("开始转移标题为“" + subject + "”的邮件……");
                EmailData data = new EmailData();
                data.Subject = subject;


                //邮箱设置
                AccountInfo account = new AccountInfo();
                account.UserName = MailMS.UserName;
                account.PassWd = MailMS.PassWd;
                account.SmtpName = MailMS.SmtpName;
                account.SmtpPort = MailMS.SmtpPort;
                account.MailAddress = MailMS.MailAddress;


                if (subject.ToLower().Contains("class1"))
                {
                    data.To = address1;
                }
                else if (subject.ToLower().Contains("class2"))
                {
                    data.To = address2;
                }
                else if (subject.ToLower().Contains("class3"))
                {
                    data.To = address3;
                }
                else
                {
                    data.To = address4;
                }


                data.From = MailMS.MailAddress;
                data.TextBody = oldmail.TextBody;
                data.HtmlBody = oldmail.HtmlBody;

                //附件
                data.Files = null;

                Hashtable Mail = new Hashtable();
                Mail.Add("Attachments", oldmail.Attachments);

                //发送邮件
                EmailHelper.SendEmailWait(data, Mail, account);

                //等待5秒,避免服务器认为是攻击
                await Task.Delay(5000);

                //发送完毕
                WriteStatus("邮件“" + subject + "”转移完毕");

                //将此邮件标记为已读
                client.Inbox.AddFlags(uid, MessageFlags.Seen, true);

                size++;


                
            }

            if (!IsMove)
            {
                WriteStatus("强制停止转移,邮件转移完毕,总共处理了" + size + "封邮件");
            }
            else
            {
                WriteStatus("邮件转移完毕,总共处理了" + size + "封邮件");
            }

            //smtpClient.Disconnect(true);
            client.Disconnect(true);

发邮件:

核心代码:

smtp:

 /// <summary>
        /// 带了本地的文件和转发的文件
        /// </summary>
        /// <param name="data"></param>
        /// <param name="mail"></param>
        public static async void SendEmail(EmailData email, Hashtable mail, AccountInfo account)
        {
            try
            {

                // 创建一个新的 MIME 消息对象
                var message = new MimeMessage();
                // 设置发件人
                message.From.Add(MailboxAddress.Parse(email.From));
                // 设置收件人
                message.To.Add(MailboxAddress.Parse(email.To));
                // 设置主题
                message.Subject = email.Subject;
                // 创建邮件正文
                var builder = new BodyBuilder();
                builder.TextBody = email.TextBody;
                builder.HtmlBody = email.HtmlBody;

                // 添加附件
                if (email.Files != null && email.Files.Count > 0)
                {
                    for (int i = 0; i < email.Files.Count; i++)
                    {
                        using (var stream = new FileStream(email.Files[i].ToString(), FileMode.Open))
                        {
                            builder.Attachments.Add(email.Files[i].ToString(), stream);
                        }
                    }
                }

                //如果转发的邮件有附件,把附件加上
                if (mail != null)
                {
                    IEnumerable<MimeEntity> list = (IEnumerable<MimeEntity>)mail["Attachments"];
                    foreach (MimeEntity item in list)
                    {
                        builder.Attachments.Add(item);
                    }

                }


                // 设置正文
                message.Body = builder.ToMessageBody();
                // 使用 SMTP 客户端发送邮件
                using (var client = new SmtpClient())
                {
                    //await client.ConnectAsync("smtp.qq.com", 465, true);
                    await client.ConnectAsync(account.SmtpName, account.SmtpPort, true);
                    // 注:用户名和密码应妥善保管,不要硬编码到源码中
                    //await client.AuthenticateAsync("33072340@qq.com", "lctzfpbaxgdpbhih");
                    await client.AuthenticateAsync(account.MailAddress, account.PassWd);
                    // 发送邮件
                    await client.SendAsync(message);
                    // 断开与服务器的连接
                    await client.DisconnectAsync(true);
                }
                //Console.WriteLine("邮件已成功发送!");
            }
            catch (Exception ex)
            {
                throw ex;
                //Console.WriteLine($"邮件发送失败:{ex.Message}");
            }
        }

完整代码下载:

https://download.csdn.net/download/axe6404/90438801

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光正好2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值