Python论坛  - 讨论区

标题:Fw: Re: Re: Re: [python-chinese] 一个关于smtplib的问题

2004年05月14日 星期五 19:02

charles huang hyy at fjii.com
Fri May 14 19:02:03 HKT 2004

,您好! 

  就login来说,并没有要求用户名和密码一定要分开送,这点从sina上就可以看出来,那么作为一个开发工具,某个函数就只能选择一种来支持,那么对于那些特殊要求的呢?就提供一个底层的接口来支持。
        我觉的出现这样的争论,本身是对开发工具的认识有出入。开发工具不是应用软件(比如foxmail等),他是系统开发工具,不能要求开发工具给你解决问题,开发工具仅仅提供各种功能,问题的解决还是得靠程序员来完成。开发工具的好坏,是看他提供的功能是否丰富、开发是否简便,能否利用开发工具提供的功能解决我们所碰到的问题。
        至于说smtplib中的login函数不能解决这种比较特殊的,一定要求用户名和密码分开送的问题,就没有存在的必要的话。我认为就更加过激了点。至少login能够解决八成的邮件论证问题,就应该能够应付大部分的开发应用,他就应该是好的(更何况smtplib还提供了docmd功能,让我们解决那剩下的一、两成问题)。
        对于封装docmd的好坏,我认为这正是python的优点,我想也应该是所以开发软件所支持的:既提供高级接口,来简便的解决大部分问题,又提供底层接口来解决一些疑难问题。

        一句话,一个功能出现条件判断时(有可能这样,也有可能那样时),这个条件判断要由程序员来完成,而不是由开发工具给你完成。


= = = = = = 下面是转发邮件 = = = = = = =

原邮件发件人名字:Frank Zheng
原邮件发件人地址:hust_zxq524 at 263.net

docmd是用来手工象mailserver发命令的,如果要用这个函数,就得知道smtp协议得命令是怎么样得
我之前就用docmd试过了,我看了smtplib的代码。
不过我想既然smtplib提供了login这个函数,原则就应该用它,而不是去用docmd,因为你要手工向mailserver 发命令,就要熟悉smtp协议,那smtplib模块的存在就没有意义了。
而且我觉得从类封装的角度来讲提供docmd这个函数是不应该得,但是因为python没有私有,保护函数的意义,不得不暴露这个接口。


我不是说这个模块不行,只是觉得就像前面有人说的,开源的东东到底不是工业级的产品,强度上面还差点,就像对"LOGIN"这种认证方式的处理,既然这种方式是微软首创,为什么不和outlook一样呢?如果要用smtplib开发一个工业级的产品,这块肯定需要重新写login这个函数了,而不是想你说的只要用docmd解决就可以,因为还要处理其他的认证方式呢。

这个问题解决起来不难,我已经改好了。

谢谢!


Frank







----- Original Message ----- 
From: charles huang 
To: python-chinese at lists.python.cn 
Sent: Friday, May 14, 2004 12:57 PM
Subject: Re: Re: Re: [python-chinese] 一个关于smtplib的问题


Frank Zheng,您好! 

  这仅仅是格式问题,其实smtplib里有个docmd的函数,可以解决这个问题。按照smtp标准,用户名和密码一起送是没有问题的,就ms的比较特殊,一定要分开送,hotmail就是这样。不过用base64加密一下,在用docmd送一下就ok了。多看看,不要动不动就这个不行,那个不好用。python的封装作的非常好的,即考虑了简单、快速开发,也照顾了底层的应用。

======== 2004-05-14 12:27:52 您在来信中写道: ========

监测了一下outlook的数据,原来263身份验证的过程跟smtplib中的不一样,顺序是:
AUTH LOGIN \r\n
334 USERNAME
myusername
334 PASSWORD 
mypassword


而这个顺序连接sina的也可以
但是smtplib的命令顺序连263的不行,连sina的可以,看来还是得改成上面的顺序才行,微软还是牛啊

smtplib的顺序是:
AUTH LOGIN myusername\r\n
334 PASSWORD 
mypassword

唉,开源的东东还是有些问题啊


