最近在用 LumiSoft  进行邮件读取,然后操作相关附件
邮件使用的是qq邮箱,读取后进行移除,但是怎么都移除不了 后来咨询了官方客服,
原来是设置不对 需要 取消掉 X禁止收信软件删信 (仅对 POP3 协议有效。为什么会有收信软件删信?)

-----另外附上我写的相关代码

using LumiSoft.Net.Log;
using LumiSoft.Net.Mail;
using LumiSoft.Net.MIME;
using LumiSoft.Net.POP3.Client;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Net;
using System.Text;
using System.Linq; namespace MCP.Sync.MailAttachCenter
{
public class MailAttachCenterBiz
{
// const string smtp = "imap.exmail.qq.com";
const string smtp = "pop.exmail.qq.com"; const int smtpport = 995;
const string user = "";
const string pwd = "";
const string dirfolder = @"D:\email\";
const string FileServerUrl = ""; const string module = "module_Sys_MailAttachCenter";
const string folderId = "folderId_Sys_MailAttachCenter"; public void SyncMail(ref string returnMessage)
{ using (POP3_Client pop3 = new POP3_Client())
{
//这里面存在无法删除邮件,所以导致只能通过去重的方式来处理重复读取的问题 var attachList =new List<MailAttach>();
using (var db=new MCPERP_MailAttachEntities())
{ attachList = db.Sys_MailAttachCenter.Select(s => new MailAttach { MUID=s.MUID}).ToList(); } pop3.Connect(smtp, smtpport, true);
pop3.Login(user, pwd);//两个参数,前者为Email的账号,后者为Email的密码
pop3.Logger = new Logger();
pop3.Logger.WriteLog += new EventHandler<WriteLogEventArgs>(WriteLog); POP3_ClientMessageCollection messages = pop3.Messages; for (int i = 0; i < messages.Count; i++)
{
var mEntity = new Sys_MailAttachCenter();
mEntity.SMTPServerName = smtp; Dictionary<string, string> dic_file = new Dictionary<string, string>(); POP3_ClientMessage message = messages[i];//转化为POP3 if (attachList.Find(x=>x.MUID==message.UID)!=null)
{
continue; } pop3.Logger.AddText("\r\n正在检查第{0}封邮件..."+ i + 1);
if (message != null)
{
mEntity.MUID = message.UID; byte[] messageBytes = message.MessageToByte();
if (messageBytes != null && messageBytes.Length > 0)
{ Mail_Message mime_message = Mail_Message.ParseFromByte(messageBytes);
Mail_Message mime_header = Mail_Message.ParseFromByte(message.HeaderToByte());
if (mime_header != null)
{
mEntity.Subject =!string.IsNullOrEmpty( mime_header.Subject)? mime_header.Subject.Trim():string.Empty;
mEntity.SendDT = mime_header.Date;
//区分抄送人
if (mime_header.Cc != null)
{
StringBuilder sb = new StringBuilder();
foreach (Mail_t_Mailbox recipient in mime_header.Cc.Mailboxes)
{
string displayname = recipient.DisplayName;
string address = recipient.Address; sb.AppendFormat("{0};", address); }
mEntity.CC = sb.ToString().Trim(';');
} if (mime_header.From != null)
{
StringBuilder sb = new StringBuilder();
StringBuilder sb_sender = new StringBuilder();
foreach (Mail_t_Mailbox recipient in mime_header.From)
{
string displayname = recipient.DisplayName;
string address = recipient.Address; sb.AppendFormat("{0};", address);
sb_sender.AppendFormat("{0};", displayname); }
mEntity.Sender = sb_sender.ToString().Trim(';');
mEntity.FromMail = sb.ToString().Trim(';');
} if (mime_header.To != null)
{
StringBuilder sb = new StringBuilder();
foreach (Mail_t_Mailbox recipient in mime_header.To.Mailboxes)
{
string displayname = recipient.DisplayName;
string address = recipient.Address; sb.AppendFormat("{0};", address); }
mEntity.ToMail = sb.ToString().Trim(';');
}
} var body = mime_message.BodyText;
if (body != null)
{
mEntity.Body = body.Length > 1000 ? "超长被截断--"+body.Substring(0,990) : body;
} //保存邮件的整体附件
DirectoryInfo dir = new DirectoryInfo(dirfolder);
if (!dir.Exists) dir.Create(); string emailPath = dirfolder + message.UID + ".eml";
File.WriteAllBytes(emailPath, messageBytes);
dic_file.Add(Guid.NewGuid().ToString(), emailPath); //附件处理
MIME_Entity[] attachments = mime_message.GetAttachments(true, true);
mEntity.AttachmentsCount = 1;
if (attachments != null && attachments.Length > 0)
{
mEntity.AttachmentsCount = mEntity.AttachmentsCount+attachments.Length;
foreach (MIME_Entity entity in attachments)
{
if (entity.ContentDisposition != null)
{
string fileName = entity.ContentDisposition.Param_FileName;
if (!string.IsNullOrEmpty(fileName))
{
var dirFileName = GetValidName(message.UID + fileName);
string path = Path.Combine(dir.FullName, dirFileName);
MIME_b_SinglepartBase byteObj = (MIME_b_SinglepartBase)entity.Body;
Stream decodedDataStream = byteObj.GetDataStream();
using (FileStream fs = new FileStream(path, FileMode.Create))
{
LumiSoft.Net.Net_Utils.StreamCopy(decodedDataStream, fs, 4000);
}
dic_file.Add(Guid.NewGuid().ToString(), path); //这里实现上传附件
//上传成功以后删除本地缓存的附件 pop3.Logger.AddText($"{fileName}已经被下载。");
}
}
}
}
} var result = SaveFileToServer(dic_file, mEntity);//保存文件方法
if (result)
{
message.MarkForDeletion();//移除这个邮件
}
}
}
}
} public static string GetValidName(string fileName)
{
foreach (char c in System.IO.Path.GetInvalidFileNameChars())
{
fileName = fileName.Replace(c, ' ');
}
return fileName;
}
private void WriteLog(object sender, WriteLogEventArgs e)
{
if (e!=null && e.LogEntry!=null)
{ }
} /// <summary>
/// 保存附件到文件服务器并添加到
/// </summary>
/// <returns></returns>
private bool SaveFileToServer(Dictionary<string,string> dir, Sys_MailAttachCenter mEntity)
{
try
{
if (mEntity!=null && dir.Count>0)
{ var fList = new List<Sys_FileInfo>(); foreach (var item in dir)
{ string address = FileServerUrl + string.Format("Home/UploadFile?module={0}&folderId={1}&uploadDate={2}", module, folderId, DateTime.Now.ToString("yyyyMMdd"));
var buffer = new WebClient().UploadFile(address, "post", item.Value);
string result = Encoding.UTF8.GetString(buffer);
var fileServerPath = FileServerUrl + result.Replace("~/", "");
//判断文件是不是存在 清空临时存储的文件
if (System.IO.File.Exists(item.Value))
{
System.IO.File.Delete(item.Value);
} Sys_FileInfo file = new Sys_FileInfo();
file.CreateDT = DateTime.Now;
file.CreaterName = module;
file.Description ="邮件附件处理中心创建";
file.FileType = Path.GetExtension(item.Value);
file.folderId = folderId;
file.module = module;
file.FileJobno = mEntity.MUID.ToString();
file.FileId = Guid.NewGuid().ToString("N");
file.EnabledMark = 1;
file.DeleteMark = 0;
file.FilePath = fileServerPath;
file.FileName = Path.GetFileName(item.Value);
file.FileExtensions = Path.GetExtension(item.Value);
fList.Add(file); } using (var db = new MCPERP_MailAttachEntities())
{ db.Sys_FileInfo.AddRange(fList);
mEntity.CreateDT = DateTime.Now;
mEntity.IsRead = false;
mEntity.IsReply = false;
db.Sys_MailAttachCenter.Add(mEntity);
db.SaveChanges();
}
return true;
} return false;
}
catch (Exception ex)
{ throw ex;
}
}... }
public class MailAttach
{
public string MUID { get; set; }
}
}

  

