电子邮件系统原理以及相关协议

一个简单的邮件系统,应该包含三部分:首先是邮件服务器、用户代理、邮件传送协议。

邮件服务器:平时我们使用qq邮箱,新浪邮箱,网易邮箱,gmail等都是邮件服务器, 如果在上面申请帐号,对应就会有你的邮箱空间,邮箱帐号,邮箱认证口令,而不同的邮件服务器地址是不相同的

用户代理:就是你用来从邮件服务器上读取或者发送邮件到邮件服务器上的一个软件。比如常用的OutLook,Foxmail等等

邮件传送协议:邮件服务器之间的协议是使用SMTP,用户发送邮件到邮件服务器使用的还是SMTP协议,用户从邮件服务器读取邮件用的才是POP3协议

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

SMTP通常有两种工作模式:发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向dns查询远端邮件服务器的MX纪录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答即可。

POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件

 IMAP协议比较酷的功能是用户可以维护自己在服务器上的邮件目录;可以直接抓取邮件的特定部分,目前国内免费的imap服务提供商有21cn世纪龙(包括21CN免费邮箱、21CN企业邮箱、电信各地方性邮箱 及 电信189邮箱)、腾讯的QQ邮箱、搜狐邮箱和网易邮箱(2010年2月5日后包括网易旗下三大免费邮箱,即126,163和yeah)、263企业邮箱(2011年4月份后上线的263G+产品上线imap功能)。

  ●IMAP的一个与POP3的区别是:IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来,而是你邮箱当中还保留着邮件的副本,没有把你原邮箱中的邮件删除,你用邮件客户软件阅读邮件时才下载邮件的内容。较好支持这两种协议的邮件客户端有:ThunderMail,Foxmail,outlook等。

各类SMTP服务器收集[来自网络]

>新浪邮箱smtp服务器
外发服务器:smtp.vip.sina.com
收件服务器:pop3.vip.sina.com
新浪免费邮件
外发服务器:smtp.sina.com.cn
收件服务器:pop3.sina.com.cn

>163邮箱smtp服务器
pop: pop.163.com
smtp: smtp.163.com

>QQ邮箱smtp服务器及端口
接收邮件服务器:imap.qq.com,使用SSL,端口号993
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587

>yahoo邮箱smtp服务器
接:pop.mail.yahoo.com.cn
发:smtp.mail.yahoo.com

>126邮箱smtp服务器
pop: pop.126.com
smtp: smtp.126.com

新浪VIP邮箱
POP3:pop3.vip.sina.com
SMTP:smtp.vip.sina.com
SMTP端口号:25

新浪企业邮箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口号:25

雅虎邮箱
POP3:pop.mail.yahoo.cn
SMTP:smtp.mail.yahoo.cn
SMTP端口号:25

搜狐邮箱
POP3:pop3.sohu.com
SMTP:smtp.sohu.com
SMTP端口号:25

TOM邮箱
POP3:pop.tom.com
SMTP:smtp.tom.com
SMTP端口号:25

Gmail邮箱
POP3:pop.gmail.com
SMTP:smtp.gmail.com
SMTP端口号:587 或 25

Continue reading

Mysql数据类型以及字段属性大盘点

1、  时间和日期

l  Date:存储日期信息,标准形式YYYY-MM-DD,但是形如20120808以及2012*08*08或者2012!08!08。也就是说不论中间用何种分隔,存储到数据库之后都是2012-08-00

l  Datetime:存储日期和时间组合,标准格式YYYY-MM-DD HH:MM:SS。Datetime取值范围在1000-01-01 00:00:00~9999-12-31 23:59:59

l  Time:存储时间信息,-838:59:59~838:59:59范围

l  Timstamp:和datetime的区别在于插入和更新会自动回去当前时间

l   Year:存储年份信息,有两位和4位之分

2、  数字数值类型

Bool是tinyint的别名,用于赋值0或者1

Bigint:数据类型提供了mysql最大的整数范围,取值范围分为有符号:-9223372036854775808~9223372036854775807,无符号是0~18446744073709551615

Int:提供了第二大的整数范围

Mediumint:提供了第三大整数

SMAllint:提供了第四大整数范围

Tinyint:提供了最小的整数范围,值在-128-127(分清楚范围就不担心数据够不够存储)

Decimal,double,float:存储浮点数

3、  字符串类型

Char:提供了固定长度的字符串类型,最大255字符

Varchar:可变长度的字符串类型,最大255个字符(尽量使用char而不是varchar)

Longblob:提供了最大的二进制字符串存储,最大4294967295个字符

Longtext:提供了最大的非二进制字符串存储,范围4294967295个字符

Mediumblob:提供了第二大二进制字符串存储

Mediumtext:提供了第二大非二进制字符串存储

Blob:提供第三大二进制字符串存储

Text:提供第三大非二进制字符串存存储

Tinyblob:提供最小的二进制字符串存储最多255个字符

Tinytext:提供最小的非二进制字符串存储最多255个字符

Enum:枚举类型,最多可以有65535组不同的数据

Set:枚举类型,最多可以设置有64个成员

  Continue reading

TP入门第十二天

1、RBAC权限管理

使用内置RBAC,最主要是懂得官方提供的四个数据表关系,这里重点说明下四个表的关系

thinkphp中RBAC有四个表access、role、node、role_user

其中role是用户群组表、node是节点表、role_user是用户和群组关系表、

access是群组和节点关系表(也就是在access内的用户组可以访问对应的节点)

,其中access中modul字段我不明白是干嘛的。如果你知道的话可以告诉我,十分感谢

程序和数据库打包了。附件:Code

学习心得:学东西不能着急,我用了十二天(断断续续的大概有20天左右)明白了tp的用法,可是tp还有很多要学的~

如果你也是tp爱好者,你也喜欢tp,我希望你能给我交流讨论学习。。下步就是做项目开发了。

服务器出现500错误,排查总结

今天刚刚建立的web服务器,访问的时候出现500错误。

错误代码详解:http://www.0377joyous.com/archives/572.html

首先要看得系统日志message

我用的centos6.2搭建的,用命令gedit /var/log/message

日志没有我想要的信息,我就考虑去看apache日志。apache日志查看

# gedit /var/log/httpd/error_log

这个我看到一个关键的

[Sat Aug 18 16:07:30 2012] [error] [client 192.168.81.120] PHP Parse error:  syntax error, unexpected T_VARIABLE in /var/www/html/index.php on line 3

这样就发现程序出错了,有人问了,为何网页不自动提示呢?

这都需配置php.ini配置了。请参考:php.ini配置详解http://www.0377joyous.com/archives/873.html

总结:如果出现错误,不要慌张要淡定的处理问题,发现问题所在才是王道,比如查看网络/防火墙/selinux/日志/配置文件

Centos安装谷歌浏览器root用户不能使用解决办法

谷歌浏览器使用习惯了,不喜欢火狐打开很慢的的浏览器,虽然很优秀。。。

于是就下载了谷歌浏览器,然后安装。。结果提示:

要以根用户身份运行,您必须为个人资料信息的存储指定其他的“–user-data-dir”

晕啊,这怎么办?我想到的是修改配置文件,于是搜索修改配置文件

vim /opt/google/chrome/google-chrome

原来最后一行

exec -a “$0” “$HERE/chrome” “$@ ”

修改成:xec -a “$0” “$HERE/chrome” “$@ –user-data-dir”

看看是不是可以打开谷歌了?

TP入门第十二天

1、模板技术

为何使用模板这里就不罗嗦了,直接介绍模板技术

变量传递和显示:

例如在action里面可以这样写

$title=”变量”;

$arr=array(“标题”,”内容”,’my’=>”时间”);//数组

$this->assign(‘atitle’,$title);

$this->assign(‘content’,’这是内容’);

$this->assign(‘time’,time());

$this->assign(‘mylist’,$arr);

$this->display();

这样就需要在模板里面获取

内容:{$content}

<br>

时间:{$time}

<hr>

数组测试

第一个:{$mylist[0]}<br>

第二个:{$mylist.1}<br>

第三个:{$mylist.my}<br>

如果是对象,那么就需要用:,例如:{$mylist:ff}

模板注释:格式:{/*注释内容 */ }或 {//注释内容 }

说明:在显示页面的时候不会显示模板注释,仅供模板制作的时候参考。

函数使用:在前面制作留言板的过程中,用到date函数格式化时间显示,这里说明。模板变量的函数调用格式为:

{$varname|function1|function2=arg1,arg2,### }

说明:

{和 $符号之间不能有空格,后面参数的空格就没有问题

###表示模板变量本身的参数位置

支持多个函数,函数之间支持空格

支持函数屏蔽功能,在配置文件中可以配置禁止使用的函数列表

支持变量解析缓存功能,重复变量字串不多次解析

使用例子:

{$webTitle|md5|strtoupper|substr=0,3}

编译后的PHP代码就是:

<?php echo (substr(strtoupper(md5($webTitle)),0,3)); ?>

注意函数的定义和使用顺序的对应关系,通常来说函数的第一个参数就是前面的变量或者前一个函数调用的返回结果,如果你的变量并不是函数的第一个参数,需要使用定位符号,例如:

{$create_time|date=”y-m-d”,###}

编译后的PHP是:

<?php echo (date(“y-m-d”,$create_time)); ?>

默认值输出:如果输出的模板变量没有值,但是我们需要在显示的时候赋予一个默认值的话,可以使用default语法,格式:

{$变量|default=”默认值”}

这里的default不是函数,而是系统的一个语法规则,例如:

{$user.nickname|default=”这家伙很懒,什么也没留下”}

对系统变量的输出也可以支持默认值,例如:

{$Think.post.name|default=”名称为空”}

默认值支持Html语法。

Continue reading

TP入门第十一天

1、数据库视图

视图通常是指数据库的视图,视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

要定义视图模型,只需要继承ViewModel,然后设置viewFields属性即可

例子:

class BlogViewModel extends ViewModel {

public $viewFields = array(

‘Blog’=>array(‘id’,’name’,’title’),

‘Category’=>array(‘title’=>’category_name’,’_on’=>’Blog.category_id=Category.id’),

‘User’=>array(‘name’=>’username’,’_on’=>’Blog.user_id=User.id’),

);

}

我们来解释一下定义的格式代表了什么。

$viewFields 属性表示视图模型包含的字段,每个元素定义了某个数据表或者模型的字段。

例如:

Continue reading

Centos配置支持mail函数

实验证明一切:(不过我还是建议使用PHPmailer:http://www.0377joyous.com/archives/536.html)

在本机中写mail函数发送邮件程序

我安装了sendmail以及搭建了lamp环境,然后书写发送程序,结果看到日志中有很多500错误以及发送的邮件都在我机器上,其实并没有发送成功,具体配置过程随后贴出。先记录下这次的错误报告:

发送qq邮箱提示这个错误,我就在qq的邮箱服务找到这个说明

550 Mailbox unavailable or access denied

出错原因:您要发送的收件人短时间内收到大量邮件,为避免受到恶意攻击,暂时禁止向该收件人发信。
改善建议:暂停向该收件人发信,稍后重新尝试。

不过我不会放弃的,大家都可以配置成功,我也试试~~最近忙点事情。过几天肯定如实奉上!谢谢你的关注

Linux任务计划详解

Linux下计划任务可以通过修改/etc/crontab建立计划任务以及使用crontab命令添加计划任务。

第一种:修改/etc/crontab来实现计划任务(前些日子写的:http://www.0377joyous.com/archives/260.html

第二种:使用crontab命令添加定时任务(建立成功后会在var/spool/cron/用户名有文件建立)

注意:不是建立一个文件放入到cron文件夹下,当然你可以建立一个用户名一样的文件,然后重新加载cron配置

查看是否有用户自定的定时任务:#crontab -u root -l

比如添加一个定时命令,可新建一个newcrontab.txt内容如下

00 1 * * 0 rm -f /download/myname.tar.gz

保存到root目录

然后使用命令crontab /root/newcrontab

这个时候就会建立一个当前用户的定时任务(建议root)

然后我们可以使用

service crond reload重新加载,然后可以查看(crontab -u root -l)编辑(crontab -u root -e)删除(crontab -u root -r)

当然我们可以使用定时任务重启计算机、备份等操作