以下是一个Socket发邮件的类,所有邮箱发邮件没问题,但是收到的邮件:
1.只有Sina和Gmail显示正文(content-type=text/html),其它的邮箱正文均为空。
2.邮件多了一些不必要的内容:charset="iso-8859-1" Content-Transfer-Encoding: text/html;cccccccccppppppppppppp X-CM-TRANSID:DMmowKAL+wRIggBOWZ8bAA--.14986S2 X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUDNVkUUUUU Message-Id: <[email protected]> Date: Tue, 21 Jun 2011 19:36:41 +0800 (CST) Sender: [email protected] X-CM-SenderInfo: xprr0kqsyuqiyswou0bp/1tbi4xhlSU3Lgzy4jwABsY
    /// <summary>
    /// TcpClient派生类,用来进行SMTP服务器的连接工作
    /// </summary>
    public class SMTPClient : TcpClient
    {
        public bool isConnected()
        {
            return Active;
        }        public void SendCommandToServer(string Command)
        {
            NetworkStream ns = this.GetStream();
            byte[] WriteBuffer;
            WriteBuffer = new byte[1024];
            WriteBuffer = Encoding.Default.GetBytes(Command);
            ns.Write(WriteBuffer, 0, WriteBuffer.Length);
            return;
        }
        public string GetServerResponse()
        {
            int StreamSize;
            string ReturnValue = "";
            byte[] ReadBuffer;
            NetworkStream ns = this.GetStream();
            ReadBuffer = new byte[1024];
            StreamSize = ns.Read(ReadBuffer, 0, ReadBuffer.Length);
            if (StreamSize == 0)
            {
                return ReturnValue;
            }
            else
            {
                ReturnValue = Encoding.Default.GetString(ReadBuffer);
                return ReturnValue;
            }
        }        public bool DoesStringContainSMTPCode(string s, string SMTPCode)
        {
            return (s.IndexOf(SMTPCode, 0, 10) == -1) ? false : true;
        }    } //结束类    /// <summary>
    /// 发送邮件类
    /// </summary>
    public class SMTPMail
    {
        /// <summary>
        /// 错误反馈信息
        /// </summary>
        private string strErrMessage = null;        /// <summary>
        /// SMTP服务器反馈的信息
        /// </summary>
        private string strResponse;        /// <summary>
        /// 构造函数
        /// </summary>
        public SMTPMail()
        {
            strErrMessage = "";
            strResponse = "";
        }        /// <summary>
        /// 取得错误反馈信息
        /// </summary>
        public string ErrorMessage
        {
            get
            {
                return strErrMessage;
            }
        }        /// <summary>
        /// 取得SMTP服务器反馈的信息
        /// </summary>
        public string ServerResponse
        {
            get
            {
                return strResponse;
            }
        }        /// <summary>
        /// 邮件发送优先级
        /// </summary>
        public enum Prioritys
        {
            /// <summary>
            /// 最高级别
            /// </summary>
            HIGH = 1,
            /// <summary>
            /// 默认级别
            /// </summary>
            NORMAL = 3,
            /// <summary>
            /// 最低级别
            /// </summary>
            LOW = 5
        }        public bool SendMail(MailModel model,string to)
        {
            try
            {
                string strResponseNumber;
                SMTPClient smtpcMail = new SMTPClient();
                smtpcMail.Connect(model.Smtp, 25);
                bool bolConnect = smtpcMail.isConnected();                //判断是否进行了连接
                if (!bolConnect)
                {
                    strErrMessage = "Smtp服务器连接失败...";
                    return false;
                }                //读取反馈信息
                strResponseNumber = smtpcMail.GetServerResponse();
                if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, "220"))
                {
                    this.strResponse += strResponseNumber;
                }
                else
                {
                    this.strErrMessage = "连接失败" + strResponseNumber;
                    return false;
                }                string[] strSendBuffer = new string[9];
                string[] strResponseCode = { "220","235", "250", "251","334", "354", "221","550" };                 string strData = "";
                strData = string.Concat("HELO ", model.Smtp);
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[0] = strData;                strData = "";
                strData = string.Concat("auth login ");
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[1] = strData;                strData = "";
                strData = string.Concat(Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(model.Username)));
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[2] = strData;                strData = "";
                strData = string.Concat(Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(model.Password)));
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[3] = strData;                strData = "";
                strData = string.Concat("MAIL FROM: ", "<" + model.Usermail + ">");
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[4] = strData;                strData = "";
                strData = string.Concat("RCPT TO: ", "<" + to + ">");
                strData = string.Concat(strData, "\r\n");
                strSendBuffer[5] = strData;                strData = "";
                strData = string.Concat("DATA", "\r\n");
                strSendBuffer[6] = strData;                strData = "";
                strData = string.Concat("From: ", model.Sender + "<" + model.FackSender + ">");
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "To: ");
                strData = string.Concat(strData, model.FackReMail + "<" + model.FackReMail + ">");
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "Subject: ");
                strData = string.Concat(strData, model.Subject);
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "MIME-Version: 1.0");
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "X-Priority: " + 3);
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "X-MSMail-Priority: " + 3);
                strData = string.Concat(strData, "\r\n");
                //if (Html == true)
                //{
                    strData = string.Concat(strData, "Content-Type: text/html;");
                //}
                //else
                //{
                //    strData = string.Concat(strData, "Content-Type: text/plain;");
                //}
                strData = string.Concat(strData, "\r\n");
                strData = string.Concat(strData, "charset=\"iso-8859-1\"");
                strData = string.Concat(strData, "\r\n");
                //if (Html == true)
                //{
                    strData = string.Concat(strData, "Content-Transfer-Encoding: text/html;");
                //}
                //else
                //{
                //    strData = string.Concat(strData, "Content-Transfer-Encoding: text/plain;");
                //}
                //strData = string.Concat(strData, "\r\n");
                //strData = string.Concat(strData, "Content-Base: \"" + Base + "\"");
                //strData = string.Concat(strData, "\r\n" + "\r\n");                strData = string.Concat(strData, model.Body);
                strData = string.Concat(strData, "\r\n.\r\n");
                strSendBuffer[7] = strData;                strData = "";
                strData = string.Concat(strData, "QUIT\r\n");
                strSendBuffer[8] = strData;                int i = 0;                while (i < strSendBuffer.Length)
                {
                    smtpcMail.SendCommandToServer(strSendBuffer[i]);
                    strResponseNumber = smtpcMail.GetServerResponse();                    for (int j = 0; j < strResponseCode.Length; j++)
                    {
                        if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, strResponseCode[j]))
                        {
                            this.strResponse += strResponseNumber;
                            this.strResponse += "<br>";
                            break;
                        }
                        else
                        {
                            if (j == strResponseCode.Length - 1)
                            {
                                this.strErrMessage += strResponseNumber;
                                this.strErrMessage += strSendBuffer[i];
                                return false;
                            }
                        }
                    }                    i++;
                } // 结束循环
                return true;
            }
            catch (SocketException err)
            {
                this.strErrMessage += err.Message + " " + err.StackTrace;
                return false;
            }
            catch (Exception e)
            {
                this.strErrMessage += e.Message + " " + e.StackTrace;
                return false;
            }
        } //结束邮件发送方法    } // 结束类请大家优先帮忙解决一问题,二问题慢慢处理也可!100分送上!

解决方案 »

  1.   

    LumiSoft.Net 很强大的邮件类   什么多有  我也在做这玩艺 我的是收信  hotmail 指定信箱的收信
       汗  现在只能做到收取收件箱的 
      

  2.   

    关键是乱码都不出来啊,除sina和gmail以外,正文没有内容!
      

  3.   

    strData = string.Concat(strData, "charset=\"iso-8859-1\"");改一种编码格式试试
      

  4.   

    html正文就很正常...很多邮箱包括很多邮件客户端都拒绝显示html正文,免得被垃圾邮件烦...
      

  5.   

    针对Tom邮箱和网易邮箱换了几种编码都不行!
      

  6.   

    数据都是126邮箱的smtp发出去的,可能是TOM和网易的POP那边有其它问题
      

  7.   

    设置了 text/plain也是不行滴!求解释啊!
      

  8.   

    目前网上的Socket发邮件大都没经过完整测试,所以都有这种问题,CSDN的大神们快快现身!