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


猜你喜欢
- 今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性。/**
- 用java实现循环队列的方法:1、添加一个属性size用来记录眼下的元素个数。目的是当head=rear的时候。通过size=0还是size
- 本文实例为大家分享了java批量解析微信dat文件的具体代码,供大家参考,具体内容如下微信图片默认路径:C:\Users\b-eet\Doc
- 一、隐藏标题栏 //隐藏标题栏 &
- 最近有小伙伴告诉我,在循环的判断条件只会计算一次,本金鱼不相信,于是就做了测试,本文记录我做的测试。先来写一个简单的代码, 就一个循环,循环
- 查询文档 & 基本操作为了方便学习, 本节中所有示例沿用上节的索引按照ID单个GET class_1/_doc/1查询结果:{ &n
- 工厂模式定义:提供创建对象的接口。为何使用工厂模式工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java
- 网上的教程大都是手动通过protoc编译, 比较难用给当前工程添加"Google.Protobuf"和"Grp
- 代码一/// <summary> /// 截断字符串 /// </su
- java操作Excel数据在 平时 可以使用IO流对Excle进行操作但是现在使用更加方便的第三方组件来实现使用场景1、将用户信息导出为Ex
- 第一部分代码(实体类)package com.wf.entity;public class Hehe{private int hehe_id
- 前言:Java异常处理的五个关键字:try、catch、finally、throw、throws抛出异常throw在编写程序时,我们必须要考
- 现象正常情况下修改完代码,运行项目就会立即生效的。但是突然有一天发现运行的还是老的代码,新代码根本没有生效。通过 mvn clean、 in
- String的字符串是不可变的,StringBuffer和StringBuilder是可变的String:是字符常量,适用于少量的字符串操作
- 在Word文档中,超链接是指在特定文本或者图片中插入的能跳转到其他位置或网页的链接,它也是我们在编辑制作Word文档时广泛使用到的功能之一。
- 提示:这里咱们要说的常量池,常量池就是咱们面试中所说的常量池,谈谈你对常量池的认识?面试官一问咱们就懵逼了,你要记得你脑子中有一张图!!!
- 1. 配置 * 具体步骤:编写一自定义 * 类实现接口 HandlerInterceptorHandlerInterceptor 接口: 可
- 在网上看到一些人写关于条形码的代码都很长,有的甚至拿来卖,所以查了下资料,希望能对大家有帮助。我的实现原理是:其实Windows本身就有一个
- ExpandableListView介绍 ExpandableListView的引入 ExpandableListVie
- 本文实例为大家分享了Android短信验证服务的具体代码,供大家参考,具体内容如下package com.skiers.demo_learn