自己用c#写的一个用TcpClient和NetworkStream来发送邮件的程序,附件在30k左右没有问题,附件在50k或更多的时候就会发送不出去.
我用 smtp.163.com作为发件箱服务器  错误提示:远程主机强迫关闭了一个现有的连接。
我用iis的smtp虚拟服务器作为发信服务器,程序没有出错提示,但都在iis中变成了死信,根本没有发送出去。iis日志中错误提示是:554 Too long line was received. Transmission aborted.想了两天都找不到问题所在,网上也没有找到解决方法,求邮件高手们帮帮忙。。附件发送代码:
private void Attachment() 
        {//对文件列表做循环
            if (filelist == null)
            {
                return;
            }
            for (int i = 0; i < filelist.Rows.Count; i++) 
            {
                DataRow dr = filelist.Rows[i];
                WriteStream("--unique-boundary-1");
                WriteStream("Content-Type: application/octet-stream;name=\"" + dr[0].ToString() + "\"");//文件格式
                WriteStream("Content-Transfer-Encoding: base64");//内容编码
                WriteStream("Content-Disposition:attachment;filename=\"" + dr[0].ToString() + "\"");//文件名
                WriteStream("");
                string fileinfo = dr[1].ToString();
                WriteStream(fileinfo);
                WriteStream("");
            }
        }
private void WriteStream(string strCmd, string charset) 
        {
            NetworkStream TcpStream;//定义操作对象
            strCmd = strCmd + "\r\n";//加入换行符
            TcpStream = this.GetStream();//获取数据流
            TcpStream.WriteTimeout = 1000;
            //将命令行转化为byte[]
            byte[] bWrite = Encoding.GetEncoding(charset).GetBytes(strCmd.ToCharArray());
            //由于每次写入的数据大小是有限的,那么我们将每次写入的数据长度定在75个字节,一旦长度超过75就分步写入。
            int start = 0;
            int length = bWrite.Length;
            int page = 0;
            int size = 76;
            int count = size;
            if (length > size)
            {
                if ((length / size) * size < length)
                {
                    page = length / size + 1;
                }
                else
                {
                    page = length / size;
                }
                for (int i = 0; i < page; i++) //根据页数循环写入
                {
                    start = i * size;
                    if (i == page - 1)
                    {
                        count = length - (i * size);
                    }
                    TcpStream.Write(bWrite, start, count);
                    TcpStream.Flush();
                    WriteLog(Encoding.GetEncoding(charset).GetString(bWrite, start, count));
                }
            }
            else
            {
                TcpStream.Write(bWrite, 0, length);
                TcpStream.Flush();
                WriteLog(Encoding.GetEncoding(charset).GetString(bWrite, 0, length));
            }
        }