网站公告列表

  没有公告

加入收藏
设为首页
在线投稿

您现在的位置: IT知识网 >> IT知识 >> 维修维护 >> 其它外设维护维修 >> 文章正文

 

  EMAIL发送系统(C#+基于SMTP认证)[转]           

EMAIL发送系统(C#+基于SMTP认证)[转]
作者:佚名 文章来源:不详 点击数: 更新时间:2006-12-6 1:06:56
ttachments.Add(filePath[i]);
    }
    else
    {
    m_logs.Append("错误:没找到文件名为"+filePath[i]+"的附件文件!"+ENTER);
    }
    }
    return m_Attachments;
    }
    
    ///
    /// 添加一组收件人(不超过m_recipientMaxnum个),参数为字符串数组
    ///

    /// 保存有收件人地址的字符串数组(不超过m_recipientMaxnum个)
    private Hashtable AddRecipient(params string[] recipients)
    {
    if(recipients==null || recipients.Length == 0)
    {
    return null;
    }
    Hashtable recipientList=new Hashtable();// 收件人列表
    
    for(int i=0;i    {
    string recipient = recipients[i].Trim();
    if(recipient !=String.Empty && recipient.IndexOf("@") != -1)
    {
    recipientList.Add(recipientList.Count,recipients[i]);
    }
    }
    return recipientList;
    }
    
    ///
    /// 发送邮件方法
    ///

    /// smtp服务器信息,如"username:password@www.smtpServer.com:25",也可去掉部分次要信息,如"www.smtpServer.com"
    /// 发件人mail地址
    /// 发件人姓名
    /// 收件人地址列表
    /// 收件人姓名
    /// 是否HTML邮件
    /// 邮件主题
    /// 邮件正文
    /// 邮件附件列表
    public bool Send(string smtpServer,string from,string fromName,string[] recipientADD,string recipientName,bool isHtml,string subject,Priority priority, string body,string[] filePath)
    {
    //如果收件人多于服务器可同时发送的最大值,则分多次发送
    if(recipientADD.Length > RecipientMaxNum)
    {
    string[] recipientADD1 = new string[RecipientMaxNum];
    string[] recipientADD2 = new string[recipientADD.Length - RecipientMaxNum];
    for(int i = 0;i < recipientADD.Length; i++)
    {
    if(i < RecipientMaxNum)
    {
    recipientADD1[i] = recipientADD[i];
    }
    else
    {
    recipientADD2[i - RecipientMaxNum] = recipientADD[i];
    }
    }
    return Send(smtpServer,from,fromName,recipientADD1,recipientName,isHtml,subject,priority, body,filePath)
    &&
    Send(smtpServer,from,fromName,recipientADD2,recipientName,isHtml,subject,priority, body,filePath);
    }
    
    if(m_logs.Length > 2048)
    {
    m_logs.Remove(0,m_logs.Length);
    }
    
    string mailServer="";// 邮件服务器域名
    int mailserverport=25;// 邮件服务器端口号
    string userName="";// SMTP认证时使用的用户名
    string password="";// SMTP认证时使用的密码
    bool needSmtp=false;// 是否需要SMTP验证
    SetMailDomain(smtpServer,out mailServer,out userName,out password,
    out mailserverport,out needSmtp);
    if(mailServer.Trim()=="")
    {
    m_logs.Append("必须指定SMTP服务器"+ENTER);
    return false;
    }
    IList attachments = AddAttachment(filePath);// 邮件附件列表
    Hashtable recipients = AddRecipient(recipientADD);// 收件人列表
    if(recipients == null || recipients.Count == 0 )
    {
    m_logs.Append("必须指定收件人"+ENTER);
    return false;
    }
    if(recipients.Count > RecipientMaxNum)
    {
    m_logs.Append("一次发送的收件人太多"+ENTER);
    return false;
    }
    bool isSuccessful = false;
    lock(this)
    {
    TcpClient tcpClientObject = null;// TcpClient对象,用于连接服务器
    NetworkStream networkStreamObject = null;// NetworkStream对象
    DateTime dateTimeBegin = DateTime.Now;
    int useTime = 0;
    while(! ( useTime > RepeatTime || isSuccessful))
    {
    try
    {
    tcpClientObject=new TcpClient(mailServer,mailserverport);
    networkStreamObject = tcpClientObject.GetStream();
    isSuccessful =SendEmail(networkStreamObject,needSmtp,mailServer,userName,password,recipients,from,
    fromName,recipientName,subject,priority.ToString(),attachments, isHtml, body);
    }
    catch(Exception e)
    {
    m_logs.Append("错误:"+e.Message+ENTER);
    }
    finally
    {
    if(networkStreamObject!=null)networkStreamObject.Close();
    if(tcpClientObject!=null)tcpClientObject.Close();
    if(!isSuccessful)
    {
    string n = Thread.CurrentThread.Name;
    Thread.Sleep(WaitTime);
    }
    useTime = ((TimeSpan)(DateTime.Now - dateTimeBegin)).Seconds;
    }
    }
    }
    return isSuccessful;
    }
    
    
    #endregion
    
    #region Private Helper Functions
    
    
    ///
    /// SMTP回应代码哈希表
    ///

    private void SMTPCodeAdd()
    {
    m_ErrCodeHT.Add("500","邮箱地址错误");
    m_ErrCodeHT.Add("501","参数格式错误");
    m_ErrCodeHT.Add("502","命令不可实现");
    m_ErrCodeHT.Add("503","服务器需要SMTP验证");
    m_ErrCodeHT.Add("504","命令参数不可实现");
    m_ErrCodeHT.Add("421","服务未就绪,关闭传输信道");
    m_ErrCodeHT.Add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
    m_ErrCodeHT.Add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
    m_ErrCodeHT.Add("451","放弃要求的操作;处理过程中出错");
    m_ErrCodeHT.Add("551","用户非本地,请尝试");
    m_ErrCodeHT.Add("452","系统存储不足,要求的操作未执行");
    m_ErrCodeHT.Add("552","过量的存储分配,要求的操作未执行");
    m_ErrCodeHT.Add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
    m_ErrCodeHT.Add("432","需要一个密码转换");
    m_ErrCodeHT.Add("534","认证机制过于简单");
    m_ErrCodeHT.Add("538","当前请求的认证机制需要加密");
    m_ErrCodeHT.Add("454","临时认证失败");
    m_ErrCodeHT.Add("530","需要认证");
    
    m_RightCodeHT.Add("220","服务就绪");
    m_RightCodeHT.Add("250","要求的邮件操作完成");
    m_RightCodeHT.Add("251","用户非本地,将转发向");
    m_RightCodeHT.Add("354","开始邮件输入,以.结束");
    m_RightCodeHT.Add("221","服务关闭传输信道");
    m_RightCodeHT.Add("334","服务器响应验证Base64字符串");
    m_RightCodeHT.Add("235","验证成功");
    }
    
    
    ///
    /// 将字符串编码为Base64字符串
    ///

    /// 要编码的字符串
    private string Base64Encode(string str)
    {
    byte[]

上一页  [1] [2] [3] [4] [5] 下一页

文章录入:wuyongjian    责任编辑:wuyongjian 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最 新 热 门
    相 关 文 章
    NBMA环境下OSPF配置需要
    OSPFv3动态路由协议在NB
    use a route-map to lim
    Cisco 3Com Avaya 华为等
    Cisco 3Com Avaya 华为等
    配置Cisco交换机端□和M
    CiscoAironet天线和附件
    用Route Map实现多ISP I
    xmodem升级IOS的详细步骤
    利用Xmodem 升级2610 IO
     
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    Copyright© ITZS.NET All Rights Reserved
    QQ:272895858   ICP备案编号:吉ICP备07000044号
    IT知识网 站长:博浪