首页 新闻 赞助 找找看

关于uIP0.9中的smtp客户端程序

0
悬赏园豆:40 [已解决问题] 解决于 2013-01-31 16:01

大家好:

不知哪些兄弟有用过uIP0.9中的smtp客户端程序的?我现遇到了问题,就是它里面的smtp_configure函数只有配置smtp服务器的IP地址(这个应该是相对于可匿名访问的smtp服务器的),而我们公司的smtp服务器是需要验证的,需要用户名和密码,而uIP0.9的原作者在它的smtp.c文件中并没有实现登录的功能,我看到smtp.c文件的senddata函数只是发送了如下命令:

1、HELO

2、MAIL FROM

3、RCPT TO

4、DATA

少了在步骤1后面的AUTH LOGIN这个验证步骤,这里在Keil51中我不知道怎么实现,望各位大侠帮下忙,真的很急的,谢谢了!

健美明星的主页 健美明星 | 初学一级 | 园豆:101
提问于:2013-01-21 10:56
< >
分享
最佳答案
0

刚才搜了下,SMTP协议里面真的有auth login这个命令,我out了。

协议里是这样描述的,当客户端发送HELLO至Server的时候,Server回复一个250 的时候,后面可以选择跟着AUTH LOGIN。具体交互如下(网上找到的)

C:HELLO

S:250-AUTH LOGIN

C:auth login ------------------------------------------------- 进行用户身份认证
S:334 VXNlcm5hbWU6 ----------------------------------- BASE64编码“Username:”
C:Y29zdGFAYW1heGl0Lm5ldA== ----------------------------------- 用户名,使用BASE64编码
S:334 UGFzc3dvcmQ6 -------------------------------------BASE64编码"Password:"
C:MTk4MjIxNA== ----------------------------------------------- 密码,使用BASE64编码
S:235 auth successfully -------------------------------------- 身份认证成功

后面还是老套的mailfrom等,直到最后的QUIT。如果代码不会写,我可以帮你写,不过需要酬金的哦。对了,那个250-AUTH后面跟的不一定是LOGIN。有好几种鉴权方式。具体还是找RFC标准看下吧。

 

这样看起来,你应该知道怎么写了吧。

收获园豆:40
BLoodMaster | 初学一级 |园豆:135 | 2013-01-23 02:05

你好!

谢谢你的答复,代码就不用你代劳了。我是觉得奇怪,有如下的现象:

1、我使用telnet连接到我公司的SMTP服务器(在新加坡),可以连接成功,并且不用用户认证就可以用它来发出邮件,不过只能发到内部网络,如果要发到外部邮箱,如QQ,网易等则需要用户认证。

2、我使用本机IIS自带的SMTP服务器,然后将单片机内的程序指向我本机的IP地址就可以发出邮件,而却不能直接连接到公司的SMTP服务器。为什么我本机的outlook等程序可以直接访问新加坡那边的SMTP服务器,而我的单片机却不能呢?单片机和我本机都在同一个网络中啊!

健美明星 | 园豆:101 (初学一级) | 2013-01-23 11:56

@健美明星: 

1、鉴权不是SMTP基本协议中必须具备的,各个公司的SMTP服务器对于协议的实现也都不是统一的。你公司的邮件服务器可能没实现鉴权,也可能兼容了鉴权与不鉴权的两种情形。

2、从你的描述,如果你本机的邮件服务器与你本机IIS自带的邮件服务器对于协议的实现一致的话,那么要考虑的就是你单片机程序对于网络的一些信号的处理了,如果你的单片机是处于非应用层编程,你先试验下别的tcp方面的能否连接到新加坡那边,可能网络或传输层的问题

BLoodMaster | 园豆:135 (初学一级) | 2013-01-23 13:54

@BLoodMaster: 

有可能是像你说的,我的单片机上的smtp协议的实现和我本机的实现是不一致的,我看了uIP0.9的smtp的实现,它的过程就是先用uip_connect(ip, port)这个函数连接到邮箱服务器的25端口,然后再发送与smtp服务器进行交流的那些命令,如HELO, MAIL FROM, RCPT TO, DATA等,我在本机使用过telnet方式与新加坡的smtp服务器进行连接并发送邮件是可以的。

我试了让新加坡那边的同事用ping我的这个单片机,他们说有时可以通,有时不能通,这表示远程连接网络有问题。

健美明星 | 园豆:101 (初学一级) | 2013-01-24 10:13

这个问题我已经搞定了,把登录到smtp的服务器的代码已添加上去了,谢谢你!

健美明星 | 园豆:101 (初学一级) | 2013-01-31 16:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册