C# 发送邮件整理,包括控制台程序、WPF、WebForm 及 ASP.NET MVC

  发送邮件使用SMTP服务器,有两种方案,一种是使用IIS的SMTP功能;另一种是直接使用邮件供应商的SMTP,比如Gmail、Sina、QQ等,使用这些SMTP服务器必须得注册帐号,一般可以直接用邮箱及密码,但是有些邮箱必须开启POP3/SMTP服务才可以,比如QQ邮箱默认是关闭的,可以在“设置”->“账户”里面找到。我今天整理的都是用的第二种。

  早期的.NET版本用的是 System.Web.Mail 类提供的功能来发邮件;2.0版本推出了 System.Net.Mail 类来代替 System.Web.Mail ,但是我在 WebForm 里面使用的时候用System.Net.Mail 老是触发异常,后来改用 System.Web.Mail 才成功了,可以看下我代码里的区别;ASP.NET MVC 3 提供了 WebMail 类来发送邮件,更加方便。

  控制台程序、WPF、WebForm 及 ASP.NET MVC 我都测试了一下,控制台程序和 WPF 都用了 System.Net.Mail ,WebForm 和 ASP.NET MVC 都可以用 System.Web.Mail ,而 ASP.NET MVC 3 直接用 WebMail 更方便。下面我把代码分别贴出来。

  控制台程序:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Net.Mail;//添加引用
 6
 7 namespace SendEmail
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Program p = new Program();
14             bool flag = p.SendEmail();
15             if (flag)
16             {
17                 Console.Write("Success !");
18             }
19
20             Console.Read();
21         }
22
23         public bool SendEmail()
24         {
25             MailMessage msg = new MailMessage();
26             msg.To.Add("[email protected]");//邮件接收者的帐号
27             msg.From = new MailAddress("[email protected]", "nickname", System.Text.Encoding.UTF8);//发送邮件的帐号及显示名称和字符编码
28             msg.Subject = "Subject";//邮件标题
29             msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
30             msg.Body = "Content";//邮件内容
31             msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
32             msg.IsBodyHtml = false;//是否是HTML邮件
33             msg.Priority = MailPriority.High;//邮件优先级
34
35             SmtpClient client = new SmtpClient();
36             client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");//注册的邮箱和密码,就QQ邮箱而言,如果设置了独立密码,要用独立密码代替密码
37             client.Host = "smtp.qq.com";//QQ邮箱对应的SMTP服务器
38             object userState = msg;
39             try
40             {
41                 client.SendAsync(msg, userState);
42                 return true;
43             }
44             catch (Exception ex)
45             {
46                 Console.WriteLine(ex.Message);
47                 return false;
48             }
49         }
50     }
51 }

WPF:

 1    using System;
 2    using System.Collections.Generic;
 3    using System.Linq;
 4    using System.Net.Mail;//添加引用
 5    using System.Text;
 6    using System.Windows;
 7    using System.Windows.Controls;
 8    using System.Windows.Data;
 9    using System.Windows.Documents;
