zoukankan      html  css  js  c++  java
  • SMTP协议详解,发送Email,支持密码验证,发送实例

    出处:ashchen.cublog.cn 作者:ashchen 时间:2007-3-14 20:05:26
    因为用到smtp协议发送邮件,特整理了一下以备后用
    如今smtp发信基本都用验证
    初始有两种打招呼方式 helo ehlo
    EHLO
    250-SMTP.Mydomain.com Hello [192.168.0.1]
    250-8bitmime
    250-BINARYMIME
    250-VRFY
    250-AUTH LOGIN PLAIN CRAM-MD5
    250-AUTH=LOGIN
    250 OK
    验证过程(LOGIN方式)
    >:auth login ---进行用户身份认证
    <:334 VXNlcm5hbWU6 ---BASE64编码“Username:”
    >:Y29zdGFAYW1heGl0Lm5ldA== ----发送BASE64编码的用户名
    <:334 UGFzc3dvcmQ6 ---BASE64编码"Password:"
    >:MTk4MjIxNA== ---客户端发送BASE64编码的密码
    <:235 auth successfully ---成功

    PLAIN方式
    基于明文的SMTP验证,详见:http://www.ietf.org/internet-drafts/draft-ietf-sasl-plain-08.txt
    其发送用户名与口令的格式应该是“<NULL>tim<NULL>tanstaaftanstaaf”。“tim”是用户名,后边的字符串是口令,NULL是ASCII的0(所以无法使用telnet登录)。

    CRAM-MD5方式
    CRAM-MD5即是一种Keyed-MD5验证方式,CRAM是“Challenge-Response Authentication Mechanism”的所写。所谓Keyed-MD5,是将Clieng与Server共享的一个Key作为一部分MD5的输入,正好邮件系统的用户口令可以作为这个Key。具体的交互如下:

    S: * OK IMAP4 Server
    C: A0001 AUTHENTICATE CRAM-MD5
    S: + PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+ -------- Server发送BASE64编码的Timestamp、Hostname等给Client
    C: dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw ------- Client将收到的信息加上用户名和口令,编码为BASE64发送给Server
    S: A0001 OK CRAM authentication successful ----------- Server使用该用户的口令进行MD5运算,如果得到相同的输出则认证成功
    =============================================================
    向支持匿名转发的邮件服务器发送邮件的过程:
    HELO localhost
    mail from:a@a.com  来自哪里
    rcpt to:target@263.net 发给谁
    data
    输入信体内容。回车.结束
    bye 退出

    向验证邮件服务器发送邮件的过程:
    HELO localhost
    auth login
    Y29zdGFAYW1heGl0Lm5ldA 用户名
    Y29zdGFAYW 密码
    mail from:a@a.com  来自哪里
    rcpt to:target@263.net 发给谁
    data
    输入信体内容。回车.结束
    bye 退出
    -----------------------
    还要验看证服务器支持哪种验证方式,实际上验证服务器就是加了一个登录过程,没有此服务器用户就不给转发邮件。

    参考地址
    http://www.sysmgmt.com.cn/article.asp?id=20
    http://www.cnpaf.net/Class/SMTP/0610819014925069617.html

  • 相关阅读:
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
    quartz问题记录-missed their scheduled fire-time
    java(MyEclipse)创建webservice和测试webservice
    Redis wind7 安装
    spring boot新建项目报错总结
    spring boot新建项目启动报:Unregistering JMX-exposed beans on shutdown
    oracle安装过程和创建本地数据库
    正则表达式记录
    java continue与break区别
    Linux查看日志方法总结(1)
  • 原文地址:https://www.cnblogs.com/huqingyu/p/775729.html
Copyright © 2011-2022 走看看