问题1:如何判断收件人的服务器支持smtp?如  [email protected]就不支持问题2:如何根据邮件地址得到smtp服务器地址?如知道[email protected]怎么得到163.com上的smtp服务器地址问题3:密码认证的问题怎么解决,这个是最想知道的!

解决方案 »

  1.   

    我来回答所有问题1、hotmail.com不是不支持smtp,只是没有pop3。smtp是邮件系统核心协议,没有它是发不了信的。所有几乎真实邮件地址都有SMTP服务器,否则这个邮件地址就不能接受信件。@符号后面是域,只要这个域是真实的,并且有邮件交换服务器,又存在SMTP服务。2、又邮件地址后面的部分得到域名,向DNS服务器查询该域名的mx记录,如果返回空主机列表,尝试查询A记录,取得主机,这里也失败,则这个域不存在或者DNS服务器不通或者DNS服务器故障,这里没有失败,则尝试连接A记录主机25端口,如果成功,按照SMTP发送信件,如果失败则这个域没有邮件服务器或者邮件服务器不通;如果返回的是一个主机,则连接到这个主机发送信件,如果返回是多个主机构成的主机列表,按照优先级排列,一次尝试服务器,对于同一优先级就随机选择,这里就可以得到主机地址了3、如果发信人的邮件地址在收信人所在的域中,一般需要使用发信认证,但是各服务器之间发信并没有使用发信认证,一般服务器回检查发信人邮件地址,如果发信人邮件地址中的域属于本服务其中服务的域则需要提供用户密码,所以我们可以伪造发信人地址,使得发信人和收信人不在同一个域。有些服务器回检查域名和IP地址的对应关系,所以可以申请一个免费的动态域名将动态域名(eg:dydsn.dns4u.com)和IP地址绑定,将发信人邮件地址设定为[email protected],一般可以绕过发信认证,不过如果对方服务器将您的机器IP地址认定为是垃圾邮件来源,那就信件就不会发送成功的(但是我们可以通过其他服务其中转)如果还有什么问题,联系我
      

  2.   

    我的理解是
    假设邮件的发件人是[email protected]   收件人是[email protected]
    1.通过中间smtp服务器发送
    我要把邮件发给a.com让他跟我发到b.com去,这时一般来说a.com都要验证,而且有的还要验证发件人是否是[email protected]
    2.直接发送到收件人地址的邮件服务器
    a.com发送该邮件到b.com而不用验证的原因是因为收件人的地址在b.com上???
      

  3.   

    从a.com发到b.com这段过程是不需要验证的,可能也存在源主机信任验证的过程。根据EMail:[email protected]就可以得出SMTP服务器的域名可能是
    smtp.163.com
    smtp.163.com.cn
    www.163.com
      

  4.   

    当然,如果b.com不让a.com给他发信,信当然不可能发送成功
    有时候b.com会检测a.com和IP地址是否符合
      

  5.   

    邮件头解析使用正则表达式比较好。
    信件的解析的代码网上有很多,解析MIME的代码就可以。
      

  6.   

    1.连接 服务器的ip端口 25.发送helo,如果返回250.则支持smtp.
    2.3楼说得很好啦 .
    3.连接到服务器后,先发送helo\r\n,再发送auth login\r\n后,服务器返回base64加密的password,输入你的经base64加密的用户名,返回base64加密的password后输入你的base64加密的密码.然后吗.mail from:...
      

  7.   

    sorry.
    3.连接到服务器后,先发送helo\r\n,再发送auth login\r\n后,服务器返回base64加密的username,输入你的经base64加密的用户名,返回base64加密的password后输入你的base64加密的密码.然后吗.mail from:...
      

  8.   

    信件发送过程可以使用强大的JMail组件