10    using System.Windows.Input;
11    using System.Windows.Media;
12    using System.Windows.Media.Imaging;
13    using System.Windows.Navigation;
14    using System.Windows.Shapes;
15
16    namespace WPFSendMail
17    {
18        /// <summary>
19        /// MainWindow.xaml 的交互逻辑
20        /// </summary>
21        public partial class MainWindow : Window
22        {
23            public MainWindow()
24            {
25                InitializeComponent();
26            }
27
28            private void Button_Click(object sender, RoutedEventArgs e)
29            {
30                bool flag = SendMail();
31                if (flag)
32                {
33                    MessageBox.Show("Success !","Tips");
34                }
35            }
36
37            public bool SendMail()
38            {
39                MailMessage message = new MailMessage();
40                message.To.Add("       @qq.com");
41                message.From = new MailAddress("       @qq.com","nickname",Encoding.UTF );
42                message.Subject = "Sending e-mail in WPF !";
43                message.SubjectEncoding = Encoding.UTF ;
44                message.Body = "Awesome";
45                message.BodyEncoding = Encoding.UTF ;
46                message.IsBodyHtml = false;
47                message.Priority = MailPriority.Normal;
48                Attachment att = new Attachment("text.txt");//添加附件,确保路径正确
49                message.Attachments.Add(att);
50
51                SmtpClient smtp = new SmtpClient();
52                smtp.Credentials = new System.Net.NetworkCredential("       @qq.com","password");
53                smtp.Host = "smtp.qq.com";
54                object userState = message;
55
56                try
57                {
58                    smtp.SendAsync(message,userState);
59                    return true;
60                }
61                catch (Exception ex)
62                {
63                    MessageBox.Show(ex.Message,"Tips");
64                    return false;
65                }
66            }
67        }
68    }

Winform:

 1    using System;
 2    using System.Collections.Generic;
 3    using System.Linq;
 4    using System.Text;
 5    using System.Web;
 6    using System.Web.UI;
 7    using System.Web.UI.WebControls;
 8    using System.Web.Mail;//添加引用
 9
10    namespace WebFormSendEmail
11    {
12        public partial class WebForm  : System.Web.UI.Page
13        {
14            protected void Page_Load(object sender, EventArgs e)
15            {
16
17            }
18
19            protected void Button _Click(object sender, EventArgs e)
20            {
21                bool flag = SendMail();
22                if (flag)
23                {
24                    Response.Write("<script>alert(‘Success !‘);</script>");
25                }
26            }
27
28            public bool SendMail()
29            {
30                MailMessage message = new MailMessage();
31                message.To = "       @qq.com";
32                message.From = "       @qq.com";
33                message.Subject = "Sending e-mail in Web !";
34                message.Body = "Awesome";
35                //基本权限
36                message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", " ");
37                //用户名
38                message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "       @qq.com");
39                //密码
40                message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password");
41
42                SmtpMail.SmtpServer = "smtp.qq.com";
43                try
44                {
45                    SmtpMail.Send(message);
46                    return true;
47                }
48                catch (Exception ex)
49                {
50                    Response.Write(ex.Message);
51                    return false;
52                }
53            }
54        }
55    }

