C#實(shí)現(xiàn)收發(fā)郵件功能
一、服務(wù)端
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);//定義監(jiān)聽器
server.Start();//啟動監(jiān)聽器
byte[] buffer = new byte[1024]; //創(chuàng)建一個(gè)容器用于接受數(shù)據(jù)
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();
//取得客戶端發(fā)送過來的數(shù)據(jù)
int len = client.Available;//獲取已經(jīng)從網(wǎng)絡(luò)流接收且可供讀取的數(shù)據(jù)量
NetworkStream nstream = client.GetStream(); //返回一個(gè)可供讀寫的網(wǎng)絡(luò)流
int bytesRead;
do
{
bytesRead = nstream.Read(buffer, 0, buffer.Length); //接收消息
data = Encoding.UTF8.GetString(buffer, 0, bytesRead); //先將接收到的數(shù)據(jù)轉(zhuǎn)化可輸出的字符串類型
Console.WriteLine("收到消息:" + data); 輸出收到的信息
byte[] msg = Encoding.UTF8.GetBytes(data.ToUpper());
nstream.Write(buffer, 0, buffer.Length);//發(fā)送消息
} while (bytesRead > 0);
nstream.Close(); //1.先釋放流的數(shù)據(jù)
client.Close(); //2.再釋放客戶端的連接數(shù)據(jù)
}
server.Stop(); //3.關(guān)閉監(jiān)聽二、客戶端
TcpClient client = new TcpClient("127.0.0.1", 13000);//連接服務(wù)器
//或者
// TcpClient client=new TcpClient();
// client.Connect("127.0.0.1", 13000);
NetworkStream nstream = client.GetStream();
//---其他同服務(wù)端
nstream.Close(); //1.先釋放流的數(shù)據(jù)
client.Close(); //2.再釋放客戶端的連接數(shù)據(jù)三、發(fā)送郵件
1、使用MailMessage和SmtpClient發(fā)送郵件。
在Wince中,可以使用OpenNetCF.Net.Mail類發(fā)送郵件。
MailMessage mailMessage = new MailMessage
{
//發(fā)件人
From = new MailAddress("***@163.com", "您的朋友", Encoding.UTF8),
Priority = MailPriority.High,
//郵件主題
SubjectEncoding = Encoding.UTF8,
Subject = "Hello",
};
//收件人 可以添加多個(gè)收件人
mailMessage.To.Add(new MailAddress("137***126@qq.com"));
//mailMessage.CC 獲取包含此電子郵件的抄送(CC)收件人的地址集合
//郵件正文
mailMessage.IsBodyHtml = true;//如果要發(fā)送html格式的消息,需要設(shè)置這個(gè)屬性
mailMessage.BodyEncoding = Encoding.UTF8;
mailMessage.Body = "<p style='color:red;font-size:14px;'>郵件測試</p>";
//郵件內(nèi)容即消息正文中中顯示圖片 ,需要為圖片指明src='cid:idname(資源id)'
AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src='cid:zfp'/>", null, "text/html");
//然后在LinkedResource加入文件的絕對地址,和ContentType 例如image/gif,text/html...與http請求的響應(yīng)報(bào)文中的ContentType一致
LinkedResource lr = new LinkedResource("1.gif", "image/gif");
//綁定上文中指定的idname
lr.ContentId = "zfp";
//添加鏈接資源
htmlBody.LinkedResources.Add(lr);
mailMessage.AlternateViews.Add(htmlBody);
//發(fā)送附件 指明附件的絕對地址
Attachment attachment = new Attachment("1.txt");
mailMessage.Attachments.Add(attachment);
//創(chuàng)建郵件發(fā)送客戶端
SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25)
{
//指定郵箱賬號和密碼
Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe")
};
//指定如何發(fā)送電子郵件
sendClient.DeliveryMethod = SmtpDeliveryMethod.Network;
//指定使用使用安全套接字ssl加密的鏈接
sendClient.EnableSsl = true;
sendClient.Send(mailMessage);
//或者可以一步發(fā)送
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();
//獲取郵件數(shù)量
sw.WriteLine("stat");
sw.Flush();
result = sr.ReadLine();//result.split(' ')[1]表示郵件數(shù)量
//獲取郵件信息
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為標(biāo)題,亂碼用Base64解碼
Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(result));
}
}到此這篇關(guān)于C#實(shí)現(xiàn)收發(fā)郵件功能的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#四舍五入MidpointRounding.AwayFromZero解析
這篇文章主要介紹了C#四舍五入MidpointRounding.AwayFromZero,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
Unity3D Shader實(shí)現(xiàn)流光效果
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)流光效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#使用TensorFlow.NET訓(xùn)練自己的數(shù)據(jù)集的方法
這篇文章主要介紹了C#使用TensorFlow.NET訓(xùn)練自己的數(shù)據(jù)集的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Unity3D實(shí)戰(zhàn)之答題系統(tǒng)的實(shí)現(xiàn)
本文將用Unity3D制作一個(gè)答題系統(tǒng),可以從文本文檔中提取題目和分?jǐn)?shù),然后綁定到UI上,在答題的過程中,自動判斷分?jǐn)?shù),自動判斷正確率。感興趣的可以學(xué)習(xí)一下2022-03-03
C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn)
本文主要介紹了C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Unity調(diào)用C++?dll實(shí)現(xiàn)打開雙目相機(jī)
這篇文章主要為大家詳細(xì)介紹了如何在Unity中調(diào)用C++?dll實(shí)現(xiàn)打開雙目相機(jī)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05
深入C#任務(wù)管理器中應(yīng)用程序選項(xiàng)隱藏程序本身的方法詳解
本篇文章是對在C#任務(wù)管理器中應(yīng)用程序選項(xiàng)隱藏程序本身的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

