C# - VS2019WinFrm程序通过SMTP方式实现邮件发送
前言
本篇主要记录:VS2019 WinFrm桌面应用程序通过SMTP方式实现邮件发送。作为Delphi转C#的关键一步,接下来将逐步实现Delphi中常用到的功能。
准备工作
搭建WinFrm前台界面
添加必要的控件,这里主要应用到GroupBox、Label、TextBox和Button,如下图
发件邮箱账户配置
准备一个邮箱,开启SMTP服务,并开启客户端授权密码(此处需要注意)。
核心代码构造SendEMail类
代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Mail;
- using System.Text;
- using System.Threading.Tasks;
- namespace SendMail
- {
- /// <summary>
- /// SMTP方式发送邮件
- /// 特别注意:这里的密码为客户端授权码,不是发送邮箱的密码
- /// </summary>
- class SendEMail
- {
- /// <summary>
- /// 发送邮件
- /// </summary>
- /// <param name="userEmailAddress">发件人地址</param>
- /// <param name="userName">发件人姓名(可为空)</param>
- /// <param name="password">密码</param>
- /// <param name="host">邮件服务器地址</param>
- /// <param name="port"></param>
- /// <param name="sendToList">收件人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
- /// <param name="sendCCList">抄送人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
- /// <param name="subject">主题</param>
- /// <param name="body">内容</param>
- /// <param name="attachmentsPath">附件路径</param>
- /// <param name="errorMessage">错误信息</param>
- public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port,
- string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage)
- {
- errorMessage = string.Empty;
- SmtpClient client = new SmtpClient();
- client.UseDefaultCredentials = true;
- client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用户名、客户端授权码*******特别注意:此处需要的是客户端授权码,不是邮箱密码*******
- client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
- client.Host = host;//邮件服务器
- client.Port = port;//端口号 非SSL方式,默认端口号为:25
- MailMessage msg = new MailMessage();
- //加发件人
- foreach (string send in sendToList)
- {
- msg.To.Add(send);
- }
- //加抄送
- foreach (string cc in sendCCList)
- {
- msg.CC.Add(cc);
- }
- //在有附件的情况下添加附件
- if (attachmentsPath != null && attachmentsPath.Length > )
- {
- foreach (string path in attachmentsPath)
- {
- var attachFile = new Attachment(path);
- msg.Attachments.Add(attachFile);
- }
- }
- msg.From = new MailAddress(userEmailAddress, userName);//发件人地址
- msg.Subject = subject;//邮件标题
- msg.Body = body;//邮件内容
- msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
- msg.IsBodyHtml = true;//是否是HTML邮件
- msg.Priority = MailPriority.High;//邮件优先级
- try
- {
- client.Send(msg);
- return true;
- }
- catch (System.Net.Mail.SmtpException ex)
- {
- errorMessage = ex.Message;
- return false;
- }
- }
- }
- }
实现效果
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
C# - VS2019WinFrm程序通过SMTP方式实现邮件发送的更多相关文章
- Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送
laravel5.5 邮件驱动 Laravel 支持多种邮件驱动,包括 smtp.Mailgun.Maildrill.Amazon SES.mail 和 sendmail.Mailgun . Mail ...
- C# 通过smtp服务器进行邮件发送 MailHelper
C# 通过smtp服务器进行邮件发送 MailHelper.cs using System; using System.Data; using System.Configuration; using ...
- 用WP SMTP插件实现邮件发送功能
WordPress本身是采用mail()函数发邮件的,但是这样发出的邮件很容易被放入垃圾箱,很多主机商(特别是Windows主机)为了避免用户滥发邮件直接禁用了mail()函数,还有些云计算平台(比如 ...
- smtp ssl模式邮件发送与附件添加
#!/usr/bin/python3 import os import smtplib from email.mime.text import MIMEText from email.mime.mul ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- 结合ABP源码实现邮件发送功能
1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...
- JavaMail如何保证邮件发送成功
使用过JavaMail的api发送邮件的人可能会有这样一个疑惑:我如何知道我调用该api发送的邮件是否成功呢?一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是Java ...
- .NET开发邮件发送功能
.NET开发邮件发送功能 今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知 ...
- SpringBoot集成邮件发送
一:简述 在日常中的工作中难免会遇到程序集成邮件发送功能.接收功能:此篇文章我将使用SpringBoot集成邮件发送功能和接收功能:若对邮件一些基本协议和发送流程不懂的请务必参考我之前写的博客或者浏览 ...
随机推荐
- [转]C++字符串操作函数_tcschr、_tcsrchr
原文出处:https://blog.csdn.net/eickandy/article/details/50083169 C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,本 ...
- JavaScript 正则表达式 初探
JavaScript 正则表达式 正则表达式是构成搜索模式的字符序列 搜索模式可用于文本搜索和文本替换操作 使用正则 字符串方法 在JavaScript中,正则表达式常常用两个字符串方法: searc ...
- Sublime操作
快速搭建HTML模版:左下角的纯文本编程HTML语言,然后输出!(感叹号)或者html:5,再按Tab键. 快速创建html标签: div#top>(div.top-left>div.li ...
- bayaim_今晚打老虎
bayaim_2018年11月22日11:01:14 <<<--- 再牛逼的肖邦,也尼玛弹奏不出我内心的悲伤.--->>> 艹,今天想骂人,艹TMD自己,不小心把自 ...
- win10连接共享打印机
一.在运行中输入“\\共享打印机的主机ip”. 二.如果出现下面弹窗: 1.按Win键弹出开始菜单,直接在键盘上按zucelue,这个时候开始菜单里会检索到“编辑组策略”这个程序,按回车运行该程序.2 ...
- C++中各种输入函数的用法总结
1.scanf()函数 原型:int scanf(const char *restrict format,......); 入口参数:第一个参数是格式字符串,它指定了输入的格式,......格式化后的 ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- pandas 排序之 sort_values,reindex,reset_index, sort_index
如果想按照自己的方式排序ind = 行索引data= data[ind] ind = data.sum(axis=1).sort_values(ascending=False).index data ...
- JavaScript中的数组Array
抄自:https://www.jianshu.com/p/7e160067a06c js中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等:并且数组的方法还有原型方法和从obje ...
- es6 的类 class
1.ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类. 2. //定义类 class Point { constructor(x, y ...