APS.NET 发送邮件

dotnet中用SmtpClient来发送邮件,以前的System.Web.Mail已经不推荐使用了,新的方法在命名空间System.Net.Mail中。

涉及到的命名空间有:

using System.Net.Mail;
using System.Net;
using System.Net.Mime;

下面举两个简单的例子,是我测试时候用的:

 

//同步发送邮件
            SmtpClient client = new SmtpClient();
            //smtp server address
            client.Host = "mail1.ufida.com";
            //smtp server port
            client.Port = 25;
            //connect timeout
            client.Timeout = 5000;
            //mail account
            client.Credentials = new NetworkCredential("***@ufida.com", "***");//登录邮箱的账户和密码
            //simple send
            client.Send("***@ufida.com","***@qq.com","subject","msg");//发件人,收件人,主题,正文

这样一封简单的邮件就发送完成,其中client.Send()方法是同步发送邮件,简单的说就是单线程。

也可以使用异步发送邮件的方法,在邮件发送完成的时候,会返回一个SendCompletedEventHandler事件。

调用邮件发送的按钮事件如下:

private void button2_Click(object sender, EventArgs e)
        {
            //异步发送邮件
            //create mail message
            MailAddress from = new MailAddress("***@ufida.com","UF");
            MailAddress to = new MailAddress("***@qq.com", "QQ");
            MailMessage mail = new MailMessage(from, to);
            //add more to添加多个收件人
            MailAddress to2 = new MailAddress("***@qq.com", "QQ");
            mail.To.Add(to2);
            //add more cc添加抄送
            MailAddress cc = new MailAddress("***@qq.com", "QQ");
            mail.CC.Add(cc);
            //add more bcc添加密送
            MailAddress bcc = new MailAddress("***@qq.com", "QQ");
            mail.Bcc.Add(bcc);
            mail.Subject = "subject";
            mail.Body = "msg";
            mail.BodyEncoding = System.Text.Encoding.UTF8;//正文编码格式
            mail.IsBodyHtml = false;//正文是否为HTML邮件
            //create attachment by stream 以文件流方式读取附件并发送
            //System.IO.FileInfo file = new System.IO.FileInfo(@"E:\mycos_myjob_issue003.pdf");
            //Attachment att = new Attachment(file.OpenRead(), MediaTypeNames.Application.Pdf);
            //or add file或者直接指定附件文件的绝对路径
            //Attachment att = new Attachment(@"E:\mycos_myjob_issue003.pdf", MediaTypeNames.Application.Octet);
            //mail.Attachments.Add(att);
            //create account
            NetworkCredential account = new NetworkCredential("***@ufida.com", "***");
            SmtpClient client = new SmtpClient();
            //smtp server address
            client.Host = "mail1.ufida.com";
            //ssl是否为ssl加密
            client.EnableSsl = false;
            //smtp server port
            client.Port = 25;
            //connect timeout
            client.Timeout = 5000;
            //mail account
            client.Credentials = account;
            client.SendCompleted += new SendCompletedEventHandler(MailSendCompleted);//这里注册邮件发送完成的事件响应方法
            //simple send异步发送
            client.SendAsync(mail, "testMail");//第二个参数会被传入事件SendCompletedEventHandler中,所以可以将邮件相关的信息放到第二个参数中,这样在邮件发送完成的响应事件方法中,就可以判断出完成发送的是哪封邮件了。
        }

下面是邮件发送完成的事件响应方法

        public void MailSendCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                label1.Text = "cancel";
            }
            else if (e.Error != null)
            {
                label1.Text = "error" + e.Error.Message;
            }
            else
            {
                label1.Text = "completed" + e.UserState.ToString();//UserState是client.SendAsync()方法中的第二个参数
            }
        }

这些发送邮件的类使用起来比较简单,所以功能也很简单。比如想在邮件发送之前计算邮件的大小(一般是正文内容大小 加上 附件大小),或者是获取邮件发送中的进度等这些功能是没有的,或者说我没有找到有,而且我个人也认为这种封装程度高的类,使用方便,就是灵活性不够。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值