LumiSoft 邮件操作删除(无法删除解决方法)的更多相关文章

  1. ECSHOP后台登陆后一段时间不操作就超时的解决方法

    ECSHOP后台登陆后一段时间不操作就超时的解决方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-05-27   客户生意比较好,因此比较忙,常常不在电脑前 ...

  2. 无法删除DLL文件解决方法(转)

    手动解决dll文件无法删除的终极方法 手动解决dll文件无法删除的终极方法 相信大家都遇见过:在删除一些软件的时候弹出某某文件正在运行或磁盘写保护不能删除这样的报错提示吧.而常常删除不掉的都一些后缀为 ...

  3. 关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法

    在操作已经创建好的数据库时,若是添加新的实体类或者修改原有数据库上下文,会报如下错误: The model backing the 'StudentDbContext' context has cha ...

  4. 【转】Hudson插件Email-Ext邮件模板时间格式化的解决方法

    原文地址:http://www.cnblogs.com/haycco/archive/2012/03/20/3031397.html 最近因对Hudson版本进行了升级为2.2.0,所以各方面都在搞项 ...

  5. iOS的本地推送删除不了解决方法

    最近在研究苹果推送,当测试本地推送的时候,发现一个问题,就是一旦你添加了一个本地推动的通知,当你修改代码,删除应用,当你再次运行app,它还是会在横幅上面弹出推送,尼玛怎么搞都删除不了,近乎崩溃了,开 ...

  6. win10系统无法删除文件的解决方法

    方法/步骤 1:首先进入不能删除的文件所在的文件夹 2:右键单击此文件夹,选择授予访问权限 3:在授权界面选择删除权限 4:在删除权限中点击更改共享权限 5:我们选择administrator级别,点 ...

  7. XenCenter删除SR失败解决方法

    到CLI下 查SR的UUID xe sr-list SR的uuid=e0571e72-f6c5-1c9e-4ad8-9817b2331f47 FORGET SR xe sr-forget uuid=e ...

  8. python logging 日志轮转文件不删除问题的解决方法

    项目使用了 logging 的 TimedRotatingFileHandler : #!/user/bin/env python # -*- coding: utf-8 -*- import log ...

  9. 在 Visual Studio 中打开编辑 cshtml 文件时出现错误:未能完成该操作 无效指针 的解决方法

    第一步:关闭 Visual Studio: 第二步:删除 %LocalAppData%\Microsoft\VisualStudio\14.0\ComponentModelCache 下的所有文件: ...

