当前位置:  编程技术>java/j2ee

501 Command "HELO" requires an argument问题的解决方法

    来源: 互联网  发布时间:2014-10-27

    本文导语:  场景描述:保存邮箱配置时自动探测邮箱配置参数是否正确,结果发现在探测SMTP时,系统报出如下异常: 代码如下:javax.mail.MessagingException: 501 Command "HELO" requires an argument        at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTranspor...

场景描述:
保存邮箱配置时自动探测邮箱配置参数是否正确,结果发现在探测SMTP时,系统报出如下异常:

代码如下:

javax.mail.MessagingException: 501 Command "HELO" requires an argument
        at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363)
        at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375)
        at javax.mail.Service.connect(Service.java:275)

但是换一个windows服务器,发现就没这样的问题,仅在一台Linux服务器上可以重现,直观感觉就是这台Linux服务器某些配置有问题。

排查步骤
1. 找一台同样操作系统的Linux服务器,验证邮箱配置,ok,排除Linux操作系统特殊性的问题
2. 直接在Linux服务器上使用telnet连接对端邮件服务器的SMTP端口,OK,排除该服务器的网络问题
3. 查找HELO指令解释
代码如下:

HELO
-- Initiates a conversation with the mail server. When using this command you can specify your domain name so that the mail server knows who you are. For example, HELO mailhost2. cf.ac.uk.

发现HELO指令后面需要跟一个发起者的主机名,告诉SMTP服务器这个消息来源是哪里。
再看异常信息是"501 Command "HELO" requires an argument",很明显,程序在跟SMTP SERVER交互过程中没有传递源主机域名。

4. 查看JAVA MAIL源码
查找HELO指令,如下:

代码如下:

        /**
         * Issue the HELO command.
         *
         * @param domain
         *            our domain
         *
         * @since JavaMail 1.4.1
         */
        protected void helo(String domain) throws MessagingException {
                if (domain != null)
                        issueCommand("HELO " + domain, 250);
                else
                        issueCommand("HELO", 250);
        }

查找helo方法在哪里被调用,看看domain如何被传递过来的
代码如下:

                if (useEhlo)
                        succeed = ehlo(getLocalHost());
                if (!succeed)
                        helo(getLocalHost());

顺理成章,接着找getLocalHost()方法,定义如下:
代码如下:

        /**
         * Get the name of the local host, for use in the EHLO and HELO commands.
         * The property mail.smtp.localhost overrides mail.smtp.localaddress, which
         * overrides what InetAddress would tell us.
         */
        public synchronized String getLocalHost() {
                try {
                        // get our hostname and cache it for future use
                        if (localHostName == null || localHostName.length()

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解决bash: mysql: command not found 的方法
  • mysql出现Error performing load command的解决方法
  • bash scp command not found的解决方法
  • ON_COMMAND_RANGE多个按钮响应一个函数的解决方法
  • java命名空间java.lang类processbuilder的类成员方法: command定义及介绍
  • system(command) 与 command 的区别
  • java命名空间java.lang类compiler的类成员方法: command定义及介绍
  • Command Line Progress Bar
  • java命名空间javax.swing接口action的类成员方法: action_command_key定义及介绍
  • help,please:command not found
  • HTML <command> 标签
  • (菜鸟问题)command not found
  • C中用system系统调用执行command,执行过程中死锁,如何处理?
  • fd = popen(command, "r")怎么获取fd长度啊
  • about chmod command
  • 关于fedora 14 command not found的问题
  • 怎样在LINUX的COMMAND LINE下编辑文本。
  • 哪里有Runtime.exec()关于各钟command的用法?
  • 菜菜的问:command not found
  • 命令行输入mysql -uroot ,提示:command not found
  • root.sh: command not found
  • bash :ifconfig:command not found 为什么呢 ?
  • 内核配置default kernel command string中的含义
  • bash command 問題
  • command not found ?????




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3