C#发送邮箱实现代码
作者:独钓寒江雪丶 发布时间:2022-04-16 11:57:57
标签:C#,发送邮箱
之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了。
之后有整理了一下,写了一个类。直接给类传递信息,就可以发送了。
这里还需要说明的是,发送邮箱需要开通POP3/SMTP服务,否则QQ邮箱,网易邮箱等会报错。接收的邮箱就不用开通啦,开通方法百度一下就知道啦。
public static class EmailHelper
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="subject">邮件主题</param>
/// <param name="msg">邮件内容</param>
/// <param name="filePath">附件地址,如果不添加附件传null或""</param>
/// <param name="senderEmail">发送人邮箱地址</param>
/// <param name="senderPwd">发送人邮箱密码</param>
/// <param name="recipientEmail">接收人邮箱</param>
public static void SendMail(string subject, string msg, string filePath, string senderEmail, string senderPwd, params string[] recipientEmail)
{
if (!CheckIsNotEmptyOrNull(subject, msg, senderEmail, senderPwd) || recipientEmail == null || recipientEmail.Length == 0)
{
throw new Exception("输入信息无效");
}
try
{
string[] sendFromUser = senderEmail.Split('@');
//构造一个Email的Message对象
MailMessage message = new MailMessage();
//确定smtp服务器地址。实例化一个Smtp客户端
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp." + sendFromUser[1]);
//构造发件人地址对象
message.From = new MailAddress(senderEmail, sendFromUser[0], Encoding.UTF8);
//构造收件人地址对象
foreach (string userName in recipientEmail)
{
message.To.Add(new MailAddress(userName, userName.Split('@')[0], Encoding.UTF8));
}
if (!string.IsNullOrEmpty(filePath))
{
Attachment attach = new Attachment(filePath);
//得到文件的信息
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(filePath);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(filePath);
disposition.ReadDate = System.IO.File.GetLastAccessTime(filePath);
//向邮件添加附件
message.Attachments.Add(attach);
}
//添加邮件主题和内容
message.Subject = subject;
message.SubjectEncoding = Encoding.UTF8;
message.Body = msg;
message.BodyEncoding = Encoding.UTF8;
//设置邮件的信息
client.DeliveryMethod = SmtpDeliveryMethod.Network;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = false;
//如果服务器支持安全连接,则将安全连接设为true。
//gmail,qq支持,163不支持
switch (sendFromUser[1])
{
case "gmail.com":
case "qq.com":
client.EnableSsl = true;
break;
default:
client.EnableSsl = false;
break;
}
//设置用户名和密码。
client.UseDefaultCredentials = false;
//用户登陆信息
NetworkCredential myCredentials = new NetworkCredential(senderEmail, senderPwd);
client.Credentials = myCredentials;
//发送邮件
client.Send(message);
}
catch (Exception ex)
{
throw (ex);
}
}
/// <summary>
/// 验证所有传入字符串不能为空或null
/// </summary>
/// <param name="ps">参数列表</param>
/// <returns>都不为空或null返回true,否则返回false</returns>
public static bool CheckIsNotEmptyOrNull(params string[] ps)
{
if (ps != null)
{
foreach (string item in ps)
{
if (string.IsNullOrEmpty(item)) return false;
}
return true;
}
return false;
}
}
直接调用方法,传递需要发送的信息,就可以发送邮箱了。


猜你喜欢
- 前期准备首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足。技术方面的
- 此文通过一段代码来展示java获取相关参数的方法分享给大家:public static void main(String[] args) {
- 今天写程序的时候用到了附加属性,我是用VS内置的propa的代码段来实现的,代码如下:class Attach {
- 这篇文章主要介绍了跨域解决方案Jsonp原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 效果图:布局文件里包括了一个ImageView和两个Button控件,而在MainActivity了初始化控件。<?xml versi
- TypeScript简介:TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语
- Spring框架提供了事务管理的标准实现,且可以通过注解或者XML文件的方式声明和配置事务。通过异步事件的方式解耦服务调用,可以提高程序的响
- 本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:1、LoginWindow.java --登录窗口pac
- 本文实例为大家分享了使用ScrollRect制作翻页的具体代码,供大家参考,具体内容如下1.标准的层级结构 ScrollRect->V
- 属性CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调
- 带你手把手,用 java swing实现抖音上的表白程序1.准备工作a.需要下载一个带着swing插件的eclipseb.需要配置好JDKc
- 在java的开发中,java开发人员建议,尽量少用内部类,要把内部类提出他所处的那个类,单独生成一个类。直接来代码:package com.
- 前言在前面的学习中,我们基本了解了一些 Canvas 的绘制,那么这一章我们一起复习一下图片的绘制几种方式,和事件的简单交互方式。我们从易到
- 下面的每一步应该都必不可少:1、启动类继承这个类,并且重新configure这个方法,return builder.sources(Code
- Jmeter 执行Java 请求时,运行结束后报错,Tidying up remote @ Mon Feb 24 19:42:34 CST
- Java 中的运算符与 C 语言基本一致。1、算术运算符操作符描述例子+加法 : 相加运算符两侧的值A + B 等于 30-减法 : 左操作
- 本文实例讲述了C#实现Xml序列化与反序列化的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>/// X
- 一、需求来源app需要支持实现游客模式,启动后直接进入首页菜单,但是进入二级页则自动调用登录页面。总结需求就是父视图拦截子视图的响应事件,思
- 在Activity类的子类中直接复写下面三个方法://复写onCreateOptionsMenu()方法,弹出菜单栏
- springboot动态调用实现类定义规则的多种类型/** * 数据规则处理类型枚举 */public enum RuleType { &n