
1.只有在lwip1.4.1版本下实现的例子中有对smtp协议的实现。之前的版本没有实现smtp协议。 , s1 _1 K3 g( Z( ~7 d- i7 Q 2.smtp是基于tcp协议进行传输的,实质是对文本进行解析。 3.其发送邮件的过程可以通过windows下的telnet程序和邮件服务器交互实现。具体过程如下:; J* c. }3 J3 Y9 K% {; V 首先进入cmd界面,输入telnet smtp.sina.com 25(这里的smtp.sina.com和25分别是smtp服务器和端口号) 连接成功后,输入ehlo smtp.sina.com,返回服务器支持的操作,每项操作以"250"开始。 % r, I7 @! A- g 输入auth login。一般的服务器会返回334 VXNlcm5hbWU6,意思是要求输入用户名,即你的邮箱地址。 VXNlcm5hbWU6是对user的base64编码。这里需要输入你的邮箱地址,这个地址是需要经过base64编码后的地址。 服务器返回334 UGFzc3dvcmQ6。意思是需要你输入密码,UGFzc3dvcmQ6为password的base64编码。这里需要输入你经过base64编码后的密码。如果用户名密码正确,服务器将返回235,验证通过,已验证,验证成功等提示,不同的邮箱提示不同。这意味着你可以发邮件了。否则意味着验证失败。 / k: m9 j9 k, m5 Y8 n 验证通过之后,就可以不用base64编码了。 输入mail from: 回车,填写发件人地址。返回250 ok。 输入rcpt to: 回车,填写收件人地址。返回250 ok。 输入data回车,返回提示,以CRLF . CRLF作为数据结束标志,这时可以输入邮件的标题,邮件等内容。返回250 ok queue id xxxxxx,表示邮件发送成功。! R# {$ q _; c3 W 在smtp.c中实现的也是对这些命令的解析,smtp服务器对命令的响应是一个字符串。格式为一个数字+响应的说明。数字如果以2开头表示成功,4,5开头表示失败。7 o9 v- S2 Z! S/ t+ j! c% D & _8 u3 U Q; n 4.使用smtp.c过程中,发现三个问题。其一,需要将SMTP_SUPPORT_AUTH_PLAIN置为0,即不支持明文身份验证,否则会返回错误或者链接超时。其二,如果发送中文字符需要关闭SMTP_CHECK_DATA数据检查宏,因为smtp.c的作者认为大于0x80的数据或者回车换行为非法字符,导致数据发送失败。其三,不同的邮箱user的base64编码不同,有的默认用user(VXNlcm5hbWU6),有的默认用User(dXNlcm5hbWU6),这个需要修改下smtp.c的源码,#define SMTP_RESP_LOGIN_UNAME "XNlcm5hbWU6",忽略第一个字符,因为'U'和'u'的高2bit都是01,只有低6bit不同。 5.对邮箱的测试结果为:可以通过smtp.163.com,smtp.sina.com,smtp.139.com以及高校的邮箱发送数据。其中163邮箱服务器发现异常,会暂时停止该ip的身份验证,发邮件等操作。qq,gmail则使用安全连接发送邮件,在输入auth login之后便提示失败需要安全连接。所以无法使用smtp.c发送邮件。 7 i; \% C Y: ^8 T) V) P 注:base64编码是,将一个bit流中的数据按照6bit一组作为索引,查找一个预先确定的字符数组中的字符作为编码后的第一个字符,再从原来的比特流中取6个bit,查表取的第二个编码后的字符。以此类推,将整个bit流转化成base64编码。6个bit一共可以表示64个字符。所以这个字符数组是一个长度为64的字符数组。在lwip的smtp.c文件中叫做base64_table。/ b1 Y1 |( | K: D8 K- b9 w* r, U 2 T2 ]2 ?4 x) E& N- o1 K0 l |
RE:使用lwip发邮件的注意事项
RE:使用lwip发邮件的注意事项
RE:使用lwip发邮件的注意事项