⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formsendmail.cs

📁 邮件收发的基本实现,可以作为邮件开发初学者的参考.
💻 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 + -