你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用lwip发邮件的注意事项

[复制链接]
stm32f103vc 发布时间:2014-5-12 15:49
1.只有在lwip1.4.1版本下实现的例子中有对smtp协议的实现。之前的版本没有实现smtp协议。
7 q  H8 v0 P) d/ i* t) E , s1 _1 K3 g( Z( ~7 d- i7 Q
2.smtp是基于tcp协议进行传输的,实质是对文本进行解析。
! [' G7 D) l+ q- b 
- N  [9 _' w9 P  B: `( S3.其发送邮件的过程可以通过windows下的telnet程序和邮件服务器交互实现。具体过程如下:; J* c. }3 J3 Y9 K% {; V
首先进入cmd界面,输入telnet smtp.sina.com 25(这里的smtp.sina.com和25分别是smtp服务器和端口号)
: P5 a  U' V+ Y# i4 |; e连接成功后,输入ehlo smtp.sina.com,返回服务器支持的操作,每项操作以"250"开始。
+ w1 N! u& {1 K- m3 D+ E1 [) Q- F% r, I7 @! A- g
输入auth login。一般的服务器会返回334 VXNlcm5hbWU6,意思是要求输入用户名,即你的邮箱地址。
) _2 S$ z; _8 fVXNlcm5hbWU6是对user的base64编码。这里需要输入你的邮箱地址,这个地址是需要经过base64编码后的地址。
8 S! v0 S* M7 N. `服务器返回334 UGFzc3dvcmQ6。意思是需要你输入密码,UGFzc3dvcmQ6为password的base64编码。这里需要输入你经过base64编码后的密码。如果用户名密码正确,服务器将返回235,验证通过,已验证,验证成功等提示,不同的邮箱提示不同。这意味着你可以发邮件了。否则意味着验证失败。
7 y5 ?" E% w% M% [/ k: m9 j9 k, m5 Y8 n
验证通过之后,就可以不用base64编码了。
/ g/ a/ p) l) ?0 N9 Z输入mail from: 回车,填写发件人地址。返回250 ok。
# q/ \3 r: L8 k/ H输入rcpt to: 回车,填写收件人地址。返回250 ok。
& A9 l/ J' J2 E& X; Q* y  q输入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不同
6 j! _- {5 ~8 J  p) k  ] 
- L/ A, O2 F& K) P5.对邮箱的测试结果为:可以通过smtp.163.com,smtp.sina.com,smtp.139.com以及高校的邮箱发送数据。其中163邮箱服务器发现异常,会暂时停止该ip的身份验证,发邮件等操作。qq,gmail则使用安全连接发送邮件,在输入auth login之后便提示失败需要安全连接。所以无法使用smtp.c发送邮件。
: I# w8 G6 e7 ?& x  t7 u: q- z 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

4 w2 B! N2 z5 B0 c" r; w2 T+ [* b2 T2 ]2 ?4 x) E& N- o1 K0 l
 
收藏 1 评论5 发布时间:2014-5-12 15:49

举报

5个回答
feel-376797 回答时间:2014-5-12 15:59:48

RE:使用lwip发邮件的注意事项

谢谢楼主分享!
stm32f103vc 回答时间:2014-5-12 17:14:26

RE:使用lwip发邮件的注意事项

多谢朋友支持
沐紫 回答时间:2014-5-15 14:57:43

RE:使用lwip发邮件的注意事项

多谢楼主共享
yklstudent 回答时间:2015-9-30 17:47:58
多些楼主的资料,终于搞明白SMTP的工作过程了
ptiinngg 回答时间:2015-10-1 11:44:33
刚好在搞lwip,感谢楼主分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版