科信学院
BoxPassWord.Visible = !Regex.IsMatch(textBoxPassWord.Text, @\
}
//收件人地址改变时触发
private void textBoxReceive_TextChanged(object sender, EventArgs e) {
//要求满足电子邮件的格式
BoxReceive.Visible = !Regex.IsMatch(textBoxReceive.Text, @\
}
//主题改变时触发
private void textBoxSubject_TextChanged(object sender, EventArgs e) {
//不能为空
BoxSubject.Visible = !Regex.IsMatch(textBoxSubject.Text, @\ }
//发送内容改变时触发
private void textBoxBody_TextChanged(object sender, EventArgs e) {
//不能为空
BoxBody.Visible = !Regex.IsMatch(textBoxUserName.Text, @\ }
private void buttonSend_Click(object sender, EventArgs e) {
string invalidString = \
if (BoxUserName.Visible == true) invalidString += \用户名、\ if (BoxPassWord.Visible == true) invalidString += \口令、\ if (BoxReceive.Visible == true) invalidString += \收件人、\
6
科信学院
if (BoxSubject.Visible == true) invalidString += \主题、\ if (BoxBody.Visible == true) invalidString += \邮件内容、\ if (invalidString.Length > 0) {
MessageBox.Show(invalidString.TrimEnd('、') + \不能为空或者有不符合规定的内容\
} else {
//发件人和收件人的地址
String[] toes = textBoxReceive.Text.Trim().Split(';');
MailAddress from = new MailAddress(textBoxUserName.Text); MailAddress to = new MailAddress(toes[0]); MailMessage msg = new MailMessage(from, to); MailAddressCollection mac = msg.To; for (Int32 i = 1; i < toes.Length; i++) {
mac.Add(toes[i]); }
//邮件主题、内容
MailMessage message = new MailMessage(from, to); message.Subject = textBoxBody.Text;
message.SubjectEncoding = System.Text.Encoding.UTF8; message.Body = textBoxBody.Text;
message.BodyEncoding = System.Text.Encoding.UTF8; //添加附件
if (listBox1.Items.Count > 0) {
for (int i = 0; i < listBox1.Items.Count; i++)
7
科信学院
{
Attachment attachFile = new Attachment(listBox1.Items[i].ToString());
message.Attachments.Add(attachFile); } } 器
message);
try {
//大部分邮件服务器均加smtp.前缀
SmtpClient client = new SmtpClient(\ SendMail(client, from, textBoxPassWord.Text, to, message); MessageBox.Show(\邮件发送成功\}
catch (SmtpException err) {
//如果错误原因是没有找到服务器,则尝试不加smtp.前缀的服务 if (err.StatusCode == SmtpStatusCode.GeneralFailure) { try {
//有些邮件服务器不加smtp.前缀
SmtpClient client = new SmtpClient(from.Host); SendMail(client, from, textBoxPassWord.Text, to, MessageBox.Show(\邮件发送成功\ }
catch (SmtpException err1) {
MessageBox.Show(err1.Message, \发送失败\
8
科信学院
} } else {
MessageBox.Show(err.Message, \发送失败\ } }
} }
//根据指定的参数发送邮件
private void SendMail(SmtpClient client, MailAddress from, string password, MailAddress to, MailMessage message)
{
//不使用默认凭证,注意此句必须放在client.Credentials是上面 client.UseDefaultCredentials = false; //指定用户名、密码
client.Credentials = new NetworkCredential(from.Address, password); //邮件通过网络发送到服务器
client.DeliveryMethod = SmtpDeliveryMethod.Network; try {
client.Send(message); } catch {
throw; } finally {
9
科信学院
//及时释放占用的资源 message.Dispose(); }
}
private void buttonAdd_Click(object sender, EventArgs e) {
OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.CheckFileExists = true; //只接受有效的文件名
myOpenFileDialog.ValidateNames = true; //允许依次选择多个文件作为附件 myOpenFileDialog.Multiselect = true; myOpenFileDialog.ShowDialog();
if (myOpenFileDialog.FileName.Length > 0) {
listBox1.Items.AddRange(myOpenFileDialog.FileNames); }
} } } 2.4程序测试
2.4.1 发送邮件中的窗口,如下图3表示:
10