当前位置: 首页 > 编程日记 > 正文

C#中对POP3邮件解码

Base64和下面将要介绍的Quoted-Printable都属于MIME
(多部分( multi-part)、多媒体电子邮件和 WWW 超文本的
一种编码标准,用于传送诸如图形、声音和传真等非文本数
据)。MIME定义在RFC1341中。
Base64是现今在互联网上应用最多的一种编码,几乎所
有的电子邮件软件头把它作为默认的二进制编码,它已经成
了现今电子邮件编码的代名词。
下面是Base64的一个例子,从例子中,您也可以看到
Base64与电子邮件的的紧密联系:
Content-Type: text/plain;charset="cn-gb"
Content-Transfer-Encoding: BASE64
CQkJICAgIKG2wtLC68vjt6i088irobcNCgnX99XfOm1vZ2Fvo6yw19TGu8a619W+o6h0ZWxuZXQ6

Ly8yMDIuMTEyLjIwLjEzMjoyM6Ops8nUsaGjDQoJICAgICAgxKq438jtvP65pNf3ytKjumh0dHA6

Ly9tb2dhby5iZW50aXVuLm5ldA0KCQkJRW1haWx0bzptb2dhb0AzNzEubmV0DQoJICAgKioqKioq

KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgDQoJ

ICAgKiCz/cHLvMfS5Mqyw7S2vLK7tPjX36Oss/3By9fjvKPKssO0tryyu8H0z8IqDQoJICAgKioq

KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
你可以把它单独存成一个文件,可以取名为:mogao.eml,
双击可以用OutLook打开(前两行为邮件的原始信息,从第四行
开始为编码内容)。
Base64的算法同Uuencode的算法很接近,也很简单:它将
字符流顺序放入一个 24 位的缓冲区,缺字符的地方补零。然
后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位,
用下面的64个字符重新表示:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
wxyz0123456789+/"。
如果输入只有一个或两个字节,那么输出将用等号"="补足。
这可以隔断附加的信息造成编码的混乱。它每行一般为76个字符。
下面我给出Base64的编码和解码的C语言描述:
/*Base64编码*/
void Base64(unsigned char chasc[3],unsigned char chuue[4])
/*
chasc:未编码的二进制代码
chuue:编码过的Base64代码
*/
{
int i,k=2;
unsinged char t=NULL;
for(i=0;i<3;i++)
{
*(chuue+i)=*(chasc+i)>>k;
*(chuue+i)|=t;
t=*(chasc+i)<<(8-k);
t>>=2;
k+=2;
}
*(chuue+3)=*(chasc+2)&63;
for(i=0;i<4;i++)
if((*(chuue+i)>=0)&&(*(chuue+i)<=25)) *(chuue+i)+=65;
else if((*(chuue+i)>=26)&&(*(chuue+i)<=51)) *(chuue+i)+=71;
else if((*(chuue+i)>=52)&&(*(chuue+i)<=61)) *(chuue+i)-=4;
else if(*(chuue+i)==62) *(chuue+i)=43;
else if(*(chuue+i)==63) *(chuue+i)=47;
}
/*Base64解码*/
void unBase64(unsigned char chuue[4],unsigned char chasc[3])
/*
chuue:未解码的Base64代码
chasc:解码过的二进制代码
*/
{int i,k=2;
unsigned char t=NULL;
for(i=0;i<4;i++)
if((*(chuue+i)>=65)&&(*(chuue+i)<=90)) *(chuue+i)-=65;
else if((*(chuue+i)>=97)&&(*(chuue+i)<=122)) *(chuue+i)-=71;
else if((*(chuue+i)>=48)&&(*(chuue+i)<=57)) *(chuue+i)+=4;
else if(*(chuue+i)==43) *(chuue+i)=62;
else if(*(chuue+i)==47) *(chuue+i)=63;
else if(*(chuue+i)==61) *(chuue+i)=0;
for(i=0;i<3;i++)
{*(chhex+i)=*(chuue+i)<<k;
k+=2;
t=*(chuue+i+1)>>8-k;
*(chhex+i)|=t;
}
}
4. Quoted-Printable
Quoted-Printable简称QP, 一般用在Email系统中。它
通常用于少量文本方式的8位字符的编码,例如Foxmail就用
它做对主题和信体的编码。这种编码的应该是很好辨认的:
它有大量的"="。下面是它的一个例子:
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
=A1=B6=C2=D2=C2=EB=CB=E3=B7=A8=B4=F3=C8=AB=A1=B7
=D7=F7=D5=DF:mogao=A3=AC=B0=D7=D4=C6=BB=C6=BA=D7=D5=BE=A3=A8telnet://202.11
2.20.132:23=A3=A9=B3=C9=D4=B1=A1=A3
=C4=AA=B8=DF=C8=ED=BC=FE=B9=A4=D7=F7=CA=D2=A3=BAhttp://mogao.bentiun.
net
Emailto:mogao@371.net
*********************************************
* =B3=FD=C1=CB=BC=C7=D2=E4=CA=B2=C3=B4=B6=BC=B2=BB=B4=F8=D7=DF=A3=AC=B3=
FD=C1=CB=D7=E3=BC=A3=CA=B2=C3=B4=B6=BC=B2=BB=C1=F4=CF=C2*
*********************************************
你可以把它单独存成一个文件,取名为:mogao.eml,
双击可以用OutLook打开(前两行为邮件的原始信息,从第
四行开始为编码内容)。
QP的算法可以说是最简单的也可以说是编码效率最低的
(它的编码率是1:3),它是专门为了处理8位字符制定的。
它的算法是:读一个字符,如果ASCII码大于127,即字符的
第8位是1的话,进行编码,否则忽略(有时也对7位字符编码)。
编码很简单,看下面的C语言描述即可:
/*QP编码*/
void qp(unsigned char sour,unsigned char first,unsigned char second)
/*
sour:要编码的字符
first:编码后的第一个字符
second:编码后的第二个字符
first和second为返回值
*/
{
if(sour>127)
{first=sour>>4;
second=sour&15;
if(first>9) first+=55;
else first+=48;
if(second>9) second+=55;
else second+=48;
printf("%c%c%c",'=',first,second);
}
}
/*QP解码*/
void uqp(unsigned char sour,unsigned char first,unsigned char second)
/*
sour:解码后的字符
first:QP码的第一个字符
second:QP码的第二个字符
sour为返回值
*/
{
if(first>=65) first-=55;
else first-=48;
if(second>=65) second-=55;
else second-=48;
sour=NULL;
sour=first<<4;
sour|=second;
}
现在大家知道为什么QP的编码率那么低了吧!关于QP的
详细说明和准确定义可以参阅RFC2045。