----- Original Message ----- 
From: Frank Zheng 
To: python-chinese at lists.python.cn 
Sent: Friday, May 14, 2004 10:53 AM
Subject: Re: Re: [python-chinese] 一个关于smtplib的问题


我下了python2.3.3,是支持login了,不过不是象你说的那么简单,PLAIN和LOGIN的命令序列不是一样的,
PLAIN是一次把用户名密码都发给server,而login是先发用户名等回复再发密码,不同的
新的smtplib里面也是分开处理的
我试了263,不行,返回"error command order"
sina的可以了,挺奇怪的

----- Original Message ----- 
From: charles huang 
To: python-chinese at lists.python.cn 
Sent: Friday, May 14, 2004 8:10 AM
Subject: Re: Re: [python-chinese] 一个关于smtplib的问题


Frank Zheng,您好! 

  2.3已经支持LOGIN了,其实,只要改一下源代码,把PLAIN等于LOGIN就ok了。
      开源软件已支持标准为主,非标准的,只有等等,或者自己改了,方正有源代码。

======== 2004-05-13 16:39:33 您在来信中写道: ========

是呀,我正有这个想法,只是觉得这么明显的问题,怎么以前没有人遇到过,还是人家国外的mail server跟咱们的都不一样。

----- Original Message ----- 
From: 黎达文 
To: python-chinese at lists.python.cn 
Sent: Thursday, May 13, 2004 4:06 PM
Subject: 答复: [python-chinese] 一个关于smtplib的问题


既然代码都有了,改一下它的实现不就行啦?!




发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 Frank Zheng
发送时间: 2004年5月13日 15:16
收件人: python-chinese at lists.python.cn
主题: [python-chinese] 一个关于smtplib的问题


smtplib是python自带的module,是封装了smtp,esmtp协议的模块
我试着用了一下,发现在验证用户名和密码的时候出了一些问题
下面是一些测试代码
>>> import smtplib
>>> s = smtplib.SMTP()
>>> s.set_debuglevel(1)
>>> s.connect('smtp.263.net')
connect: ('smtp.263.net', 25)
connect: ('smtp.263.net', 25)
reply: '220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)\r\n'
reply: retcode (220); Msg: Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)
connect: Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)
(220, 'Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)')
>>> s.login('hust_zxq524','*****')
send: 'ehlo pc11\r\n'
reply: '250-smtp.263.net\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-SIZE 30720000\r\n'
reply: '250-ETRN\r\n'
reply: '250-AUTH LOGIN\r\n'
reply: '250-AUTH=LOGIN\r\n'
reply: '250-XVERP\r\n'
reply: '250 8BITMIME\r\n'
reply: retcode (250); Msg: smtp.263.net
PIPELINING
SIZE 30720000
ETRN
AUTH LOGIN
AUTH=LOGIN
XVERP
8BITMIME
AuthMethod: None
Traceback (most recent call last):
  File "", line 1, in ?
  File "D:\tools\Python22\lib\smtplib.py", line 540, in login
    raise SMTPException("No suitable authentication method found.")
SMTPException: No suitable authentication method found.

然后我看了smtplib的代码,发现它支持两种认证方式,"PLAIN" 和 "CRAM-MD5",采用哪种需要根据发EHLO 命令给mailserver后,server的回复信息来确定(见blue字部分), 所以有效的回复应该是:
AUTH PLAIN CRAM-MD5 
或者至少有一种。
而这里的AUTH LOGIN,我google了一下,发现某人说了这样一段话:

"本质上AUTH PLAIN和AUTH LOGIN是一样的 
用户名和口令都是base64编码的明文,只不过协议命令不一样罢了 

因此要说他们的区别就必须知道SASL协议了: 

SASL协议里面并没有定义AUTH LOGIN,而是定义了与之相同的AUTH PLAIN 
但偏偏Oultook自创AUTH LOGIN,谁让MS太NB,因此sasl的一些实现版本里面就有了AUTH LOGIN
"
然后outlook在发邮件的时候是这样做的:(在发完ehlo命令以后)
AUTH LOGIN
334 VXNlcm5hbWU6                      (Base64解码后: Username:)
Ymh3YW5n                              (Base64编码前: bhwang)
334 UGFzc3dvcmQ6                      (Base64解码后: Password:)
bXlwYXNzd29yZCFteXBhc3N3b3JkISE=      (Base64编码前: ********)
235 Authentication successful

