我们在上一篇中解决了接收一行命令的问题后,就可以来具体的分析邮件发送过程中涉及到的 SMTP 协议内容了. 首先来看通讯过程中的第一个内容:服务器在客户端连接上来后会主动发送一个问好的信息,所以这第一行的内容是服务器发送的,这时候客户端要回答的内容其实并不确定.原因是根据不同的客户端意图,客户端要发送的内容是有些差异的.以我们示例中要发送一封信来说,要回复的第一句话就是 "EHLO" 命令,而看过我们前面文章都知道,要连接 163 邮箱这样的服务器光有这个命令还是不够的,还要带上 &q…
首先要感谢博客园管理员的及时回复,本系列的第二篇文章得以恢复到首页,这是对作者的莫大鼓励.说实在的本来我真的挺受打击的.好在管理员说只是排版上有些问题,要用代码块修饰下相关的信息.说来惭愧因为常年编码已经习惯了用纯文本和空白行等处理文章,确实谈不上对文章排版,后面我会多学习应用排版功能. 经过前面两篇文章,假设大家已经学会了使用 telnet 命令行登录邮箱,那么我们可以开始学习发送邮件了! 这一次我先不讲原理,先上结果图和需要的命令行吧. 图1.发送成功的命令行截图 使用到的命令如下 AUTH…
本系列上一篇文章中我们就说到了,这一次我们要说 pop3 收信了.虽然我觉得应该先说完 mime 格式,不过估计大家已经不耐烦了 -- 怎么老在说发送啊?我们要看收取!    好吧,来啦,来啦!收取邮件现在常用的有 pop3 和 imap 协议,不过从传统来说 pop3 受众要广得多.有了前面的基础,要实现 pop3 收信其实非常的简单.我们仍然用第一篇"网络命令的发送"中所说的方法来学习 pop3 协议.    首先仍然是用 telnet 连接 pop3 对应的网络地址,这里是 te…
一步一步从原理跟我学邮件收取及发送 2.邮箱的登录和绕不开的base64 好了,经过本系列上一篇文章 "1.网络命令的发送",假设大家已经掌握了 email 电子邮件的命令发送的方法.那么下面我们可以来学习如何发送一封邮件了. 如果是传统作家一定要开始讲解 RFC821 协议,然后用它来发送邮件给大伙看看.遗憾的是这种做法有两个问题:1.是虽然 smtp 有 "简单" 两个字("简单邮件传输协议 SMTP"嘛),但我要这样一轮写下来的话估计没人能…
既然是面向程序员的文章那当然不能只说说原理,一定要有实际动手的操作.    其实作为我个人的经历来说,对于网络编程,这是最重要的一章! 作为一位混迹业内近20年的快退休的程序员,我学习过很多的开发语言和程序类型,比如:pascal,c,c++,delphi,vc,java,kjava,symbian .... objectc,ios ..直到最近还因为工作的关系还得研究前端用的 js (虽然早就学过).列这么多我不是炫耀,也是不要反映老程序员的悲哀历史,我是想通过这些学习到应用的经历告诉大家,其…
说到 C 语言版本的程序,首先要解决的问题就是兼容性. 作为 20 年开发有 10 多年是在服务端的程序员,我深刻地感受到服务端平台的两极分化之严重,linux 派对 windows 那是超级的不屑一顾:那都是没技术的人才用的,没能力维护 linux 的人才用 windows. 与此同时 windows 派对 linux 也是嗤之以鼻,我曾经的一位经理就时常不屑对我说,我就不信那几个人写的东西能比公司写的好. 奇怪的这两派其实都很能挣钱,BAT 什么的都用 linux 我们就不说了,但股票期货交…
经过前几篇的文章,大家应该都能预感到一定要讲解 base64 函数的内容了.是的,马上要到程序登录的代码,base64 是必须要实现的. base64 很早以前我就接触了,在项目中也很喜欢用.但每换一个新语言我总是很害怕,很排斥用它.这主要是缘于曾经的经历:多年前 base64 还没有这样普及,为了在 java 中使用 base64 找了很多的代码,虽然 jdk 中是有,但那是 sun 专用的,在网上找倒是很多,但要自己改造一下是非常的困难(其实是 java 的语言特性导致很复杂,base64…
经过了这个系列的前几篇文章的学习,现在要写出一个完整的 smtp 邮件发送过程简直易如反掌.    例如我们可以轻松地写出以下的纯 C 语言代码(引用的其他C语言文件请看文末的 github 地址): #include <stdio.h> #include <windows.h> #include <time.h> #include <winsock.h> #include "lstring.c" #include "socke…
前几篇的文章发表后,有网友留言说没有涉及到阻塞的问题吗?在 socket 的编程当中,这确实是个很重要的问题.结合目前我们文章的内容进度,我们来看看为什么说阻塞概念很重要. 接着上篇的内容,当我们发送了 ehlo 命令之后就要接收服务器的返回了.这个地方是一个很容易出错的位置,一般的网络命令都是发送一条命令接收一条回复,这很容易让初学好者以为每个命令都是一行内容,进而在代码中进行了错误的处理.而实际上无论是命令还是对命令的应答都是有多行的情况,如果对 socket 机制不了解,那就会说:那就读取…
在前面的本系列文章中我们已经学会了邮件的发送和收取.但在收取中我们看到的是一串串的乱码,回忆前面的发送过程,我们会奇怪:我们前面的邮件是明文啊.为什么明文的邮件明明也可以正常工作,还要弄乱码似的字符串编码呢?让我们先来看一下前面发送过的邮件内容: From: "test1@newbt.net" <test1@newbt.net> To: "clq@newbt.net" <clq@newbt.net> Subject: test Date: S…