相关文章:

php 命中算法

function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递

1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面&#xff0c;让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…

C#调用控制面板选项

因为C#是由Microsoft公司推出的&#xff0c;所以它对Microsoft的所有产品的兼容性与相互操作性是其它公司开发出的编程语言所不及的。Microsoft开发的Windows操作系统与C#之间的关系也非常紧密。从而实现了C#对Windows的无缝操作。 下面&#xff0c;我们就以“C#对Windows控制面…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?

5月27日20点&#xff0c;第 13 期「大咖来了」&#xff01; CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉&#xff0c;多方视角探讨 RTC 超级风口与机遇&#xff0c;还有众多精美礼品等你拿&#xff01; 立即戳&#xff1a;https://live.csdn.net/room/csdnnews/cn…

查询/新建/修改本地用户和组

通过ADSI新建用户user2&#xff1a; 1 #创建新用户&#xff0c;创建完成后的新用户不隶属于任何组2 $computerName$env:computername3 #定义用户名、密码、描述信息4 $username"user2"5 $userpass"password"6 $userdesc"description"7 $ADSI [A…

支付宝接入参考博客

http://www.cnblogs.com/stulzq/p/7606164.html转载于:https://www.cnblogs.com/baiqian/p/7609443.html

活动目录的优势

活动目录的优势 Active Directory服务提供了单一登入的能力和一个所有基础设施相关信息的集中储存机制&#xff0c;大幅度的简化了使用者和计算机的管理&#xff0c;同时提供优越的网络资源存取能力。我在本文中主要讲述一下Microsoft Windows Server 2003 中的 Active Directo…

C#编写一个抓网页的应用程序

本文利用C#和.NET提供的类来轻松创建一个抓取网页内容源代码的程序。HTTP是WWW进行数据访问最基本的协议之一&#xff0c;在.NET的基本类型库类中提供了两个对象类&#xff1a;HTTPWebRequest和HTTPWebResponse&#xff0c;分别用来向某资源发送请求和获得响应。为了得到一个资…

