在用VS2010发送带附件的邮件,附件还不到5M,就报错,下午我改换VS2008,同样的代码居然20M也能发送出去,请高人分析一下我下面代码,指点迷津,不胜感激,是不是VS2010该设置什么? 
代码如下:(Form里就三个控件,button1,button2,还有一个列表listBox1)using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Mail;
using System.Net.Mime;
using System.Collections;namespace SendEmail
{
    public partial class Form1 : Form
    {
        private ArrayList array;
        public Form1()
        {
            InitializeComponent();
        }        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog openfile = new OpenFileDialog();
            openfile.Multiselect = true;
            DialogResult dr = openfile.ShowDialog();
            if (DialogResult.OK == dr)
            {
                this.listBox1.Items.AddRange(openfile.FileNames);
                array = new ArrayList(openfile.FileNames);
            }
        }        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {        }        private void button1_Click(object sender, EventArgs e)
        {
            sendmail();
        }        public void sendmail()
        {            string email = "******@qq.com";
            //发件人地址
            MailAddress from = new MailAddress(email, email);            //收件人地址
            MailAddress to = new MailAddress(email);            MailMessage message = new MailMessage(from, to);            //   System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
            //   message.From = new MailAddress(email, email);//必须是提供smtp服务的邮件服务器 
            //   String receiveadd = this.textBox2.Text.Trim();
            //    message.To.Add(new MailAddress(receiveadd));
            message.Subject = "hello";
            message.IsBodyHtml = true;
            message.BodyEncoding = System.Text.Encoding.UTF8;            message.Body = "body";                     if (array.Count != 0)
            {
                for (int i = 0; i < array.Count; i++)
                {                    message.Attachments.Add(new Attachment(array[i].ToString(), MediaTypeNames.Text.Plain));                }
            }
            //   message.Priority = System.Net.Mail.MailPriority.High;
            string smtpserver = "smtp.qq.com";
            int smtpport = 25;
            bool isssl = false;
            SmtpClient client = new SmtpClient(smtpserver, smtpport); // 587;//Gmail使用的端口 
            client.EnableSsl = isssl;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential(email, "******"); //这里是申请的邮箱和密码 
            client.Timeout = 100000000;            //client.EnableSsl = true; //必须经过ssl加密 
            try
            {
                client.Send(message);                MessageBox.Show("发送成功并保存成功");                // Response.Write("邮件已经成功发送到" + message.To.ToString() + "<br>");
            }
            catch (IndexOutOfRangeException e)
            {
                MessageBox.Show(e.Message);
            }
            catch (Exception ee)
            {
                //Response.Write(ee.Message + "<br>" /* + ee.InnerException.Message*/ );
                MessageBox.Show("发送失败" + ee.Message);
            }        }
    }
}

解决方案 »

  1.   

    vs2010 是兼容vs2008的
    不发送附件是否成功
      

  2.   

    VS2010 发送带2M的附件没问题,5M以上不行,但VS2008发送带20M附件的邮件没问题,好不容易把以前做的从VS2008移植到VS2010,但现在不能用VS2008打开VS2010的项目,而且再换回去也不容易啊
      

  3.   

    难道我没说清楚?上面的代码是我的工程,同样的上面的代码,在VS2008和VS2010都能编译成功,添加2M的附件也都能发送成功,但换成20M的附件,VS2010就提示发送错误(其实5M也不行),而VS2008却能发送。还有5楼不是什么行不行的问题,参考网上的代码很正常,"他山之石,可以攻玉"
      

  4.   

    没在VS2010中写类似代码的人还是把08中的代码抄过看看会出什么现象 。可以说网上标准的方法一定会出错。安装了VS2010的同志,如果遇到此类问题,请找MS打补丁上去吧。虽然问题是解决了。可是为了这个问题,花了一夜的时间,压根就没往 MS那方面去想,总认为是自己的代码有问题。http://support.microsoft.com/kb/2183292/zh-cn
    考虑以下方案:
    您运行基于.net Framework 4.0 应用程序。 此应用程序使用了System.Net.Mail.SmtpClient类可以发送电子邮件消息。
    添加的附件,符合下列条件以电子邮件消息。
    在TransferEncoding未指定 属性在附件中。 或者,TransferEncoding属性被指定为Base64或未知
    附件的大小大于超过 3 MB。
    您发送电子邮件消息。
    在这种情况下一个System.Net.Mail.SmtpException异常和一个System.IndexOutOfRangeException生成 内部异常。 此外,您会收到以下错误消息:
    发送失败邮件
    下面是内部异常的错误信息:
    索引已超出界限的数组。