首先是邮件帮助类
using System;
using
System.Collections.Generic;
using System.Text;
using
System.Net.Mail;
using System.Windows.Forms;
namespace
zzEmail
{
//邮件帮助类
class MailHelper
{
SmtpClient
smtpClient;
//邮件实体类,包含用户名密码
MailModel mail;
UserModel
to;
public MailHelper()
{
}
public MailHelper(MailModel
mail, UserModel t)
{
smtpClient = new SmtpClient();
this.mail =
mail;
this.to = t;
}
public void send()
{
MailMessage
msg=null;
smtpClient.Credentials = new
System.Net.NetworkCredential(mail.from.Send_Address.Address,
mail.from.password);//设置发件人身份的票据
smtpClient.DeliveryMethod =
System.Net.Mail.SmtpDeliveryMethod.Network;
smtpClient.Host = "smtp." +
mail.from.Send_Address.Host;
try
{
msg =
mail.GetMail();
msg.To.Add(to.Send_Address.Address);
smtpClient.Send(msg);
MessageBox.Show("发送成功");
}
catch
(SmtpException err)
{
//如果错误原因是没有找到服务器,则尝试不加smtp.前缀的服务器
if
(err.StatusCode ==
SmtpStatusCode.GeneralFailure)
{
try
{
//有些邮件服务器不加smtp.前缀
smtpClient.Host
= null;
smtpClient.Send(mail.GetMail());
}
catch (SmtpException
err1)
{
MessageBox.Show(err1.Message,
"发送失败");
}
}
else
{
MessageBox.Show(err.Message,
"发送失败");
}
}
finally
{
//及时释放占用的资源
msg.Dispose();
}
}
}
}
邮件实体类
using
System;
using System.Collections.Generic;
using
System.Text;
using System.Net.Mail;
namespace
zzEmail
{
//邮件实体类
class MailModel
{
//主题
public
string Subject { get;set;}
public string SubjectEncoding { get; set;
}
//内容
public string Body { get;set;}
public string BodyEncoding
{ get; set; }
//附件
public List<Attachment> Attachments=new
List<Attachment>();
public MailMessage
message;
//发送人
public UserModel from;
public MailModel(string
subject,string body,UserModel f)
{
message = new
MailMessage();
this.Subject = subject;
this.Body =
body;
this.from = f;
}
//添加附件
public void
AddAttach(Attachment
file)
{
Attachments.Add(file);
}
//添加一群附件
public void
AddAttach(List<Attachment> files)
{
foreach (Attachment item in
files)
{
if(item!=null)
this.Attachments.Add(item);
}
}
//返回邮件实体
public
MailMessage GetMail()
{
if (this.message !=
null)
{
message.Subject = this.Subject;
message.SubjectEncoding =
System.Text.Encoding.UTF8;
message.Body =
this.Body;
message.BodyEncoding =
System.Text.Encoding.UTF8;
message.From =
from.Send_Address;//设置发邮件人地址
foreach (Attachment item in
Attachments)
{
if (item !=
null)
this.message.Attachments.Add(item);
}
return
message;
}
else
return
null;
}
}
}
邮件的用户类
using System;
using
System.Collections.Generic;
using System.Text;
using
System.Net.Mail;
namespace zzEmail
{
//接收邮件的用户实体类
class
UserModel
{
public string nickname { get; set; }
public string
password { get; set; }
public MailAddress
Send_Address{get;set;}
public UserModel(string
useraddr)
{
Send_Address = new
MailAddress(useraddr);
}
public UserModel(string useraddr,string
nickname)
{
this.nickname = nickname;
Send_Address = new
MailAddress(useraddr);
}
}
}
使用多线程来对邮件进行发送
using
System;
using System.Collections.Generic;
using
System.ComponentModel;
using System.Data;
using
System.Drawing;
using System.Text;
using
System.Windows.Forms;
using System.Net.Mail;
using
System.Threading;
namespace zzEmail
{
public partial class Form1
: Form
{
public
Form1()
{
InitializeComponent();
}
private void
btn_addFile_Click(object sender, EventArgs e)
{
OpenFileDialog
myOpenFileDialog = new OpenFileDialog();
myOpenFileDialog.CheckFileExists =
true;
//只接收有效的文件名托福答案
myOpenFileDialog.ValidateNames
= true;
//允许一次选择多个文件作为附件
myOpenFileDialog.Multiselect =
true;
myOpenFileDialog.ShowDialog();
if
(myOpenFileDialog.FileNames.Length >
0)
{
FileList.Items.AddRange(myOpenFileDialog.FileNames);
}
}
private
void btn_Send_Click(object sender, EventArgs e)
{
UserModel from = new
UserModel(txt_UserName.Text);
from.password = txt_Pass.Text;
UserModel
to = new UserModel(txt_rec.Text);
MailModel mail = new
MailModel(txt_sub.Text, txt_content.Text, from);
List<Attachment>
filelist = new List<Attachment>();
//添加附件托福答案
if
(FileList.Items.Count > 0)
{
for (int i = 0; i <
FileList.Items.Count; i++)
{
Attachment attachFile = new
Attachment(FileList.Items[i].ToString());
filelist.Add(attachFile);
}
}
mail.AddAttach(filelist);//添加附件
MailHelper
helper = new MailHelper(mail, to);
//启动一个线程发送邮件
Thread mythread = new
Thread(new
ThreadStart(helper.send));
mythread.Start();
}
}
}
原文:http://www.cnblogs.com/tianchaoy/p/3690017.html