www.pudn.com > SendMailExample.rar > 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); 
            } 
        } 
    } 
}