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

使用lwip发邮件的注意事项

[复制链接]
stm32f103vc 发布时间:2014-5-12 15:49
1.只有在lwip1.4.1版本下实现的例子中有对smtp协议的实现。之前的版本没有实现smtp协议。
3 |( \) v& z' j- U, y* i ( u6 @$ x( K- i8 Z. Z: E' o
2.smtp是基于tcp协议进行传输的,实质是对文本进行解析。
3 Y+ F: n/ p, R 5 j! K, c) `! q4 S+ G3 b/ h# T* L" q
3.其发送邮件的过程可以通过windows下的telnet程序和邮件服务器交互实现。具体过程如下:
: z8 B" u5 e! j& h3 ~# X/ F首先进入cmd界面,输入telnet smtp.sina.com 25(这里的smtp.sina.com和25分别是smtp服务器和端口号)
( l7 K( d: L2 J! F# H7 q1 @/ B连接成功后,输入ehlo smtp.sina.com,返回服务器支持的操作,每项操作以"250"开始。
/ p: E7 @) i$ R# d" `
4 Y1 S! |' a# p: T' E/ G' H+ }: k( F输入auth login。一般的服务器会返回334 VXNlcm5hbWU6,意思是要求输入用户名,即你的邮箱地址。
; z! F3 L+ \# `* I; NVXNlcm5hbWU6是对user的base64编码。这里需要输入你的邮箱地址,这个地址是需要经过base64编码后的地址。) `8 }! y, b$ U
服务器返回334 UGFzc3dvcmQ6。意思是需要你输入密码,UGFzc3dvcmQ6为password的base64编码。这里需要输入你经过base64编码后的密码。如果用户名密码正确,服务器将返回235,验证通过,已验证,验证成功等提示,不同的邮箱提示不同。这意味着你可以发邮件了。否则意味着验证失败。
" S, N6 Q% _, Y7 p9 u
" x4 I; h: \+ M0 ]& E/ ^" v" R. F验证通过之后,就可以不用base64编码了。- N4 K; i9 ?  q" O
输入mail from: 回车,填写发件人地址。返回250 ok。
9 u8 M6 Y, l% ^6 ^7 H$ L# v输入rcpt to: 回车,填写收件人地址。返回250 ok。+ @3 y" U$ u/ N, ]
输入data回车,返回提示,以CRLF . CRLF作为数据结束标志,这时可以输入邮件的标题,邮件等内容。返回250 ok queue id xxxxxx,表示邮件发送成功。
# i- h; ^) v2 c/ S! }在smtp.c中实现的也是对这些命令的解析,smtp服务器对命令的响应是一个字符串。格式为一个数字+响应的说明。数字如果以2开头表示成功,4,5开头表示失败。
3 X' b0 `' M. E8 r7 w' c 9 o4 N, G) |0 s& c4 ^
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不同9 k. V2 ^' T7 l  t
 * |+ i* w1 N6 X% u6 x
5.对邮箱的测试结果为:可以通过smtp.163.com,smtp.sina.com,smtp.139.com以及高校的邮箱发送数据。其中163邮箱服务器发现异常,会暂时停止该ip的身份验证,发邮件等操作。qq,gmail则使用安全连接发送邮件,在输入auth login之后便提示失败需要安全连接。所以无法使用smtp.c发送邮件。
, U: h  ?% E5 l" L / ^$ N7 C6 h! x  t# {0 Y4 n
注:base64编码是,将一个bit流中的数据按照6bit一组作为索引,查找一个预先确定的字符数组中的字符作为编码后的第一个字符,再从原来的比特流中取6个bit,查表取的第二个编码后的字符。以此类推,将整个bit流转化成base64编码。6个bit一共可以表示64个字符。所以这个字符数组是一个长度为64的字符数组。在lwip的smtp.c文件中叫做base64_table。
( u' V+ z) r4 u  h* ]6 N
3 d; O; e7 a4 ~! w3 J" E0 i' X/ U; w0 A" ^$ n6 W4 D  ^
 
收藏 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 手机版