在用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);
} }
}
}
代码如下:(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);
} }
}
}
不发送附件是否成功
考虑以下方案:
您运行基于.net Framework 4.0 应用程序。 此应用程序使用了System.Net.Mail.SmtpClient类可以发送电子邮件消息。
添加的附件,符合下列条件以电子邮件消息。
在TransferEncoding未指定 属性在附件中。 或者,TransferEncoding属性被指定为Base64或未知
附件的大小大于超过 3 MB。
您发送电子邮件消息。
在这种情况下一个System.Net.Mail.SmtpException异常和一个System.IndexOutOfRangeException生成 内部异常。 此外,您会收到以下错误消息:
发送失败邮件
下面是内部异常的错误信息:
索引已超出界限的数组。