📄 formsendmail.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.Text.RegularExpressions;
using System.Net;
using System.Net.Mail;
namespace SendMailExample
{
public partial class FormSendMail : Form
{
public FormSendMail()
{
InitializeComponent();
}
//用户名(发件人地址)改变时触发
private void textBoxUserName_TextChanged(object sender, EventArgs e)
{
//要求满足电子邮件格式
labelUserName.Visible = !Regex.IsMatch(textBoxUserName.Text,
@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
}
//密码改变时触发
private void textBoxPassword_TextChanged(object sender, EventArgs e)
{
//要求满足5-20个英文字母或数字的组合
labelPassword.Visible = !Regex.IsMatch(textBoxPassword.Text, @"^\w{5,20}$");
}
//收件人地址改变时触发
private void textBoxReceive_TextChanged(object sender, EventArgs e)
{
//要求满足电子邮件格式
labelReceive.Visible = !Regex.IsMatch(textBoxReceive.Text,
@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
}
//主题改变时触发
private void textBoxSubject_TextChanged(object sender, EventArgs e)
{
//不能为空
labelSubject.Visible = !Regex.IsMatch(textBoxSubject.Text, @"^.{1,}$");
}
//发送内容改变时触发
private void textBoxBody_TextChanged(object sender, EventArgs e)
{
//不能为空
labelBody.Visible = !Regex.IsMatch(textBoxBody.Text, @"^.{1,}$");
}
//单击【发送】按钮触发的事件
private void buttonSend_Click(object sender, EventArgs e)
{
string invalidString = "";
if (labelUserName.Visible == true) invalidString += "用户名、";
if (labelPassword.Visible == true) invalidString += "口令、";
if (labelReceive.Visible == true) invalidString += "收件人、";
if (labelSubject.Visible == true) invalidString += "主题、";
if (labelBody.Visible == true) invalidString += "邮件内容、";
if (invalidString.Length > 0)
{
MessageBox.Show(invalidString.TrimEnd('、') + "不能为空或者有不符合规定的内容");
}
else
{
//发件人和收件人地址
MailAddress from = new MailAddress(textBoxUserName.Text);
MailAddress to = new MailAddress(textBoxReceive.Text);
//邮件主题、内容
MailMessage message = new MailMessage(from, to);
message.Subject = textBoxSubject.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++)
{
Attachment attachFile = new Attachment(listBox1.Items[i].ToString());
message.Attachments.Add(attachFile);
}
}
try
{
//大部分邮件服务器均加smtp.前缀
SmtpClient client = new SmtpClient("smtp." + from.Host);
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, message);
MessageBox.Show("发送成功");
}
catch (SmtpException err1)
{
MessageBox.Show(err1.Message, "发送失败");
}
}
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
{
//及时释放占用的资源
message.Dispose();
}
}
//单击【添加附件】按钮触发的事件
private void buttonAddAttachment_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)
{
listBox1.Items.AddRange(myOpenFileDialog.FileNames);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -