不管老方法还是新方法,老类还是新类,新架构还是老架构,融会贯通,温故总能知新!加油!

又来了,旧坑未填,新任务又来。
这次是要写一个定时发送邮件的小功能。更多可见就是邮件每年都会收到发送给你的生日祝福、周年庆时发送给你的书信、最新活动的通知信件…

一、我的环境

  • Window10
  • IIS 10.0
  • Visual Studio 2019(asp.net用4.5的框架)
  • SQL Server 2014 Management Studio

二、信箱的设置

邮箱开通SMTP协议(以163作为例子来)

1、开启POP3/SMTP服务


这里就不对IMAP和POP3的区别进行说明了,可以在邮箱点击“了解更多”自己去了解一下。

2、POP3/SMTP服务的知识点补充

  • POP3用于接收电子邮件:Post Office Protocol 3,邮局协议的第3个版本
  • SMTP用于发送电子邮件:Simple Mail Transfer Protocol,简单邮件传输协议。
    SMTP 认证,必须在提供了账户名和密码之后才可以登录 SMTP 服务器,使用户避免受到垃圾邮件的侵扰。

三、程序创建

1、创建控制台应用程序

命名:send_mail

2、System.Net.Mail命名空间的相关类

① MailMessage:
提供属性和方法来创建一个邮件消息对象,即邮件内容。

  • From:发送邮件的地址
  • To:接收邮件的地址
  • Subject:邮件的标题
  • Body:邮件正文
  • Priority:邮件的优先级(分别为为High,Low,Normal)
  • Attachments:电子邮件的数据的附件集合
  • Bcc:密送地址
  • Cc:抄送地址
  • SubjectEncoding:电子邮件的主题内容使用的编码
  • IsBodyHtml:邮件正文是否为 Html 格式的值

② Attachment:
邮件附件。

③ SmtpClient:
将电子邮件传输到您指定用于邮件传送的 SMTP 主机。

  • DeliveryMethod:指定如何处理待发的电子邮件
  • Host:SMTP 事务的主机的名称或 IP 地址
  • Port:端口,不填为默认端口
  • Timeout:超时时间
  • Credentials:设置用于验证发件人身份的凭据

3、相关代码,初阶


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
using System.Net;namespace send_mail
{class Program{static void Main(string[] args){//构建邮件的消息对象,即邮件内容MailMessage message = new MailMessage();//From设置电子邮件的发件人地址message.From = new MailAddress("发件人邮箱@163.com");//TO获取电子邮件收件人的地址,Add向集合添加电子邮件地址列表message.To.Add("收件人1@qq.com");message.To.Add("收件人2@qq.com");//电子邮件的主题行message.Subject = "这是邮件的标题";//电子邮件的内容message.Body = "这是邮件的内容,巴拉巴拉~";//电子邮件的附件Attachment attachment = new Attachment(@"F:\\My_Code\\send_mail_test.txt");message.Attachments.Add(attachment);//使用简单邮件传输协议(SMPT)来发送电子邮件SmtpClient smtpClient = new SmtpClient();//SMTP事务的主机名或IP地址smtpClient.Host = "smtp.163.com";//验证发件人的身份凭证smtpClient.Credentials = new NetworkCredential("发件人邮箱@163.com", "开启邮箱POP3/SMTP服务后获得的授权密码");smtpClient.Send(message);}}
}

以上是163邮箱作为发送邮箱的例子,QQ邮箱的用法其实也是一样的,就是把SMTP事务的主机名或IP地址【smtpClient.Host = “smtp.163.com”】,修改城QQ邮箱的主机【smtpClient.Host = “smtp.qq.com”】就行了,当然,发送邮箱也得是QQ邮箱。

4、相关代码,进阶

上面收件人只有少数的情况,可以直接写在cs中,但是如果发件邮箱需要方便替换、收件人/人数并不是固定的,并且邮件内容也不是固定的呢?
很简单,需要方便修改的话就写在配置文件,收件人不固定的话就从数据库取数出来再循环赋值,内容不固定就给一个填写框填写邮件内容咯~

① 数据库user_info表


从表中取电子邮箱地址,循环发送。(这里的电子邮箱地址肯定是乱写的啦~)

② App.config配置文件

  <appSettings><add key="mail_from" value="发件人@163.com" /><add key="mail_from_smtp" value="发件人邮箱smtp授权码" /><add key="mail_to_worry" value="接受报错的处理人邮箱@qq.com" /></appSettings>

③ Program.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
using System.Net;
using System.Configuration;namespace send_mail
{class Program{//发送邮件的邮箱地址private static string mail_from = ConfigurationManager.AppSettings["mail_from"].ToString();//发送邮件的邮箱SMTP授权码private static string mail_from_smtp = ConfigurationManager.AppSettings["mail_from_smtp"].ToString();//接受报错处理的收件人private static string mail_to_worry = ConfigurationManager.AppSettings["mail_to_worry"].ToString();static void Main(string[] args){string empl_name, empl_mail, str;List<empl_info_model> list = null;//从数据库取出收件人的姓名、邮箱地址list = empl_info_DAL.get_empl_info();try{if (list != null){for (int i = 0; i < list.Count; i++){empl_name = list[i].empl_name;empl_mail = list[i].empl_mail;//发送生日祝福邮件,向send_email传mail_title、mail_body、mail_tosend_email(empl_name+"生日快乐", "祝你生日快乐,巴拉巴拉的祝福语~", empl_mail);}}}catch (Exception ex)//发送失败时,报错信息发送邮件通知管理员{str = "生日祝福邮件发送失败:"+"\r\n" + ex;send_email("生日祝福邮件发送失败", str, mail_to_worry);}}/// <summary>/// 发送邮件/// </summary>/// <param name="mail_title">邮件标题</param>/// <param name="mail_body">邮件内容</param>/// <param name="amil_to">邮件接收信箱</param>public static void send_email(string mail_title, string mail_body, string mail_to){//构建邮件的消息对象,即邮件内容MailMessage message = new MailMessage();//From设置电子邮件的发件人地址message.From = new MailAddress(mail_from);//TO获取电子邮件收件人的地址,Add向集合添加电子邮件地址列表message.To.Add(mail_to);//电子邮件的主题行message.Subject = mail_title;//电子邮件的内容message.Body = mail_body;//电子邮件的附件Attachment attachment = new Attachment(@"F:\\My_Code\\send_mail_test.txt");message.Attachments.Add(attachment);//使用简单邮件传输协议(SMPT)来发送电子邮件SmtpClient smtpClient = new SmtpClient();//SMTP事务的主机名或IP地址smtpClient.Host = "smtp.163.com";//验证发件人的身份凭证smtpClient.Credentials = new NetworkCredential(mail_from, mail_from_smtp);smtpClient.Send(message);}}
}

话有一些代码中的empl_info_model模型、empl_info_DAL数据层连接类、empl_info_DAL.get_empl_info获取数据库中user_info表的用户名、用户邮箱…太多了就不一一贴代码了,发一个资源包吧?

5、其它相关问题

但是!到微软的官网,会发现!

额…如果只是简单地用于发送邮件,SmtpClient类还是适用的,微软也不可能完全撤掉这个方法吧,毕竟还有那么多需要兼容的旧系统不是,哈~
如果用.net core做新项目的话,还是用官网推荐使用的MailKit吧,适用更多的电子邮件标准。(目前就暂不研究了。)

四、定时任务

我就直接使用win自带的定时任务了。

步骤:
win10:win+x→计算机管理→任务计划程序→创建基本任务…

创建定时任务的各个步骤就不一一演示了,如图。
启动程序时添加的【程序或脚本】为上面send_mail项目中生成的Debug中的exe程序。

五、结束

查看邮箱,发现已经收到了我的生日祝福。

就这样,定时给你发送生日祝福邮件的小功能就完成啦!碎觉!

【Asp.net】C#如何发送电子邮件
记录,打板!

【.net】C#如何发送电子邮件相关推荐

  1. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件

    亚马逊ses如何发qq by Kangze Huang 黄康泽 使用Amazon SES发送电子邮件 (Sending emails with Amazon SES) 完整的AWS Web样板-教程3 ...

  2. php mail函数_PHP发送电子邮件函数mail详解

    重要:本文最后更新于2019-10-09 08:49:07,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. PHP作为一门使用广泛的脚本语言,经过这么多年发展已经非常完善了,发送电子 ...

  3. 如何使用PHP发送电子邮件?

    本文翻译自:How to send an email using PHP? I am using PHP on a website and I want to add emailing functio ...

  4. 如何从我的Android应用程序发送电子邮件?

    我正在为Android编写应用程序. 如何从中发送电子邮件? #1楼 简单尝试这个 public void onCreate(Bundle savedInstanceState) {super.onC ...

  5. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  6. C# 发送电子邮件(含附件)用到的类 system.web.mail

    主要是用到了System.Web.Mail命名空间,用到了此空间的三个类,分别是: ●MailMessage类,用于构造电子邮件 ●MailAttachment类,用于构造电子邮件附件 ●SmtpMa ...

  7. net类库中发送电子邮件的方法总结

    发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址,通常验证电子邮件真实有 ...

  8. iphone发送邮件html,iPhone使用smtp服务器发送电子邮件?

    在我的应用程序中,我能够使用smtp服务器发送电子邮件,因为我输入了正确的电子邮件ID和密码. 但当我输入我的Gmail或雅虎帐户详细信息时,我无法发送邮件. 因为我设置了relayHost = @& ...

  9. linux发邮件安装什么意思,linux – 如何找出安装/发送电子邮件的邮件程序?

    我正在尝试找出在我的服务器上发送电子邮件的电子邮件程序(如果有的话).我的雇主有几台服务器,其中大部分使用sendmail,但在我们的两台服务器上,我找不到电子邮件程序,但电子邮件已经发送了吗?我不想 ...

  10. php发送gmail,使用GMail SMTP服务器从PHP页面发送电子邮件

    我试图通过Gmail的SMTP服务器从一个PHP页面发送电子邮件,但是我得到了这个错误: 身份验证失败[SMTP:SMTP服务器不支持身份验证(代码:250,响应:mx.google.com at y ...

最新文章

  1. LNMP网站并发计算
  2. Linux USB 驱动开发(一)—— USB设备基础概念
  3. 2021-04-15 深入理解SLAM技术 【2】 SLAM的框架
  4. js原生操作select、radio 、checkbox
  5. ASP.NET Core SignalR:集线器Hub
  6. 每天一个JavaScript实例-动态省份选择城市
  7. NumPy常用属性及方法
  8. sql相同顺序法和一次封锁法_不到75行代码,导出最高法指导案例到excel(一)...
  9. 计算机设计思想 —— 解耦(分离)与内聚
  10. 2022百度之星第一场初赛
  11. Oracle11.2.0.4升级补丁包
  12. 学术答辩PPT模板推荐
  13. EMD/EEMD 经验模态分解/集合经验模态分解
  14. NYOJ 小明的存钱计划
  15. 孙武不夜城出新“招” 各路豪杰来热闹
  16. matlab不连续分段函数,分段函数画出的曲面不连续如何办?
  17. 代码格式化脚本CodeFormat
  18. 三大巨头遥遥领先!亚马逊云服务领跑亚太第一,阿里微软紧随其后,腾讯谷歌百度进入前六 | 美通社头条...
  19. 加勒比海盗船——最优解转载问题c++
  20. 《剑指offer》专题—算法训练 day02

热门文章

  1. [leetcode]934. Shortest Bridge
  2. vue+Gantt如何在vue中使用甘特图,绘制任务进度
  3. vue.js根据数据循环生成表格_Vue Elenent实现表格相同数据列合并
  4. Scrum板与Kanban如何抉择?敏捷工具:SHSYdsjgyadtgad
  5. element Descriptions 内容超出隐藏 Tooltip展示完整内容
  6. kernel网络之RSS,RPS,RFS和XPS
  7. 如何注册网站域名?申请域名详细教程
  8. 英伟达NVIDIA系列显卡GPU CUDA数据对比排行
  9. 名校400门免费人文社科公开课视频合集!
  10. 程序员该如何释放压力