📄 sendmail.cs
字号:
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.Net.Mime;
using System.Threading;
namespace EmailApp
{
public partial class SendMail : Form
{
//声明线程对象
private Thread thread1;
//声明发送邮件类SMail
private SMail mySendMail;
//声明一个委托dgMyListBox用来更新发送邮件的状态框值
public SetMyListBox dgMyListBox;
public SendMail(string ss,string na,string pass)
{
//将smtpserver,name,password信息传入SMail类的构造函数中
mySendMail=new SMail(ss,na,pass);
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//若发送人和收件人地址为空 弹出错误对话框并返回
if (("" == fromBox.Text) || ("" == toBox.Text))
{
MessageBox.Show("发送人和收件人地址不能为空!");
return;
}
//初始化字符串数组msgUn 为发送窗口的信息集合
string[] msgUn={fromBox.Text,toBox.Text,titleBox.Text,userBox.Text,filetextBox.Text,textBox.Text};
//把字符串数组传入SMail类中
mySendMail.SetmsgUn(msgUn);
//初始化线程对象 用线程执行Send函数
thread1 = new Thread(new ThreadStart(Send));
//线程开始执行
thread1.Start();
}
private void addAttach_Click(object sender, EventArgs e)
{
//初始化打开文件窗口实例
OpenFileDialog fileDialog=new OpenFileDialog();
//若用户指定不存在的文件名 提出警告
fileDialog.CheckFileExists=true;
//只接受有效的WIN32文件名
fileDialog.ValidateNames=true;
//允许选择多个文件
fileDialog.Multiselect=true;
//显示窗口
fileDialog.ShowDialog();
//若文件名不空 显示在filetextBox中
if(fileDialog.FileName.Length>0)
filetextBox.Text=(fileDialog.FileName);
}
public void Send()
{
//初始化两个委托用来改变窗体发送按钮的可操作属性
MethodInvoker dgMyBtnTrue = new MethodInvoker(SetButtontrue);
MethodInvoker dgMyBtnFalse = new MethodInvoker(SetButtonfalse);
//初始化委托来更新状态信息窗口的消息
dgMyListBox = new SetMyListBox(SetListBox);
//发送时设置发送按钮不可用
BeginInvoke(dgMyBtnFalse);
//更新状态“正在连接服务器”
statelistBox.Invoke(dgMyListBox, new object[] { "正在连接服务器。。。" });
//使用mySendMail类的Login方法进行登录
mySendMail.Login();
//更新状态“正在发送消息”
statelistBox.Invoke(dgMyListBox, new object[] { "正在发送。。。" });
//使用mySendMail类的SendMails方法发送邮件
mySendMail.SendMails();
//邮件发送完毕后 设置发送按钮可用
BeginInvoke(dgMyBtnTrue);
}
public void SetButtonfalse()
{
//设置按钮不接受用户触发
button1.Enabled = false;
}
public void SetButtontrue()
{
//设置按钮接受用户触发
button1.Enabled = true;
}
public void SetListBox(string mylistvalue)
{
//在listBox中加入字符串
statelistBox.Items.Add(mylistvalue);
}
private void SendMail_Load(object sender, EventArgs e)
{
}
}
public class SMail
{
//smtp服务器地址
private string smtpServer;
//用户登录名
private string name;
//用户密码
private string password;
//附件路径
private string filepath = "";
//接收窗体对象传来的字符串数组
private string[] msgUn;
//声明SmtpClient和MailMessage对象
SmtpClient client ;
MailMessage message;
public SMail(string ss, string na, string pass)
{
//初始化发送邮件所需信息
//SMTP服务器地址 用户名和密码
smtpServer = ss;
name = na;
password = pass;
}
public void SetmsgUn(string[] msg)
{
//初始化msgUn数组
msgUn = msg;
}
public void Login()
{
//使用smtpServer字符串初始化client对象
client = new SmtpClient(smtpServer);
//使用发件人地址与发件人初始化发件人地址对象from 使用默认编码
MailAddress from = new MailAddress(msgUn[0], msgUn[3], System.Text.Encoding.Default);
//使用收件人地址初始化收件人对象to
MailAddress to = new MailAddress(msgUn[1]);
//使用from与to对象初始化电子邮件对象message
message = new MailMessage(from, to);
//初始化附件路径
filepath = msgUn[4];
//若附件地址不为空 则添加附件
if ("" != filepath)
{
//使用附件路径初始化附件对象,不解释电子邮件的附件数据
Attachment mailAttach = new Attachment(filepath, MediaTypeNames.Application.Octet);
//获取此附件的MIME内容
ContentDisposition fileDis = mailAttach.ContentDisposition;
//获取该附件的创建时间
fileDis.CreationDate = System.IO.File.GetCreationTime(filepath);
//获取该附件的最后写入时间
fileDis.ModificationDate = System.IO.File.GetLastWriteTime(filepath);
//获取该附件的最后访问时间
fileDis.ReadDate = System.IO.File.GetLastAccessTime(filepath);
//将该附件信息加入电子邮件对象message中
message.Attachments.Add(mailAttach);
}
//设置电子邮件的正文
message.Body = msgUn[5];
//正文的编码为默认的编码方式
message.BodyEncoding = System.Text.Encoding.Default;
//设置电子邮件的标题
message.Subject = msgUn[2];
//标题的编码为默认的编码方式
message.SubjectEncoding = System.Text.Encoding.Default;
//用户的默认登录信息不随邮件发送
client.UseDefaultCredentials = false;
//使用用户登录名和密码初始化验证信息
client.Credentials = new System.Net.NetworkCredential(name, password);
//设置电子邮件的发送方式为通过网络发送到SMTP服务器
client.DeliveryMethod = SmtpDeliveryMethod.Network;
}
public void SendMails()
{
try
{
//是用SMTP服务器对象client发送电子邮件对象message
client.Send(message);
//弹出发送成功对话框
MessageBox.Show("发送成功!");
//释放message对象使用的系统资源
message.Dispose();
}
catch (Exception e)
{
//若发送出错 则弹出发送失败对话框
MessageBox.Show("发送失败!");
//释放message对象使用的系统资源
message.Dispose();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -