上面一篇已经讲到怎样发信了,今天索性来个结尾谈一谈怎样发信!
和前面的流程差点儿相同,我们也手工模拟一次发信流程!
事实上和前面的发信流程差不太多!
一样的,我们以网易的邮箱为例!
我们先要连接到网易的pop邮箱!
命令为: telnet pop.163.com 110
意思非常明显,要求连接到网易的popserver的110号port.
然后就能够登陆了!
输入命令:user xxxxx (你的username,不用加密)
假设没有出错的话,系统通常会返回+OK之类的东西.
然后输入:pass xxxxxx(你邮箱的password,不加密)
一样的,假设没有出错的话,系统通常会返回+OK之类的东西.
如今我们就能够操作了。
尽管能够使用的命令非常多,只是最经常使用的命令仅仅有两个!
第一个是list命令,用来列出邮件的条目!我们看一下。
表示有19封邮件。右边是邮件大小。
另一个命令自然是retr命令了!它用来获取邮件!
看我演示:
retr使用规则是 retr + 你要获取的邮件的编号!
好吧!
既然已经讲到这份上了,我顺便提一句!server发送的大部分内容是用base64加密了的。所以我们看到满屏幕的字母!
那么怎么读取出内容呢?这不是这篇文章的重点,所以我们代码採取的方式是直接将server发送过来的邮件内容写到文件中,存成.eml文件,然后邮件client能够打开这样的文件。推荐採用foxmail来打开这样的文件!
最后。不要忘了quit命令,关闭与server的连接,这里就不再演示!
看代码吧!
pop3.cpp
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "pop3.h" CPop3::CPop3() { WSADATA wsaData; WORD version = MAKEWORD(2, 0); WSAStartup(version, &wsaData); } CPop3::~CPop3() { WSACleanup(); } int CPop3::Pop3Recv(char* buf, int len, int flags) {/*接收数据*/ int rs; int offset = 0; do { if (offset > len - 2) return offset; rs = recv(m_sock, buf + offset, len - offset, flags); if (rs < 0) return -1; offset += rs; buf[offset] = '