从粗放到精细,如何用AI技术实现信息流广告投放的降本增效

中国的SaaS在经历2020年全球爆发的疫情之后&#xff0c;迎来了前所未有的高光时刻&#xff0c;或者说蛰伏数年终于迎来了爆发。 2021年5月20日&#xff0c;ZTouch&#xff0c;北京中量质子网络信息科技有限公司旗下的企业数智化服务平台&#xff0c;发布了广告数智投放平台Dar…

广义动量定理之作用点的应用分析

广义动量定理之作用点的应用分析 从广义动量定理FαtnmV的角度说&#xff0c;改变作用点&#xff0c;就可以改变成果nmV。作用点派以调整作用点的准确度作为达成目的的手段。 作用点应用于聚焦理论 理论简介&#xff1a;聚焦理论使企业集中力量于某几个细分市场&#xff0c;主攻…

将DBF,XLS,XML,MDB文件导入C#DataGrid的方法

以下的源码里分别给出了将DBF,XLS,XML,MDB文件导入C#DataGrid的方法,供各位参考。 //PutInDataSet.cs的源码 using System; using System.Data.Odbc; using System.Data.OleDb; using System.Data; using System.Collections; namespace PutInDataSet { /// <summary…

超星未来发布新一代高级别自动驾驶车载计算平台

5月25日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心主办的第八届国际智能网联汽车技术年会&#xff08;以下称“CICV 2021”&#xff09;在北京亦创国际会展中心举办。超星未来联合创始人、首席技术官梁爽博士应邀出席发表演讲&#xff0c;并在主论坛上发布了超…

Effective Java - Item 1: Consider static factory methods instead of constructors

考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int, Random) , 它返回一个可能是素数的 BigInteger. 使用工厂方法 BigInteger.probablePrime 可以…

服务器和普通用户电脑的区别

服务器和普通用户电脑的区别 1、硬件方面 经常收到戴尔的广告邮件&#xff0c;看到里面的服务器配置不怎么高&#xff0c;可是价格都很贵。想知道&#xff0c;服务器和普通电脑的区别在哪里呢&#xff1f; 目前使用服务器的站长和企业也比较多&#xff0c;也许有人会觉得二者差…

C#:消息队列应用程序

文章“MSMQ&#xff1a;可伸缩、高可用性的负载平衡解决方案&#xff08;英文&#xff09;”介绍了一种解决方案&#xff0c;用于高可用性消息队列 (MSMQ) 的可伸缩负载平衡解决方案体系结构。此解决方案中涉及了一种将 Windows 服务用作智能消息路由器的开发方案。这样的解决方…

从腾讯实时音视频发家史,看爆发中的 RTC 将何去何从

作者 | 夕颜头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;早在2015年左右&#xff0c;直播和短视频的兴起渗透进普通人的日常生活&#xff0c;人们信息消费的内容已经开始从文字向语音、视频信息转变。而疫情期间全民“家里蹲”的窘境&#…

山寨c 标准库中的getline 函数

2019独角兽企业重金招聘Python工程师标准>>> 要山寨一个函数&#xff0c;只要看两点 原版函数的形参。原函数的返回值。下面是函数原型。 ssize_t getline(char **lineptr, size_t *n, FILE *stream); 函数返回值。 RETURN VALUE On success, getline() and getde…

封ip对爬虫的影响

今天要聊的是封ip对爬虫的影响。我认为封ip能拒绝一部分网络请求&#xff0c;减轻服务器的压力&#xff0c;但是如果要是建立一个好的ip池&#xff0c;封对爬虫的影响不大。 爬取国内一个拍卖公司的网站&#xff0c;刚开始用多进程下载&#xff0c;每分钟能爬取 1000个页面&…

Python 的一万种用法:制作 Web 可视化页面

来源 | 法纳斯特头图 | 下载于ICphoto一谈到Web页面&#xff0c;可能大家首先想到就是HTML、CSS或JavaScript。本次小F给大家介绍一下如何用Python制作一个数据可视化网页&#xff0c;使用到的是Streamlit库&#xff0c;轻松将一个Excel数据文件转换为一个Web页面&#xff0c;提…

