📄 mail.cs
字号:
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Collections ;
using System.Configuration;
namespace UDS.Components
{
/// <summary>
/// Mail处理类
/// </summary>
public class MailClass
{
#region 将DataReader 转为 DataTable
/// <summary>
/// 将DataReader 转为 DataTable
/// </summary>
/// <param name="DataReader">DataReader</param>
public DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader)
{
DataTable datatable = new DataTable();
DataTable schemaTable = dataReader.GetSchemaTable();
//动态添加列
try
{
foreach(DataRow myRow in schemaTable.Rows)
{
DataColumn myDataColumn = new DataColumn();
myDataColumn.DataType = myRow.GetType();
myDataColumn.ColumnName = myRow[0].ToString();
datatable.Columns.Add(myDataColumn);
}
//添加数据
while(dataReader.Read())
{
DataRow myDataRow = datatable.NewRow();
for(int i=0;i<schemaTable.Rows.Count;i++)
{
myDataRow[i] = dataReader[i].ToString();
}
datatable.Rows.Add(myDataRow);
myDataRow = null;
}
schemaTable = null;
return datatable;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return datatable;
}
}
#endregion
#region 获取某用户的某信箱中的信件 返回DataTable
/// <summary>
///获取某邮箱中的信件 返回DataTable
/// </summary>
/// <param name="Username">用户名</param>
/// <param name="FolderType">邮箱类型</param>
public DataTable GetMails(int FolderType,string Username)
{
SqlDataReader dataReader = null;
Database data = new Database();
DataTable datatable = new DataTable();
SqlParameter[] prams =
{
data.MakeInParam("@Username", SqlDbType.VarChar, 20, Username),
data.MakeInParam("@MailFolderType", SqlDbType.Int, 8, FolderType)
};
try
{
data.RunProc("SP_MailGetBriefInfo",prams, out dataReader);
datatable = ConvertDataReaderToDataTable(dataReader);
dataReader.Close();
return datatable;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return null;
}
}
#endregion
#region 获取某项目中的信件 返回DataTable
/// <summary>
///获取某项目中的信件 返回DataTable
/// </summary>
/// <param name="ClassID">项目ID</param>
public DataTable GetClassMails(int ClassID,string Username)
{
SqlDataReader dataReader = null;
Database data = new Database();
DataTable datatable = new DataTable();
int MailFolderType = 1;
SqlParameter[] prams =
{
data.MakeInParam("@Username", SqlDbType.VarChar, 20, Username),
data.MakeInParam("@ClassID", SqlDbType.Int, 20 ,ClassID),
data.MakeInParam("@MailFolderType", SqlDbType.Int,3,MailFolderType)
};
try
{
data.RunProc("SP_MailInClassGetBriefInfo",prams, out dataReader);
datatable = ConvertDataReaderToDataTable(dataReader);
dataReader.Close();
return datatable;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return null;
}
}
#endregion
#region 获取某用户的某信箱中的信件 返回SqlDataReader
/// <summary>
///获取某邮箱中的信件 返回SqlDataReader
/// </summary>
/// <param name="Username">用户名</param>
/// <param name="FolderType">邮箱类型</param>
public SqlDataReader GetMailsDbReader(int FolderType,string Username)
{
SqlDataReader dataReader = null;
Database data = new Database();
SqlParameter[] prams =
{
data.MakeInParam("@Username", SqlDbType.VarChar, 20, Username),
data.MakeInParam("@MailFolderType", SqlDbType.Int, 8, FolderType)
};
try
{
data.RunProc("SP_MailGetBriefInfo",prams, out dataReader);
return dataReader;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return null;
}
}
#endregion
#region 将一组邮件移至指定信箱
/// <summary>
/// 将一组邮件移至指定信箱
/// </summary>
/// <param name="Username">用户名</param>
/// <param name="MailIDStr">邮件ID的连接字符串,用逗号相隔开</param>
public bool MailRemove(int FolderType,string MailIDStr)
{
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@FolderType" , SqlDbType.Int, 20, FolderType),
data.MakeInParam("@MailIDStr", SqlDbType.VarChar,4000, MailIDStr)
};
try
{
data.RunProc("SP_MailRemove",prams);
data = null;
return true;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return false;
}
}
#endregion
#region 删除一组邮件
/// <summary>
/// 彻底删除一组邮件
/// </summary>
/// <param name="MailIDStr">邮件ID的连接字符串,用逗号相隔开</param>
public bool MailDelete(string MailIDStr,int type)
{
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@MailIDStr", SqlDbType.VarChar,4000, MailIDStr),
data.MakeInParam("@DeleteType", SqlDbType.Int,1, type)
};
try
{
data.RunProc("SP_MailDelete",prams);
data = null;
return true;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return false;
}
}
#endregion
#region 清空某邮箱
/// <summary>
/// 清空某邮箱
/// </summary>
/// <param name="Username">用户名</param>
/// <param name="FolderType">邮箱类型</param>
public bool FolderClear(string Username,int type)
{
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@FolderType", SqlDbType.Int,1, type),
data.MakeInParam("@Username", SqlDbType.VarChar,30, Username)
};
try
{
data.RunProc("SP_MailFolderClear",prams);
data = null;
return true;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return false;
}
}
#endregion
#region 邮件主体发送
/// <summary>
/// 发送邮件,只包括数据库操作
/// </summary>
/// <param name="mailbody">Mail类</param>
public string Send(MailMainBody mailbody)
{
// create data object and params
Database data = new Database();
string MailID = null;
SqlParameter[] prams = {
data.MakeInParam("@MailFolderType", SqlDbType.Int, 20, mailbody.MailFolderType),
data.MakeInParam("@MailReceiverStr", SqlDbType.VarChar, 300, mailbody.MailReceiverStr),
data.MakeInParam("@MailSendDate", SqlDbType.DateTime, 20, DateTime.Parse(mailbody.MailSendDate)),
data.MakeInParam("@MailSendLevel", SqlDbType.SmallInt,20, mailbody.MailSendLevel),
data.MakeInParam("@MailSender", SqlDbType.NVarChar, 20, mailbody.MailSender),
data.MakeInParam("@MailReceiver", SqlDbType.NVarChar, 20, mailbody.MailReceiver),
data.MakeInParam("@MailSubject", SqlDbType.NVarChar, 50, mailbody.MailSubject),
data.MakeInParam("@MailBody", SqlDbType.Text , 300000, mailbody.MailBody),
data.MakeInParam("@MailCcToAddr", SqlDbType.NVarChar, 300, mailbody.MailCcToAddr),
data.MakeInParam("@MailBccToAddr", SqlDbType.NVarChar, 300, mailbody.MailBccToAddr),
data.MakeInParam("@MailReadFlag", SqlDbType.Bit, 1, mailbody.MailReadFlag),
data.MakeInParam("@MailTypeFlag", SqlDbType.Bit, 1, mailbody.MailTypeFlag),
data.MakeInParam("@MailClassID", SqlDbType.Int, 1, mailbody.MailClassID),
data.MakeInParam("@MailImportance", SqlDbType.Int, 1, mailbody.MailImportance),
data.MakeOutParam("@MailID", SqlDbType.Int,20)
};
try
{
data.RunProc("SP_MailSend", prams);
MailID = prams[14].Value.ToString();
if (MailID == string.Empty )
return null;
else
return MailID;
}
catch (Exception ex)
{
Error.Log(ex.ToString());
throw new Exception("邮件发送出错!",ex);
}
}
#endregion
#region 发送一组邮件
/// <summary>
/// 只需传入一个MailMainBody对象,会自动拆分ReceiverStr,逐个发送
/// </summary>
/// <param name="MailMainBody">MailMainBody类的一个实例,用来进行参数传递</param>
/// <returns>返回邮件ID数组</returns>
public ArrayList MailSend(MailMainBody mailbody)
{
string[] RecvAr = System.Text.RegularExpressions.Regex.Split(mailbody.MailReceiverStr +mailbody.MailCcToAddr +mailbody.MailBccToAddr ,",");
ArrayList listMailID = new ArrayList();
string RtnMailID = "";
// 发送一封邮件至发件人发件箱
mailbody.MailFolderType = 2;
mailbody.MailReceiver = mailbody.MailSender ;
RtnMailID = Send(mailbody);
listMailID.Add(RtnMailID);
// 开始循环发送邮件
for(int i=0;i<RecvAr.Length-1;i++)
{
mailbody.MailFolderType = 1; //收件箱
mailbody.MailReceiver = RecvAr[i].ToString();
RtnMailID = Send(mailbody);
if (RtnMailID!=null)
{
listMailID.Add(RtnMailID);
}
}
mailbody = null;
RecvAr = null;
return listMailID;
}
#endregion
#region 邮件附件数据库操作
/// <summary>
/// 发送邮件附件,只包括数据库操作
/// </summary>
/// <param name="att">MailAttachFile类</param>
/// <param name="MailID">邮件ID</param>
public void AttSend(MailAttachFile att,int MailID)
{
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@MailID", SqlDbType.Int, 20, MailID),
data.MakeInParam("@FileName", SqlDbType.VarChar, 300, att.FileName),
data.MakeInParam("@FileSize", SqlDbType.Int, 20, att.FileSize),
data.MakeInParam("@FileAttribute", SqlDbType.SmallInt,20, att.FileAttribute),
data.MakeInParam("@FileVisualPath", SqlDbType.NVarChar, 200, att.FileVisualPath),
data.MakeInParam("@FileAuthor", SqlDbType.NVarChar, 50, att.FileAuthor),
data.MakeInParam("@FileCatlog", SqlDbType.NVarChar, 20, att.FileCatlog)
};
try
{
data.RunProc("SP_AddMailAttFile", prams);
}
catch (Exception ex)
{
Error.Log(ex.ToString());
throw new Exception("邮件附件发送出错!",ex);
}
}
#endregion
#region 获取邮件的内容
/// <summary>
/// Get sqldatareader from TabMailList
/// </summary>
public SqlDataReader GetMailCompleteInfoDbreader(string MailID)
{
// create data object and params
SqlDataReader dataReader = null;
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@MailID", SqlDbType.NVarChar, 100, MailID)
};
try
{
// run the stored procedure
data.RunProc("SP_MailGetCompleteInfo",prams,out dataReader);
return dataReader;
}
catch (Exception ex)
{
Error.Log(ex.ToString());
throw new Exception("邮件读取出错!",ex);
}
}
#endregion
#region 获取邮件附件的内容
/// <summary>
/// Get sqldatareader from TabMailAttFiles
/// </summary>
public SqlDataReader GetMailAttInfoDbreader(string MailID)
{
// create data object and params
SqlDataReader dataReader = null;
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@MailID", SqlDbType.NVarChar, 100, MailID)
};
try
{
// run the stored procedure
data.RunProc("SP_MailGetAttachFilesInfo",prams,out dataReader);
return dataReader;
}
catch (Exception ex)
{
Error.Log(ex.ToString());
throw new Exception("邮件读取出错!",ex);
}
}
#endregion
#region 根据邮件ID字符串获取邮件附件的内容
/// <summary>
/// Get sqldatareader from TabMailAttFiles
/// </summary>
public SqlDataReader GetMailAttInfoByMailIDDbreader(string FileIDStr)
{
// create data object and params
SqlDataReader dataReader = null;
Database data = new Database();
SqlParameter[] prams = {
data.MakeInParam("@FileIDStr", SqlDbType.NVarChar, 4000, FileIDStr)
};
try
{
// run the stored procedure
data.RunProc("SP_MailGetAttachFilesInfoByMailID",prams,out dataReader);
return dataReader;
}
catch (Exception ex)
{
Error.Log(ex.ToString());
throw new Exception("邮件读取出错!",ex);
}
}
#endregion
#region 外部邮件设置保存
/// <summary>
/// 外部邮件设置保存
/// </summary>
/// <param name=""></param>
public bool ExtSaveSetting(string username,string title,string email,bool smtpauth,string smtpserver,string smtpusername,string smtppassword,string smtpport,string popserver,string popusername,string poppassword,int popport,bool isdelafterread,bool isreceivenew,int timeout,int orderid)
{
// create data object and params
Database data = new Database();
SqlParameter[] prams = {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -