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

📄 sendmail.cs

📁 visual c# 网络编程技术与实践实例包括几个源码
💻 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 + -