求助高人解决VS2010 C#发送带附件邮件问题
在用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);
}
}
}
}
--------------------编程问答-------------------- vs2010 是兼容vs2008的
不发送附件是否成功
--------------------编程问答-------------------- VS2010 发送带2M的附件没问题,5M以上不行,但VS2008发送带20M附件的邮件没问题,好不容易把以前做的从VS2008移植到VS2010,但现在不能用VS2008打开VS2010的项目,而且再换回去也不容易啊 --------------------编程问答-------------------- 路过看看,随便学习一下 --------------------编程问答-------------------- 没有其他异常信息啥 的? --------------------编程问答-------------------- 不是VS2010不行,先问问自己行不行。
如果只是会从网上拷贝代码,那一定不行。 --------------------编程问答-------------------- 难道我没说清楚?上面的代码是我的工程,同样的上面的代码,在VS2008和VS2010都能编译成功,添加2M的附件也都能发送成功,但换成20M的附件,VS2010就提示发送错误(其实5M也不行),而VS2008却能发送。还有5楼不是什么行不行的问题,参考网上的代码很正常,"他山之石,可以攻玉" --------------------编程问答-------------------- 自己顶吧 --------------------编程问答-------------------- 鄙视下5楼,也不知道5楼自己行不行 --------------------编程问答-------------------- 自己顶吧 --------------------编程问答-------------------- BS5楼 网上拷贝代码 如果都没用 人家怎么写上去的 --------------------编程问答-------------------- 每天回帖即可获得10分可用分 --------------------编程问答-------------------- 没在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生成 内部异常。 此外,您会收到以下错误消息:
发送失败邮件
下面是内部异常的错误信息:
索引已超出界限的数组。 --------------------编程问答-------------------- 楼主,结帖给分吧
补充:.NET技术 , C#