网站公告列表

  没有公告

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

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

 

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

EMAIL发送系统(C#+基于SMTP认证)[转]
作者:佚名 文章来源:不详 点击数: 更新时间:2006-12-6 1:06:56
barray;
    barray=Encoding.Default.GetBytes(str);
    return Convert.ToBase64String(barray);
    }
    
    
    ///
    /// 将Base64字符串解码为普通字符串
    ///

    /// 要解码的字符串
    private string Base64Decode(string str)
    {
    byte[] barray;
    barray=Convert.FromBase64String(str);
    return Encoding.Default.GetString(barray);
    }
    
    
    ///
    /// 得到上传附件的文件流
    ///

    /// 附件的绝对路径
    private string GetStream(string filePath)
    {
    byte[] by = null;
    System.IO.FileStream FileStr = null;
    string streamString = "";
    try
    {
    //建立文件流对象
    FileStr=new System.IO.FileStream(filePath,System.IO.FileMode.Open);
    by=new byte[System.Convert.ToInt32(FileStr.Length)];
    FileStr.Read(by,0,by.Length);
    streamString = System.Convert.ToBase64String(by);
    }
    catch(Exception ex)
    {
    //写错误日志
    m_logs.Append("错误:"+ex.Message+ENTER);
    }
    finally
    {
    if(FileStr != null)
    {
    FileStr.Close();
    }
    }
    
    return streamString;
    }
    
    ///
    /// 发送SMTP命令
    ///

    private bool SendCommand(string str,NetworkStream _NetworkStreamObject)
    {
    byte[] WriteBuffer;
    if(str==null||str.Trim()==String.Empty)
    {
    return true;
    }
    m_logs.Append(str+ENTER);
    WriteBuffer = Encoding.Default.GetBytes(str);
    try
    {
    _NetworkStreamObject.Write(WriteBuffer,0,WriteBuffer.Length);
    }
    catch(Exception ex)
    {
    //写日志
    m_logs.Append("错误:"+ex.Message+ENTER);
    return false;
    }
    return true;
    }
    
    ///
    /// 接收SMTP服务器回应
    ///

    private string RecvResponse(NetworkStream _NetworkStreamObject)
    {
    int StreamSize = 0;
    string ReturnValue = String.Empty;
    byte[] ReadBuffer = new byte[1024] ;
    try
    {
    StreamSize = _NetworkStreamObject.Read(ReadBuffer,0,ReadBuffer.Length);
    }
    catch(Exception ex)
    {
    //写日志
    m_logs.Append("错误:"+ex.Message+ENTER);
    m_ErrCode = ex.Message;
    return "false";
    }
    
    if (StreamSize==0)
    {
    return ReturnValue ;
    }
    else
    {
    ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
    m_logs.Append(ReturnValue+ENTER);
    return ReturnValue;
    }
    }
    
    ///
    /// 与服务器交互,发送一条命令并接收回应。
    ///

    /// 一个要发送的命令
    private bool Dialog(string str,NetworkStream _NetworkStream)
    {
    if(str==null||str.Trim()=="")
    {
    return true;
    }
    if(SendCommand(str,_NetworkStream))
    {
    string RR=RecvResponse(_NetworkStream);
    if(RR=="false")
    {
    return false;
    }
    string RRCode=RR.Substring(0,3);
    if(m_RightCodeHT[RRCode]!=null)
    {
    return true;
    }
    else
    {
    m_ErrCode = RRCode;
    return false;
    }
    }
    else
    {
    return false;
    }
    
    }
    
    
    ///
    /// 与服务器交互,发送一组命令并接收回应。
    ///

    
    private bool Dialog(string[] str,NetworkStream _NetworkStream)
    {
    for(int i=0;i    {
    if(!Dialog(str[i],_NetworkStream))
    {
    return false;
    }
    }
    
    return true;
    }
    
    
    ///
    /// SendEmail
    ///

    ///
    private bool SendEmail(NetworkStream _NetworkStream,bool needSmtp,string mailServer,string userName,string password,Hashtable recipients,string from,
    string fromName,string recipientName,string subject,string priority,IList attachments,bool isHtml,
    string body)
    {
    //验证网络连接是否正确
    if(m_RightCodeHT[RecvResponse(_NetworkStream).Substring(0,3)]==null)
    {
    return false;
    }
    
    
    string[] SendBuffer;
    string SendBufferstr;
    StringBuilder SendBufferstrBuilder = new StringBuilder();
    
    //进行SMTP验证
    if(needSmtp)
    {
    SendBuffer=new String[4];
    SendBuffer[0]="EHLO " + mailServer + ENTER;
    SendBuffer[1]="AUTH LOGIN" + ENTER;
    SendBuffer[2]=Base64Encode(userName) + ENTER;
    SendBuffer[3]=Base64Encode(password) + ENTER;
    if(!Dialog(SendBuffer,_NetworkStream))
    {
    return false;
    }
    }
    else
    {
    SendBufferstr="HELO " + mailServer + ENTER;
    if(!Dialog(SendBufferstr,_NetworkStream))
    return false;
    }
    
    //
    SendBufferstr="MAIL FROM:<" + from + ">" + ENTER;
    if(!Dialog(SendBufferstr,_NetworkStream))
    return false;
    
    //
    SendBuffer=new string[m_recipientMaxnum];
    for(int i=0;i    {
    SendBuffer[i]="RCPT TO:<" + recipients[i].ToString() +">" + ENTER;
    
    }
    
    if(!Dialog(SendBuffer,_NetworkStream))

上一页  [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知识网 站长:博浪