以上验证过程中都没有加密数据,:(
我试了好几个网站,263,sina,sohu都是这样的
这样看来smtplib这个模块是没法用了,我用的是2.2,不知道2.3怎么样?

Frank
Thanks






_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese


= = = = = = = = = = = = = = = = = = = = = = 
        致
礼!

              charles huang
              hyy at fjii.com
                 2004-05-14




_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese




_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese


= = = = = = = = = = = = = = = = = = = = = = 
        致
礼!

              charles huang
              hyy at fjii.com
                 2004-05-14




_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese



= = = = = = = = = = = = = = = = = = = = 
        致
礼! 
                          charles huang
                          hyy at fjii.com
                          2004-05-14
              
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040514/99cbcca7/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年05月17日 星期一 11:00

Frank Zheng hust_zxq524 at 263.net
Mon May 17 11:00:14 HKT 2004

hi,  你好:
    对"LOGIN"这种认证方式的支持是python2.3里面新加的,2.2里面是不支持的,而据说这种认证方式是微软的outlook首创(我是在网上看到有人这么说得,不过RFC2554确实好像没有提"LOGIN"),所以我想pytho2.3既然要支持"LOGIN",而如果真的是微软“发明”的话,为什么不弄得和微软得一样呢。outlook那么多人用,可靠性还是高一些吧。


    我提出这个问题,目的只是告诉大家smtplib有点问题,以后大家用的时候要注意。还没有想上升到什么"开发工具”,“开源软件是否好的问题”之上,我已经给smtplib这个模块的作者写信告诉他们这个问题了。

OK,我想这个问题就到这吧!

谢谢!

Frank



    
  ----- Original Message ----- 
  From: charles huang 
  To: python-chinese at lists.python.cn 
  Sent: Friday, May 14, 2004 7:02 PM
  Subject: Fw: Re: Re: Re: [python-chinese] 一个关于smtplib的问题


  ,您好! 

    就login来说,并没有要求用户名和密码一定要分开送,这点从sina上就可以看出来,那么作为一个开发工具,某个函数就只能选择一种来支持,那么对于那些特殊要求的呢?就提供一个底层的接口来支持。
          我觉的出现这样的争论,本身是对开发工具的认识有出入。开发工具不是应用软件(比如foxmail等),他是系统开发工具,不能要求开发工具给你解决问题,开发工具仅仅提供各种功能,问题的解决还是得靠程序员来完成。开发工具的好坏,是看他提供的功能是否丰富、开发是否简便,能否利用开发工具提供的功能解决我们所碰到的问题。
          至于说smtplib中的login函数不能解决这种比较特殊的,一定要求用户名和密码分开送的问题,就没有存在的必要的话。我认为就更加过激了点。至少login能够解决八成的邮件论证问题,就应该能够应付大部分的开发应用,他就应该是好的(更何况smtplib还提供了docmd功能,让我们解决那剩下的一、两成问题)。
          对于封装docmd的好坏,我认为这正是python的优点,我想也应该是所以开发软件所支持的:既提供高级接口,来简便的解决大部分问题,又提供底层接口来解决一些疑难问题。

          一句话,一个功能出现条件判断时(有可能这样,也有可能那样时),这个条件判断要由程序员来完成,而不是由开发工具给你完成。


  = = = = = = 下面是转发邮件 = = = = = = =

  原邮件发件人名字:Frank Zheng
  原邮件发件人地址:hust_zxq524 at 263.net

          docmd是用来手工象mailserver发命令的,如果要用这个函数,就得知道smtp协议得命令是怎么样得
          我之前就用docmd试过了,我看了smtplib的代码。
          不过我想既然smtplib提供了login这个函数,原则就应该用它,而不是去用docmd,因为你要手工向mailserver 发命令,就要熟悉smtp协议,那smtplib模块的存在就没有意义了。
          而且我觉得从类封装的角度来讲提供docmd这个函数是不应该得,但是因为python没有私有,保护函数的意义,不得不暴露这个接口。


          我不是说这个模块不行,只是觉得就像前面有人说的,开源的东东到底不是工业级的产品,强度上面还差点,就像对"LOGIN"这种认证方式的处理,既然这种方式是微软首创,为什么不和outlook一样呢?如果要用smtplib开发一个工业级的产品,这块肯定需要重新写login这个函数了,而不是想你说的只要用docmd解决就可以,因为还要处理其他的认证方式呢。

          这个问题解决起来不难,我已经改好了。

          谢谢!


          Frank







            ----- Original Message ----- 
            From: charles huang 
            To: python-chinese at lists.python.cn 
            Sent: Friday, May 14, 2004 12:57 PM
            Subject: Re: Re: Re: [python-chinese] 一个关于smtplib的问题


            Frank Zheng,您好! 

              这仅仅是格式问题,其实smtplib里有个docmd的函数,可以解决这个问题。按照smtp标准,用户名和密码一起送是没有问题的,就ms的比较特殊,一定要分开送,hotmail就是这样。不过用base64加密一下,在用docmd送一下就ok了。多看看,不要动不动就这个不行,那个不好用。python的封装作的非常好的,即考虑了简单、快速开发,也照顾了底层的应用。

            ======== 2004-05-14 12:27:52 您在来信中写道: ========

                    监测了一下outlook的数据,原来263身份验证的过程跟smtplib中的不一样,顺序是:
                    AUTH LOGIN \r\n
                    334 USERNAME
                    myusername
                    334 PASSWORD 
                    mypassword


                    而这个顺序连接sina的也可以
                    但是smtplib的命令顺序连263的不行,连sina的可以,看来还是得改成上面的顺序才行,微软还是牛啊

                    smtplib的顺序是:
                    AUTH LOGIN myusername\r\n
                    334 PASSWORD 
                    mypassword

                    唉,开源的东东还是有些问题啊


                    ----- Original Message ----- 
                      From: Frank Zheng 
                      To: python-chinese at lists.python.cn 
                      Sent: Friday, May 14, 2004 10:53 AM
                      Subject: Re: Re: [python-chinese] 一个关于smtplib的问题


                      我下了python2.3.3,是支持login了,不过不是象你说的那么简单,PLAIN和LOGIN的命令序列不是一样的,
                      PLAIN是一次把用户名密码都发给server,而login是先发用户名等回复再发密码,不同的
                      新的smtplib里面也是分开处理的
                      我试了263,不行,返回"error command order"
                      sina的可以了,挺奇怪的

                        ----- Original Message ----- 
                        From: charles huang 
                        To: python-chinese at lists.python.cn 
                        Sent: Friday, May 14, 2004 8:10 AM
                        Subject: Re: Re: [python-chinese] 一个关于smtplib的问题


                        Frank Zheng,您好! 

                          2.3已经支持LOGIN了,其实,只要改一下源代码,把PLAIN等于LOGIN就ok了。
                              开源软件已支持标准为主,非标准的,只有等等,或者自己改了,方正有源代码。

                        ======== 2004-05-13 16:39:33 您在来信中写道: ========

                                是呀,我正有这个想法,只是觉得这么明显的问题,怎么以前没有人遇到过,还是人家国外的mail server跟咱们的都不一样。

                                ----- Original Message ----- 
                                From: 黎达文 
                                To: python-chinese at lists.python.cn 
                                Sent: Thursday, May 13, 2004 4:06 PM
                                Subject: 答复: [python-chinese] 一个关于smtplib的问题


                                既然代码都有了,改一下它的实现不就行啦?!



------------------------------------------------
                                发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 Frank Zheng
                                发送时间: 2004年5月13日 15:16
                                收件人: python-chinese at lists.python.cn
                                主题: [python-chinese] 一个关于smtplib的问题


                                smtplib是python自带的module,是封装了smtp,esmtp协议的模块
                                我试着用了一下,发现在验证用户名和密码的时候出了一些问题
                                下面是一些测试代码
                                >>> import smtplib
                                >>> s = smtplib.SMTP()
                                >>> s.set_debuglevel(1)
                                >>> s.connect('smtp.263.net')
                                connect: ('smtp.263.net', 25)
                                connect: ('smtp.263.net', 25)
                                reply: '220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)\r\n'
                                reply: retcode (220); Msg: Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)
                                connect: Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)
                                (220, 'Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)')
                                >>> s.login('hust_zxq524','*****')
                                send: 'ehlo pc11\r\n'
                                reply: '250-smtp.263.net\r\n'
                                reply: '250-PIPELINING\r\n'
                                reply: '250-SIZE 30720000\r\n'
                                reply: '250-ETRN\r\n'
                                reply: '250-AUTH LOGIN\r\n'
                                reply: '250-AUTH=LOGIN\r\n'
                                reply: '250-XVERP\r\n'
                                reply: '250 8BITMIME\r\n'
                                reply: retcode (250); Msg: smtp.263.net
                                PIPELINING
                                SIZE 30720000
                                ETRN
                                AUTH LOGIN
                                AUTH=LOGIN
                                XVERP
                                8BITMIME
                                AuthMethod: None
                                Traceback (most recent call last):
                                  File "", line 1, in ?
                                  File "D:\tools\Python22\lib\smtplib.py", line 540, in login
                                    raise SMTPException("No suitable authentication method found.")
                                SMTPException: No suitable authentication method found.

                                然后我看了smtplib的代码,发现它支持两种认证方式,"PLAIN" 和 "CRAM-MD5",采用哪种需要根据发EHLO 命令给mailserver后,server的回复信息来确定(见blue字部分), 所以有效的回复应该是:
                                AUTH PLAIN CRAM-MD5 
                                或者至少有一种。
                                而这里的AUTH LOGIN,我google了一下,发现某人说了这样一段话:

                                "本质上AUTH PLAIN和AUTH LOGIN是一样的 
                                用户名和口令都是base64编码的明文,只不过协议命令不一样罢了 

                                因此要说他们的区别就必须知道SASL协议了: 

                                SASL协议里面并没有定义AUTH LOGIN,而是定义了与之相同的AUTH PLAIN 
                                但偏偏Oultook自创AUTH LOGIN,谁让MS太NB,因此sasl的一些实现版本里面就有了AUTH LOGIN
                                "
                                然后outlook在发邮件的时候是这样做的:(在发完ehlo命令以后)
                                AUTH LOGIN
                                334 VXNlcm5hbWU6                      (Base64解码后: Username:)
                                Ymh3YW5n                              (Base64编码前: bhwang)
                                334 UGFzc3dvcmQ6                      (Base64解码后: Password:)
                                bXlwYXNzd29yZCFteXBhc3N3b3JkISE=      (Base64编码前: ********)
                                235 Authentication successful

                                以上验证过程中都没有加密数据,:(
                                我试了好几个网站,263,sina,sohu都是这样的
                                这样看来smtplib这个模块是没法用了,我用的是2.2,不知道2.3怎么样?

                                Frank
                                Thanks





------------------------------------------------


                                _______________________________________________
                                python-chinese list
                                python-chinese at lists.python.cn
                                http://python.cn/mailman/listinfo/python-chinese
                             

                        = = = = = = = = = = = = = = = = = = = = = = 

                                致
                        礼!


                                      charles huang
                                      hyy at fjii.com
                                         2004-05-14



--------------------------------------------------------


                        _______________________________________________
                        python-chinese list
                        python-chinese at lists.python.cn
                        http://python.cn/mailman/listinfo/python-chinese



----------------------------------------------------------


                      _______________________________________________
                      python-chinese list
                      python-chinese at lists.python.cn
                      http://python.cn/mailman/listinfo/python-chinese
                 

            = = = = = = = = = = = = = = = = = = = = = = 

                    致
            礼!


                          charles huang
                          hyy at fjii.com
                             2004-05-14



--------------------------------------------------------------------


            _______________________________________________
            python-chinese list
            python-chinese at lists.python.cn
            http://python.cn/mailman/listinfo/python-chinese
       


  = = = = = = = = = = = = = = = = = = = = 
          致
  礼! 
                            charles huang
                            hyy at fjii.com
                            2004-05-14
                


------------------------------------------------------------------------------


  _______________________________________________
  python-chinese list
  python-chinese at lists.python.cn
  http://python.cn/mailman/listinfo/python-chinese

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040517/2d117d92/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号