C#实现收发邮件功能
作者:springsnow 发布时间:2021-09-20 19:40:46
标签:C#,邮件
一、服务端
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);//定义 *
server.Start();//启动 *
byte[] buffer = new byte[1024]; //创建一个容器用于接受数据
string data = null;
while (true)
{
//等待客户端连接过来
TcpClient client = server.AcceptTcpClient();
//Task<TcpClient> task1 = server.AcceptTcpClientAsync();
//Socket socket = server.AcceptSocket();
//Task<Socket> task2 = server.AcceptSocketAsync();
//server.Pending();
//取得客户端发送过来的数据
int len = client.Available;//获取已经从网络流接收且可供读取的数据量
NetworkStream nstream = client.GetStream(); //返回一个可供读写的网络流
int bytesRead;
do
{
bytesRead = nstream.Read(buffer, 0, buffer.Length); //接收消息
data = Encoding.UTF8.GetString(buffer, 0, bytesRead); //先将接收到的数据转化可输出的字符串类型
Console.WriteLine("收到消息:" + data); 输出收到的信息
byte[] msg = Encoding.UTF8.GetBytes(data.ToUpper());
nstream.Write(buffer, 0, buffer.Length);//发送消息
} while (bytesRead > 0);
nstream.Close(); //1.先释放流的数据
client.Close(); //2.再释放客户端的连接数据
}
server.Stop(); //3.关闭监听
二、客户端
TcpClient client = new TcpClient("127.0.0.1", 13000);//连接服务器
//或者
// TcpClient client=new TcpClient();
// client.Connect("127.0.0.1", 13000);
NetworkStream nstream = client.GetStream();
//---其他同服务端
nstream.Close(); //1.先释放流的数据
client.Close(); //2.再释放客户端的连接数据
三、发送邮件
1、使用MailMessage和SmtpClient发送邮件。
在Wince中,可以使用OpenNetCF.Net.Mail类发送邮件。
MailMessage mailMessage = new MailMessage
{
//发件人
From = new MailAddress("***@163.com", "您的朋友", Encoding.UTF8),
Priority = MailPriority.High,
//邮件主题
SubjectEncoding = Encoding.UTF8,
Subject = "Hello",
};
//收件人 可以添加多个收件人
mailMessage.To.Add(new MailAddress("137***126@qq.com"));
//mailMessage.CC 获取包含此电子邮件的抄送(CC)收件人的地址集合
//邮件正文
mailMessage.IsBodyHtml = true;//如果要发送html格式的消息,需要设置这个属性
mailMessage.BodyEncoding = Encoding.UTF8;
mailMessage.Body = "<p style='color:red;font-size:14px;'>邮件测试</p>";
//邮件内容即消息正文中中显示图片 ,需要为图片指明src='cid:idname(资源id)'
AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src='cid:zfp'/>", null, "text/html");
//然后在LinkedResource加入文件的绝对地址,和ContentType 例如image/gif,text/html...与http请求的响应报文中的ContentType一致
LinkedResource lr = new LinkedResource("1.gif", "image/gif");
//绑定上文中指定的idname
lr.ContentId = "zfp";
//添加链接资源
htmlBody.LinkedResources.Add(lr);
mailMessage.AlternateViews.Add(htmlBody);
//发送附件 指明附件的绝对地址
Attachment attachment = new Attachment("1.txt");
mailMessage.Attachments.Add(attachment);
//创建邮件发送客户端
SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25)
{
//指定邮箱账号和密码
Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe")
};
//指定如何发送电子邮件
sendClient.DeliveryMethod = SmtpDeliveryMethod.Network;
//指定使用使用安全套接字ssl加密的链接
sendClient.EnableSsl = true;
sendClient.Send(mailMessage);
//或者可以一步发送
sendClient.SendAsync(mailMessage, null);
2、利用TcpClient类收取pop3邮件
TcpClient client = new TcpClient("mail.**.com", 443);
//连接
NetworkStream ns = client.GetStream();
StreamReader sr = new StreamReader(ns, Encoding.Default);
string result = sr.ReadLine(); //返回OK或ER
//登陆
StreamWriter sw = new StreamWriter(ns);
sw.WriteLine("user b**");
sw.Flush();
result = sr.ReadLine();
sw.WriteLine("pass **");
sw.Flush();
result = sr.ReadLine();
//获取邮件数量
sw.WriteLine("stat");
sw.Flush();
result = sr.ReadLine();//result.split(' ')[1]表示邮件数量
//获取邮件信息
sw.WriteLine("top 1 0 ");
sw.Flush();
result = sr.ReadLine();
while (true)
{
result = sr.ReadLine();
if (result == ".") break;
if (result.Length > 4 && result.Substring(0, 8) == "Subject:")
{
//result为标题,乱码用Base64解码
Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(result));
}
}
来源:https://www.cnblogs.com/springsnow/p/9433990.html
0
投稿
猜你喜欢
- 前言小伙伴们在使用C#开发时,可能需要将一些信息写入到txt,这里就给大家介绍几种常用的方法。方法:1.将由字符串组成的数组写入txt此种方
- Java发红包案例,供大家参考,具体内容如下首先我们需要分析这个代码的架构是什么,需要什么类组成等。我们需要建立4个类,这4个类分别是用户类
- 首先,查到java里文件重命名的方法为:renameTo();我将180张图片放在d:\\backup下,用下面的程序进行重命名:publi
- 配置java环境变量这里是将环境变量配置在etc/profile,即为所有用户配置JDK环境。sudo vi /etc/profile配置环
- 前言Spring框架中的BeanFactory接口和FactoryBean接口因为名称相似,老是容易搞混淆,而且也是面试过程中经常会碰到的一
- 一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):1.Java自带的java.util.Timer类,这个类允许你调度一
- 悲观锁、乐观锁简介: 悲观锁:同步操作。即用户A在操作某条数据时,为其上锁,限制其他用户操作,用户A操作完成提交事务后其他用户方可
- 题目描述:一个农夫带着一匹狼、一只羊、一颗白菜要过河,只有一条船而且农夫每次最多只能带一个动物或物品过河,并且当农夫不在的时候狼会吃羊,羊会
- 1、配置maven环境变量,将maven安装的bin⽬录添加到path路径中(此电脑->属性->高级系统设置->环境变量-
- 有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?添加依赖<dependencies>
- Navigator 的 push 和 pop方法Navigator 导航器的 push 和 pop 方法可以携带参数在页面间传递,其他变形的
- 基础知识介绍: @RequestBody主要用来接收前端传递给后端的json字符串中的
- 我想每个写项目的人,都肯定会遇到控制权限这个问题.例如这个这个链接只能管理员访问,那个链接丫只能超级管理员访问等等,实现方式也有多种多样,控
- 可以根据执行时间打印sql语句,打印的sql语句是带参数的,可以拷贝到查询分析器什么的直接运行package mybatis;import
- JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其
- 前言在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重
- 1、什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thr
- 基于SSM框架的仓库管理系统功能:系统操作权限管理。系统提供基本的登入登出功能,同时系统包含两个角色:系统超级管理员和普通管理员,超级管理员
- SSO :同一个帐号在同一个公司不同系统上登陆 使用SpringSecurity实现类似于SSO登陆系统是十分简单的 下面我就搭
- 一、前言文稿扫描大家用的都比较频繁、想是各种证件、文件都可以通过扫描文稿功能保存到手机。相比直接拍照,在扫描文稿时,程序会对图像进行一些矫正