电子邮件发送程序的设计与实现 第10页 共18页
//自动发送复选按钮默认为未选中状态 checkBox1.Checked = false; }
2)构造电子邮件附件
Attachment用来构造电子邮件附件.用此类构造了电子邮件附件然后添加到MailMessage对象的Attachments集合即可。
在本次课程设计中,通过单击添加附件和删除附件按钮实现附件的添加和删除,添加附件成功后添加到message对象中,具体实现代码如下:
//添加附件按钮 触发函数
private void button1_Click(object sender, EventArgs e) {
openFileDialog1.ShowDialog();
textBox_attach.Text = openFileDialog1.FileName; }
//删除附件按钮 触发函数
private void button2_Click(object sender, EventArgs e) {
textBox_attach.Text = \ }
//判断是否有附件添加 有的话就添加到message对象中 if (textBox_attach.Text.Contains(\ {
//添加附件到message对象
message.Attachments.Add(newAttachment(textBox_attach.Text)); }
3)发送电子邮件及其附件,这是这个类中的核心函数
在本次课程设计中,通过单击单击发送按钮和复选按钮来实现邮件的发送和发送次数的设置,通过退出按钮进行退出。邮件发送时,发送按钮的文本将自动改为“正在发送”,此时,程序将对发件人和收件人地址进行封装、设置主题和内容的编码格式、并创建一个MailMessage对象用于传递邮件、最后构造smtp客户端对象后便可实现邮件的发送。邮件发送成功后,会自动跳出“发送成功”的对话文本框。具体代码如下所示:
//发送邮件按钮
private void button3_Click(object sender, EventArgs e)
电子邮件发送程序的设计与实现 第11页 共18页
{
//取得发送次数
int i = Convert.ToInt32(textBox_time.Text); //按发送次数 循环发送
for (int x = 1; x <= i; x++) {
button_send.Text = \发送\
//线程睡1秒
Thread.Sleep(1000);
//如果自动发送的复选按钮为选中状态 则执行这里 if (checkBox1.Checked == true) {
//将发送信息写入主题文本框
textBox_subject.Text = \ //发送次数加1 count += 1; }
//将发送按钮的文本改为“正在发送”
button_send.Text = \正在发送\ //将发送按钮设置为不可点击状态 button_send.Enabled = false; try {
//封装发件人地址 MailAddress from = new
MailAddress(textBox_from.Text.Trim());
//封装收件人地址 MailAddress to = new
MailAddress(textBox_to.Text.Trim());
//创建一个MailMessage对象 用于传递邮件
MailMessage message = new MailMessage(from, to); //设置主题
message.Subject = textBox_subject.Text; //设置邮件体信息
message.Body = textBox_body.Text; //将邮件体部分设置为html格式 message.IsBodyHtml = true;
//判断是否有附件添加 有的话就添加到message对象
中
if (textBox_attach.Text.Contains(\ {
//添加附件到message对象 message.Attachments.Add(new
电子邮件发送程序的设计与实现 第12页 共18页
Attachment(textBox_attach.Text));
}
//设置主题部分的编码为默认 message.SubjectEncoding =
System.Text.Encoding.Default;
//设置邮件体部分的编码为默认 message.BodyEncoding =
System.Text.Encoding.Default;
//构造smtp客户端对象
SmtpClient client = new SmtpClient(\+
textBox_from.Text.Split('@')[1]);
//构造NetworkCredential对象用于封装邮件
System.Net.NetworkCredential smtpuserinfo = new
System.Net.NetworkCredential();
//写入用户名和密码 smtpuserinfo.UserName =
textBox_from.Text.Split('@')[0];
smtpuserinfo.Password = textBox_pass.Text; //将smtpuserinfo对象设置为smtp客户端的
Credentials
client.Credentials = smtpuserinfo; //发送邮件。。。
client.Send(message); }
//到这里说明发送成功了
if (checkBox1.Checked == false)
{
MessageBox.Show(\发送成功\提示\ }
//恢复发送按钮为可点击状态 button_send.Enabled = true; //恢复发送按钮文本为“发送” button_send.Text = \发送\
}
if (checkBox1.Checked == true) //提示本次发送成功了
MessageBox.Show(textBox_time.Text+\次发送完毕\提示\ button_send.Text = \发送\ }
//点击复选按钮的处理方法
private void checkBox1_CheckedChanged(object sender, EventArgs e) {
电子邮件发送程序的设计与实现 第13页 共18页
//复选框为选中状态
if (checkBox1.Checked == true) {
//发送次数变为可编辑状态
textBox_time.Enabled = true; }
//不是的话 设置发送次数框为 不可编辑状态 else textBox_time.Enabled = false; }
//退出按钮
private void button1_Click_1(object sender, EventArgs e) {
//应用程序退出
Application.Exit(); } 4)各种异常处理方法
在本程序中,各种异常包括:文本框格式异常、附近路径异常、smtp异常和未预料的其他类型异常。具体实现代码如下:
//捕获格式错误异常
catch (FormatException) {
myclass.check(textBox_from.Text, textBox_to.Text,
textBox_subject.Text);
return ; }
//捕获异常
catch (UnauthorizedAccessException) {
if (checkBox1.Checked == false)
MessageBox.Show(\请输入正确的附件路径\ return; }
//捕获smtp异常
catch (SmtpException) {
if(checkBox1.Checked == false)
MessageBox.Show(\请检查网络是否正常\提示\ else continue; }
//捕获未预料到的其他类型异常 catch
电子邮件发送程序的设计与实现 第14页 共18页
{
if(checkBox1.Checked==false) {
MessageBox.Show(\发生不可预料的错误,请仔细检查以上选项
是不有错!\提示\
checkBox1.Checked = false; }
else continue; }