附上部分源代码(比较多,只贴出相关的一部分)//from1.cs....
//click button to envoke this event
private void button1_Click(object sender, System.EventArgs e)
{
MailSend Ms = new MailSend();//构造对象
Ms.SMTPServer = "smtp.free.etang.com";//传递参数
Ms.SMTPPort = 25;
Ms.LoginUserName = "clickchen";
Ms.LoginPassword = "*****";//不好意思, 这里省掉密码
Ms.MailSubject = "hi";
Ms.MailBody = "this is a test";
Ms.MailHtmlBody = "this is a test!";
Ms.MailFrom = "[email protected]";
Ms.MailTo = "[email protected]";
Ms.MailFromName = "陈";
Ms.MailToName = "陈";
Ms.MailContent_type = "multipart/mixed";
Ms.MailEncode = "base64";
Ms.MailCharset = "GB2312";
Ms.MailPriority = 3;
Ms.Send();//发送邮件 }
.....//MailSend.cs
.....// send mail function
//getMailServer 使用来获取服务器验证的, 查看过返回置, 没问题
//没有发送附件 public void Send()
{
if(!getMailServer())
MessageBox.Show("error when getMailServer");
if(!OperaStream("MAIL FROM:"+"[email protected]","250"))
{
this.Close();
return;
} if(!OperaStream("RCPT TO:"+"[email protected]","250"))
{
this.Close();
return;
} if(!OperaStream("DATA","354"))
{
this.Close();
return;
} WriteStream("From: "+this.fromname+"<"+this.from+">");//发件人
WriteStream("Reply-To:"+this.from);//回复地址
WriteStream("Date: "+DateTime.Now);//时间 WriteStream("Subject: "+this.subject);//主题
WriteStream("To:"+this.to);//收件人
//邮件格式
WriteStream("Content-Type: multipart/mixed; boundary=\"unique-boundary-1\"");
WriteStream("X-Priority:"+priority);//优先级
WriteStream("MIME-Version:1.0");//MIME版本
//数据ID,随意
WriteStream("Message-Id: "+DateTime.Now.ToFileTime()+"@security.com");
WriteStream("Content-Transfer-Encoding:"+this.encode);//内容编码
WriteStream("X-Mailer:DS Mail Sender V1.0");//邮件发送者
WriteStream("");
//看看这段头信息,里面的变量是事先定义好的,在头信息结束的时候,在写入一段空信息,这样Smtp服务器才会认为你已经写完了。
WriteStream(AuthStream("This is a multi-part message in MIME format."));
WriteStream("");
//这里只是一端描述性内容。
//从此处开始进行分隔输入
WriteStream("--unique-boundary-1");
//在此处定义第二个分隔符
WriteStream("Content-Type: multipart/alternative;Boundary=\"unique-boundary-2\"");
WriteStream("");
//文本信息
WriteStream("--unique-boundary-2");
WriteStream("Content-Type: text/plain;charset="+this.charset);
WriteStream("Content-Transfer-Encoding:"+this.encode);
WriteStream("");
//byte[] covertedValue = Convert.FromBase64String(this.body);
//originalString 为收到的字符串的标题或正文
//this.body = System.Text.Encoding.GetEncoding("gb2312").GetString(this.body); // 注意:这里需确定邮件的编码 WriteStream(body);
WriteStream("");//一个部分写完之后就写如空信息,分段
//html信息
WriteStream("--unique-boundary-2");
WriteStream("Content-Type: text/html;charset="+this.charset);
WriteStream("Content-Transfer-Encoding:"+this.encode);
WriteStream("");
WriteStream(htmlbody);
WriteStream("");
WriteStream("--unique-boundary-2--");//分隔符的结束符号,尾巴后面多了--
WriteStream("");
// //增加附件
// Attachment();//这个方法是我们在上面讲过的,实际上他放在这
// WriteStream("");
// WriteStream("--unique-boundary-1--") ;
if (!OperaStream(".","250"))//最后写完了,输入"."
{
this.Close(); //关闭连接
}
}......
private void WriteStream(String strCmd,String charset)
{
Stream TcpStream;//定义操作对象
strCmd = strCmd + "\r\n"; //加入换行符
TcpStream =this.GetStream();//获取数据流
//将命令行转化为byte[]
byte[] bWrite = Encoding.GetEncoding(charset).GetBytes(strCmd.ToCharArray()); int start=0;
int length=bWrite.Length;
int page=0;
int size=75;
int count=size;
if (length>75)
{
//数据分页
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);//将数据写入到服务器上
}
}
else
TcpStream.Write(bWrite,0,bWrite.Length);
} public void WriteStream(String strCmd)
{
WriteStream(strCmd,this.charset);
}
//click button to envoke this event
private void button1_Click(object sender, System.EventArgs e)
{
MailSend Ms = new MailSend();//构造对象
Ms.SMTPServer = "smtp.free.etang.com";//传递参数
Ms.SMTPPort = 25;
Ms.LoginUserName = "clickchen";
Ms.LoginPassword = "*****";//不好意思, 这里省掉密码
Ms.MailSubject = "hi";
Ms.MailBody = "this is a test";
Ms.MailHtmlBody = "this is a test!";
Ms.MailFrom = "[email protected]";
Ms.MailTo = "[email protected]";
Ms.MailFromName = "陈";
Ms.MailToName = "陈";
Ms.MailContent_type = "multipart/mixed";
Ms.MailEncode = "base64";
Ms.MailCharset = "GB2312";
Ms.MailPriority = 3;
Ms.Send();//发送邮件 }
.....//MailSend.cs
.....// send mail function
//getMailServer 使用来获取服务器验证的, 查看过返回置, 没问题
//没有发送附件 public void Send()
{
if(!getMailServer())
MessageBox.Show("error when getMailServer");
if(!OperaStream("MAIL FROM:"+"[email protected]","250"))
{
this.Close();
return;
} if(!OperaStream("RCPT TO:"+"[email protected]","250"))
{
this.Close();
return;
} if(!OperaStream("DATA","354"))
{
this.Close();
return;
} WriteStream("From: "+this.fromname+"<"+this.from+">");//发件人
WriteStream("Reply-To:"+this.from);//回复地址
WriteStream("Date: "+DateTime.Now);//时间 WriteStream("Subject: "+this.subject);//主题
WriteStream("To:"+this.to);//收件人
//邮件格式
WriteStream("Content-Type: multipart/mixed; boundary=\"unique-boundary-1\"");
WriteStream("X-Priority:"+priority);//优先级
WriteStream("MIME-Version:1.0");//MIME版本
//数据ID,随意
WriteStream("Message-Id: "+DateTime.Now.ToFileTime()+"@security.com");
WriteStream("Content-Transfer-Encoding:"+this.encode);//内容编码
WriteStream("X-Mailer:DS Mail Sender V1.0");//邮件发送者
WriteStream("");
//看看这段头信息,里面的变量是事先定义好的,在头信息结束的时候,在写入一段空信息,这样Smtp服务器才会认为你已经写完了。
WriteStream(AuthStream("This is a multi-part message in MIME format."));
WriteStream("");
//这里只是一端描述性内容。
//从此处开始进行分隔输入
WriteStream("--unique-boundary-1");
//在此处定义第二个分隔符
WriteStream("Content-Type: multipart/alternative;Boundary=\"unique-boundary-2\"");
WriteStream("");
//文本信息
WriteStream("--unique-boundary-2");
WriteStream("Content-Type: text/plain;charset="+this.charset);
WriteStream("Content-Transfer-Encoding:"+this.encode);
WriteStream("");
//byte[] covertedValue = Convert.FromBase64String(this.body);
//originalString 为收到的字符串的标题或正文
//this.body = System.Text.Encoding.GetEncoding("gb2312").GetString(this.body); // 注意:这里需确定邮件的编码 WriteStream(body);
WriteStream("");//一个部分写完之后就写如空信息,分段
//html信息
WriteStream("--unique-boundary-2");
WriteStream("Content-Type: text/html;charset="+this.charset);
WriteStream("Content-Transfer-Encoding:"+this.encode);
WriteStream("");
WriteStream(htmlbody);
WriteStream("");
WriteStream("--unique-boundary-2--");//分隔符的结束符号,尾巴后面多了--
WriteStream("");
// //增加附件
// Attachment();//这个方法是我们在上面讲过的,实际上他放在这
// WriteStream("");
// WriteStream("--unique-boundary-1--") ;
if (!OperaStream(".","250"))//最后写完了,输入"."
{
this.Close(); //关闭连接
}
}......
private void WriteStream(String strCmd,String charset)
{
Stream TcpStream;//定义操作对象
strCmd = strCmd + "\r\n"; //加入换行符
TcpStream =this.GetStream();//获取数据流
//将命令行转化为byte[]
byte[] bWrite = Encoding.GetEncoding(charset).GetBytes(strCmd.ToCharArray()); int start=0;
int length=bWrite.Length;
int page=0;
int size=75;
int count=size;
if (length>75)
{
//数据分页
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);//将数据写入到服务器上
}
}
else
TcpStream.Write(bWrite,0,bWrite.Length);
} public void WriteStream(String strCmd)
{
WriteStream(strCmd,this.charset);
}
我没想到在正文区域还要指定base64 encode
以为只要指定字符集(charset) gb2312 就可以了马上结贴