读取邮件很简单,现在我以ADO访问WSS读取邮件为例给你说一下如何收邮件并读取附件:
首先引入(添加引用)ADO2.6或是2.7无所谓了>=2.5就可以。添加Microsoft CDO For Exchange 2000 Library;
然我读取邮件我采用ADO来完成;
using System.Reflection;
private object obj=Missing.Value;
private void ReadMail()
{
ADODB.RecordsetClass aRS = new ADODB.RecordsetClass();
ADODB.ConnectionClass aConn = new ADODB.ConnectionClass();
string strurl = @"file://./backofficestorage/"+GetDomainName+"/mbx/"+strchanged+"/收件箱/";
//strurl里面的东西不用我解释了吧!变量GetDomainName和strchanged分别代表当前服务器域名(完整的域名)和收件人名称
aConn .provider="exoledb.datasource";
aConn .Open(strurl,String.Empty,String.Empty,0);
//以上部分完成了打开某收件人邮箱的功能
string strQ="";
strQ = "select ";
strQ = strQ + " \""urn:schemas:mailheader:thread-topic"\""; //标题
strQ = strQ + ", \""urn:schemas:httpmail:displayto"\""; //收件人姓名
strQ = strQ + ", \""urn:schemas:httpmail:displaycc"\""; //抄送
strQ = strQ + ", \""urn:schemas:httpmail:thread-topic"\"";
strQ = strQ + ", \""urn:schemas:httpmail:priority"\"" ;//级别
strQ = strQ + ", \""urn:schemas:httpmail:importance"\"" ; //级别
strQ = strQ + ", \""urn:schemas:mailheader:message-id"\"";
strQ = strQ + ", \""urn:schemas:httpmail:htmldescription"\"";//邮件的内容
strQ = strQ + ", \""urn:schemas:httpmail:subject"\"";
strQ = strQ + ", \""urn:schemas:httpmail:sendername"\"";
strQ = strQ + ", \""urn:schemas:mailheader:received"\""; //收件日期
strQ = strQ + ", \""DAV:contentclass"\""; //项目资源的内容类别
strQ = strQ + ", \""DAV:displayname"\""; //项目资源在web存储系统中的名称
strQ = strQ + ", \""DAV:id"\""; //(相当于关系数据库中的主键)
strQ = strQ + ", \""DAV:href"\""; //项目资源的完整url
strQ = strQ + " from scope ('shallow traversal of " ;//'使用何种搜索方式
strQ = strQ + "\"" strurl + "\"') ";
strQ = strQ + "where \""urn:schemas:mailheader:message-id"\"='"+itemtypes+"'and \""DAV:contentclass"\"<>'urn:content-classes:document'";
//以上为查询邮件主要内容的SQL语句,不要用Select *,因为这样会很慢的!
aRS.Open(strQ ,aConn,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly,0);
while(!aRS.EOF)
{
Response.Write("邮件内容"+aRS.Fields("urn:schemas:httpmail:htmldescription").Value.ToString());
string strmsgurl=strurl+aRS.Fields("DAV:displayname").Value.ToString();
CDO.MessageClass cMsg=new CDO.MessageClass();
cMsg.DataSource.Open(strmsgurl,o,ADODB.ConnectModeEnum.adModeRead,ADODB.RecordCreateOptionsEnum.adOpenIfExists,ADODB.RecordOpenOptionsEnum.adOpenSource,String.Empty,String.Empty);
if(cMsg.Attachments.Count>0)
{
foreach(CDO.IBodyPart ibd1 in cMsg.Attachments)
{
//通过ibd1你就可以得到附件的文件了,可以SaveToFile(XXX)也可以保 存为Stream,你可以看一下,保存为文件的时候由于你是通过WEB形式开发的,所以会保存到服务器端,保存以后怎么处理你可以自己考虑一下。具体收邮件和收附件就是这样的,调试过程中可能有些问题,你遇到以后再问。也可能一次通过:)
}
}
Rs.MoveNext
}
}
首先引入(添加引用)ADO2.6或是2.7无所谓了>=2.5就可以。添加Microsoft CDO For Exchange 2000 Library;
然我读取邮件我采用ADO来完成;
using System.Reflection;
private object obj=Missing.Value;
private void ReadMail()
{
ADODB.RecordsetClass aRS = new ADODB.RecordsetClass();
ADODB.ConnectionClass aConn = new ADODB.ConnectionClass();
string strurl = @"file://./backofficestorage/"+GetDomainName+"/mbx/"+strchanged+"/收件箱/";
//strurl里面的东西不用我解释了吧!变量GetDomainName和strchanged分别代表当前服务器域名(完整的域名)和收件人名称
aConn .provider="exoledb.datasource";
aConn .Open(strurl,String.Empty,String.Empty,0);
//以上部分完成了打开某收件人邮箱的功能
string strQ="";
strQ = "select ";
strQ = strQ + " \""urn:schemas:mailheader:thread-topic"\""; //标题
strQ = strQ + ", \""urn:schemas:httpmail:displayto"\""; //收件人姓名
strQ = strQ + ", \""urn:schemas:httpmail:displaycc"\""; //抄送
strQ = strQ + ", \""urn:schemas:httpmail:thread-topic"\"";
strQ = strQ + ", \""urn:schemas:httpmail:priority"\"" ;//级别
strQ = strQ + ", \""urn:schemas:httpmail:importance"\"" ; //级别
strQ = strQ + ", \""urn:schemas:mailheader:message-id"\"";
strQ = strQ + ", \""urn:schemas:httpmail:htmldescription"\"";//邮件的内容
strQ = strQ + ", \""urn:schemas:httpmail:subject"\"";
strQ = strQ + ", \""urn:schemas:httpmail:sendername"\"";
strQ = strQ + ", \""urn:schemas:mailheader:received"\""; //收件日期
strQ = strQ + ", \""DAV:contentclass"\""; //项目资源的内容类别
strQ = strQ + ", \""DAV:displayname"\""; //项目资源在web存储系统中的名称
strQ = strQ + ", \""DAV:id"\""; //(相当于关系数据库中的主键)
strQ = strQ + ", \""DAV:href"\""; //项目资源的完整url
strQ = strQ + " from scope ('shallow traversal of " ;//'使用何种搜索方式
strQ = strQ + "\"" strurl + "\"') ";
strQ = strQ + "where \""urn:schemas:mailheader:message-id"\"='"+itemtypes+"'and \""DAV:contentclass"\"<>'urn:content-classes:document'";
//以上为查询邮件主要内容的SQL语句,不要用Select *,因为这样会很慢的!
aRS.Open(strQ ,aConn,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly,0);
while(!aRS.EOF)
{
Response.Write("邮件内容"+aRS.Fields("urn:schemas:httpmail:htmldescription").Value.ToString());
string strmsgurl=strurl+aRS.Fields("DAV:displayname").Value.ToString();
CDO.MessageClass cMsg=new CDO.MessageClass();
cMsg.DataSource.Open(strmsgurl,o,ADODB.ConnectModeEnum.adModeRead,ADODB.RecordCreateOptionsEnum.adOpenIfExists,ADODB.RecordOpenOptionsEnum.adOpenSource,String.Empty,String.Empty);
if(cMsg.Attachments.Count>0)
{
foreach(CDO.IBodyPart ibd1 in cMsg.Attachments)
{
//通过ibd1你就可以得到附件的文件了,可以SaveToFile(XXX)也可以保 存为Stream,你可以看一下,保存为文件的时候由于你是通过WEB形式开发的,所以会保存到服务器端,保存以后怎么处理你可以自己考虑一下。具体收邮件和收附件就是这样的,调试过程中可能有些问题,你遇到以后再问。也可能一次通过:)
}
}
Rs.MoveNext
}
}
改一下o变为obj,忘了改了
中的“itemtypes”这个从哪儿得到?请教!得出结果后即刻揭贴!
strQ = strQ + "where \"urn:schemas:mailheader:message-id\"='" + "<[email protected]>" + "'and \"DAV:contentclass\"<>'urn:content-classes:document'";
aRS.Open(strQ ,aConn,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly,0);
sql语句改成:
string strQ="";
strQ = "select ";
strQ = strQ + " \"urn:schemas:mailheader:thread-topic\""; //标题
strQ = strQ + ", \"urn:schemas:httpmail:displayto\""; //收件人姓名
strQ = strQ + ", \"urn:schemas:httpmail:displaycc\""; //抄送
strQ = strQ + ", \"urn:schemas:httpmail:thread-topic\"";
strQ = strQ + ", \"urn:schemas:httpmail:priority\"" ;//级别
strQ = strQ + ", \"urn:schemas:httpmail:importance\"" ; //级别
strQ = strQ + ", \"urn:schemas:mailheader:message-id\"";
strQ = strQ + ", \"urn:schemas:httpmail:htmldescription\"";//邮件的内容
strQ = strQ + ", \"urn:schemas:httpmail:subject\"";
strQ = strQ + ", \"urn:schemas:httpmail:sendername\"";
strQ = strQ + ", \"urn:schemas:mailheader:received\""; //收件日期
strQ = strQ + ", \"DAV:contentclass\""; //项目资源的内容类别
strQ = strQ + ", \"DAV:displayname\""; //项目资源在web存储系统中的名称
strQ = strQ + ", \"DAV:id\""; //(相当于关系数据库中的主键)
strQ = strQ + ", \"DAV:href\""; //项目资源的完整url
strQ = strQ + " from scope ('shallow traversal of " ;//'使用何种搜索方式
strQ = strQ + "\""+ strurl + "\"') ";
strQ = strQ + "where \"DAV:contentclass\"<>'urn:content-classes:document'";
错误显示:不支持此接口
???
顺便请教一下,上面的SQL语句用哪个字段来区分每一封信呢??是不是还要在where中在加一个字段来区分?
拜托了哈!!谢谢!!
这是数据记录在WSS(Web Storage System)中一个唯一的值.CDO.MessageClass cMsg=new CDO.MessageClass();
改成:
CDO.IMessage cMsg=new CDO.MessageClass();