【Go语言】LiteIDE使用的个人使用方法

Go语言开发 可以使用的IDE很多 &#xff08;Goclipse&#xff0c;sublime&#xff0c;notepad&#xff0c;vim等&#xff09;目前使用的最顺手的就是LiteIDE了 但是尽管这样&#xff0c;一开始使用LiteIDE也有很多不习惯的地方&#xff0c;下面主要总结了一些自己喜欢的用法 首…

发挥大数据及其产业在推动发展方式转变上的作用

大数据时代的到来&#xff0c;互联网成为基础设施&#xff0c;数据变成重要资源&#xff0c;这不仅意味着海量、多样、快速的数据处理和技术创新&#xff0c;更为重要的是改变了传统要素的组合方式。这种变化客观上要求必须转变传统的经济增长方式&#xff0c;实现创新驱动发展…

Google 全球 IP 地址库一览表(更新中)

IP 地址来源&#xff1a;http://www.kookle.co.nr&#xff0c;共计4351个。【链接】http://www.kookle.co.nr/https://github.com/justjavac/Google-IPsBulgaria93.123.23.193.123.23.293.123.23.393.123.23.493.123.23.593.123.23.693.123.23.793.123.23.893.123.23.993.123.2…

Linux下的阻塞(Block)

阻塞&#xff08;Block&#xff09;这个概念。当进程调用一个阻塞的系统函数时&#xff0c;该进程被置于睡眠&#xff08;Sleep&#xff09;状态&#xff0c;这时内核调度其它进程运行&#xff0c;直到该进程等待的事件发生了&#xff08;比如网络上接收到数据包&#xff0c;或…

发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?...

作者 | 伍杏玲出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;头图 | 下载于ICphoto2015 年&#xff0c;在英特尔就职 28 年的总裁 Renee James 辞职&#xff0c;正在大众纷纷猜测她将如何开启下一段旅程时&#xff0c;她有了创业的想法&#xff0c;2017 年带领新团…

纷纷布局的全光网,是你所熟知的吗?

近日&#xff0c;中国电信甘肃公司举行甘肃全光网建成发布会&#xff0c;至2017年4月30日&#xff0c;甘肃省已建成14个全光网市州、87个全光网县区、1234个全光网乡镇、10000个全光网行政村&#xff0c;全省市、县、乡光网宽带覆盖率达到95%以上&#xff0c;全面实现光纤到户;…

内存转换Image到Icon

时候我们需要在内存中转换Image格式到Icon 根据经验&#xff0c;通常我们应该可以这样做 Image image xxxx;///假设这里已经有一个Image对象 System.IO.MemoryStream mStream new System.IO.MemoryStream();///创建内存流 image.Save(mStream, System.Drawing.Imaging.Ima…

Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法

一、Spring定义bean&#xff0c;Component、Repository、Service 和 Controller Spring 2.5 中除了提供 Component 注释外&#xff0c;还定义了几个拥有特殊语义的注释&#xff0c;它们分别是&#xff1a;Repository、Service 和 Controller。在目前的 Spring 版本中&#xff0…

谁是“艾灵”?是腾讯的真国风 AI 虚拟人!

近日&#xff0c;腾讯AI虚拟人艾灵再秀出新技能&#xff0c;首次展示AI作诗、AI书法等国风才艺&#xff0c;并与青年歌手白举纲跨次元合作&#xff0c;共同演唱国风新歌《百川千仞》。AI“艾灵”诞生于腾讯AI Lab&#xff0c;来自实验性、探索性技术项目“多模态虚拟人”。机器…

[Java实现] 图片择优(选择最清楚的图片)

FuzzyDetection 图片择优&#xff08;选择最清楚的图片&#xff09;【Java实现】效果不错&#xff0c;大家可以根据我的源码改成自己使用的语言并应用到自己项目中。 实现思路 获取图片的灰度图数组使用拉普拉斯算子进行卷积运算 {0, 1, 0, 1, -4, 1, 0, 1, 0}获取结果的方差与…

C#获取硬盘序列号

using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using Microsoft.Win32; namespace Wjb.ReadOrWriteIniAndReg { /// <summary> /// HardDiskVal 的摘要说明。 /// 读取指定盘符的硬盘序列号 /// 功能&#xff1a;读…