欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > c# 收发邮件

c# 收发邮件

2025/3/1 20:45:34 来源:https://blog.csdn.net/axe6404/article/details/145922853  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词