随机推荐

  1. 【转】libgo

    原文:https://blog.csdn.net/libaineu2004/article/details/80554870 ------------------------------------- ...

  2. pandas 6 时间

    类 备注 创建方法 Timestamp 时刻数据 to_datetime,Timestamp DatetimeIndex Timestamp的索引 to_datetime,date_range,Dat ...

  3. Centos7安装Spark2.4

    准备 1.hadoop已部署(若没有可以参考:Centos7安装Hadoop2.7),集群情况如下(IP地址与之前文章有变动): hostname IP地址 部署规划 node1 172.20.0.2 ...

  4. 四.python基础数据类型

    一.什么是数据类型? 什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不 ...

  5. JavaScript的深入理解(1)

    (1)什么是JavaScript? JavaScript是一种专为与网页交互而设计的脚本语言,由三个部分组成:(1).ECMAScript :提供核心语言功能.(2).文档对象模型(DOM):提供访问 ...

  6. 【loj3120】【CTS2019】珍珠

    题目 ​ $laofu $出的题 ​ \(n\)个离散型随机变量\(X_i\)可能的值为\([1,D]\) ,求有至少\(m\)对的概率 ​ $0 \le m \le 10^9  ,  1 \le n ...

  7. es6学习4:async和await

    async async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. funct ...

  8. windows 共享网络

    windows 共享网络 今天单位的网络突然断了,光猫LOS亮红灯,宽带报修.等了半天还没来,下面科室要上报资料,急着用网, 通过windows的共享网络+无线网卡暂时用我的手机流量. 找了一台电脑插 ...

  9. 刷题记录:[De1CTF 2019]SSRF Me

    目录 刷题记录:[De1CTF 2019]SSRF Me 一.涉及知识点 1.MD5长度扩展攻击 2.Python 2.x - 2.7.16 urllib.fopen支持local_file导致LFI ...

  10. hadoop 综合大作业

    作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 本次作业是在期中大作业的基础上利用hadoop和hive技术进行 ...