MVC:

 1         try
 2         {
 3             WebMail.SmtpServer = "smtp.qq.com";
 4             WebMail.SmtpPort = 25;//端口号,不同SMTP服务器可能不同,可以查一下
 5             WebMail.EnableSsl = false;//禁用SSL
 6             WebMail.UserName = "[email protected]";
 7             WebMail.Password = "password";
 8             WebMail.From = "[email protected]";
 9             WebMail.Send("[email protected]","Subject",“Content");
10         }
11         catch (Exception)
12         {
13
14         }  
时间: 2024-10-14 01:28:25

C# 发送邮件整理,包括控制台程序、WPF、WebForm 及 ASP.NET MVC的相关文章

关于ASP.NET WebForm与ASP.NET MVC的比较

WebForm的理解 1. WebForm概念 ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型(event-drivenGUI),隐藏了HTTP.HTML.JavaScript等细节,将用户界面构建成一个服务器端的树结构控件(Control),每个控件通过ViewState保持自己的状态,并自动把客户端的js事件和服务器端的事件联系起来.这种做法使得开发WinForm和WebForm程序具有相近的开发体验,填平WinForm开发(有状态.面向对象的)和WebFor

ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深入的了解,每个工程里应该写什么样的代码,代码如何组织以及ABP是如何在工程中发挥作用的. 源文档地址:https://www.codeproject.com/Articles/791740/Using-AngularJs-ASP-NET-MVC-Web-API-and-EntityFram 源码可以

重建程序员能力(3)-asp.net MVC框架增加Controller

    MVC在微软中提供的框架目前只是发现是asp.net用.另 8年前,我做了个MVC的Windows APP框架如果有兴趣我日后会介绍给大家,欢迎大家关注.MVC的概念网站上有很多,大家去查阅一定能看到,这里不重复讲述了.这里只是介绍怎么加. 1. 找到asp.net项目,然后好到Controller文件夹,右键展开菜单 [添加] 展开下一层菜单,然后选择[控制器]. 2.在对话框中有3个选项,这次为表述方便先用空的MVC5控制器 3.填写一下控制器的名称按添加即可. 需要注意的是Cont

使用区域组织 ASP.NET MVC 应用程序

MVC 模式可将应用程序的模型(数据)逻辑与其呈现逻辑和业务逻辑分离. 在 ASP.NET MVC 中,这种逻辑分离还在项目结构中以物理方式实现,在该项目结构中,控制器和视图保存在使用命名约定定义关系的文件夹中. 此结构可满足大多数 Web 应用程序的需求. 但是,一些应用程序可能具有大量控制器,而每个控制器又可能与若干个视图关联. 对于这些类型的应用程序,默认的 ASP.NET MVC 项目结构可能不实用. 为了满足大型项目的需要,ASP.NET MVC 允许您将 Web 应用程序划分为较小单

ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构

APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架提供用于创建 Web 应用程序的 ASP.NET Web 窗体模式的替代模式. ASP.NET MVC 框架是一个可测试性非常高的轻型演示框架,(与基于 Web 窗体的应用程序一样)它集成了现有的 ASP.NET 功能,如母版页和基于成员资格的身份验证. MVC 框架在 System.Web.Mvc

学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

首先运行Visual Studio Express 2012或Visual Web Developer2010 Express或Visual Studio2010/SP1.Visual Studio是一个集成开发环境. 可以使用两种方式来创建新项目. 1) 菜单"文件->新建-->项目"来新建项目. 2) 第二种方法是从开始页面中选择"新建项目",如下图. 创建第一个ASP.NET MVC应用程序 接下来创建我的第一个ASP.NET MVC应用程序,在创

VS2017新建windows控制台程序打印中文乱码问题

最近刚换上VS2017,由于手头又要做个MFC的程序,所以写控制台程序做功能测试,然后发现居然乱码了. 于是用VS2017新建windows控制台应用程序,在main函数种加一句printf("你好");后,运行结果依然乱码 用notapad++打开该文件后,点击菜单栏的编码一项,发现是UTF-8无BOM格式编码,然后改成以ANSI格式编码后 也就是说VS是用UTF-8来编码代码文件的,编译出的程序中字符串也是按照UTF-8编码的,而控制台却是按照ANSI编码来理解的. 打个比方,A用

C、C++控制台程序、Windows API程序、MFC程序理解与比较

在编程语言中,函数是一个很重要的概念,其身影无处不在.在面向过程的编程方式中,函数更是程序的基本构建模块,在面向对象的编程方式中,函数演变为类或对象的成员(当然也可以使用与类无关的函数).函数由函数头和函数体组成.函数头包括域属性(如external.static或类域).返回值类型.函数名.及参数.域属性包括其在多文件编程中的可见范围,是否是属于某一个类的成员?返回值类型是指函数返回的值的具体数据类型(可以理解为函数输出的一部分).函数名是函数保存在内存代码区的首地址,用于函数的调用及函数指针

asp.net mvc引用控制台应用程序exe

起因:有一个控制台应用程序和一个web程序,web程序想使用exe程序的方法,这个时候就需要引用exe程序. 报错:使用web程序,引用exe程序 ,vs调试没有问题,但是部署到iis就报错,如下: 未能加载文件或程序集“Test.YiXiu”或它的某一个依赖项.试图加载格式不正确的程序. 处理办法: 修改控制台程序的输出方式,修改为[类库] 操作步骤: 在exe项目上右击=>属性=>输出类型,选择 类库