国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - 501 Command "HELO" requires an argument問題的解決方法

501 Command "HELO" requires an argument問題的解決方法

2019-10-11 11:41java教程網(wǎng) Java教程

換一個windows服務(wù)器,發(fā)現(xiàn)就沒這樣的問題,僅在一臺Linux服務(wù)器上可以重現(xiàn),直觀感覺就是這臺Linux服務(wù)器某些配置有問題

場景描述:
保存郵箱配置時自動探測郵箱配置參數(shù)是否正確,結(jié)果發(fā)現(xiàn)在探測SMTP時,系統(tǒng)報出如下異常:

復(fù)制代碼代碼如下:

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服務(wù)器,發(fā)現(xiàn)就沒這樣的問題,僅在一臺Linux服務(wù)器上可以重現(xiàn),直觀感覺就是這臺Linux服務(wù)器某些配置有問題。

排查步驟
1. 找一臺同樣操作系統(tǒng)的Linux服務(wù)器,驗證郵箱配置,ok,排除Linux操作系統(tǒng)特殊性的問題
2. 直接在Linux服務(wù)器上使用telnet連接對端郵件服務(wù)器的SMTP端口,OK,排除該服務(wù)器的網(wǎng)絡(luò)問題
3. 查找HELO指令解釋

復(fù)制代碼代碼如下:

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.


發(fā)現(xiàn)HELO指令后面需要跟一個發(fā)起者的主機名,告訴SMTP服務(wù)器這個消息來源是哪里。
再看異常信息是"501 Command "HELO" requires an argument",很明顯,程序在跟SMTP SERVER交互過程中沒有傳遞源主機域名。

 

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

復(fù)制代碼代碼如下:

        /**
         * Issue the <code>HELO</code> 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方法在哪里被調(diào)用,看看domain如何被傳遞過來的

復(fù)制代碼代碼如下:

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


順理成章,接著找getLocalHost()方法,定義如下:

復(fù)制代碼代碼如下:

        /**
         * 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() <= 0)
                                localHostName = session.getProperty("mail." + name + ".localhost");
                        if (localHostName == null || localHostName.length() <= 0)
                                localHostName = session.getProperty("mail." + name+ ".localaddress");
                        if (localHostName == null || localHostName.length() <= 0) {
                                InetAddress localHost = InetAddress.getLocalHost();
                                localHostName = localHost.getHostName();
                                // if we can't get our name, use local address literal
                                if (localHostName == null)
                                        // XXX - not correct for IPv6
                                        localHostName = "[" + localHost.getHostAddress() + "]";
                        }
                } catch (UnknownHostException uhex) {
                }
                return localHostName;
        }


可以看到hostname的獲取可以通過當(dāng)前連接的session屬性中獲取,也可以從當(dāng)前服務(wù)器的hosts配置中獲取,而我們程序是沒有在session中設(shè)置hostname的,因此原因肯定在于該臺Linux服務(wù)器的hosts文件被修改,造成JAVA程序無法自動獲得localhostName。

 

5. 查看/etc/hosts文件,情況如下:

復(fù)制代碼代碼如下:

127.0.0.1              localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6


簡單的將hosts文件修改如下:

復(fù)制代碼代碼如下:

127.0.0.1       localhost
::1             localhost6.localdomain6 localhost6


6. 重新測試,問題解決了。 
其實,這種情況也可以通過程序避免,即在session連接中加入當(dāng)前服務(wù)器的hostname屬性,程序示例:

復(fù)制代碼代碼如下:

        public static void main(String[] args) {
                try {
                        int smtpport = 25;
                        String smtpserver = "219.147.xxx.xxx";
                        Properties prop = System.getProperties();
                        prop.put("mail.smtp.auth", "true");
                        prop.put("mail.smtp.localhost", "myMailServer");
                        Session mailSession = Session.getInstance(prop, null);
                        Transport transport = mailSession.getTransport("smtp");
                        transport.connect(smtpserver,smtpport, "username", "password");
                        System.out.println("connect ok");
                        transport.close();
                } catch (AuthenticationFailedException en) {
                        en.printStackTrace();
                        System.out.println("smtp服務(wù)器連接失敗,請檢查輸入信息是否正確");
                } catch (NoSuchProviderException e) {
                        e.printStackTrace();
                        System.out.println("smtp服務(wù)器連接失敗,請檢查輸入信息是否正確");
                } catch (MessagingException e) {
                        e.printStackTrace();
                        System.out.println("smtp服務(wù)器連接失敗,請檢查輸入信息是否正確");
                }
        }

延伸 · 閱讀

精彩推薦
  • Java教程淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...

    LJY_SUPER5742021-07-21
  • Java教程JAVA中通過自定義注解進行數(shù)據(jù)驗證的方法

    JAVA中通過自定義注解進行數(shù)據(jù)驗證的方法

    java 自定義注解驗證可自己添加所需要的注解,下面這篇文章主要給大家介紹了關(guān)于JAVA中通過自定義注解進行數(shù)據(jù)驗證的相關(guān)資料,文中通過示例代碼介紹...

    Decouple6362021-05-25
  • Java教程JavaWeb 實現(xiàn)驗證碼功能(demo)

    JavaWeb 實現(xiàn)驗證碼功能(demo)

    在 WEB-APP 中一般應(yīng)用于:登錄、注冊、買某票、秒殺等場景,大家都接觸過這個驗證碼操作,今天小編通過實例代碼給大家講解javaweb實現(xiàn)驗證碼功能,需要...

    java教程網(wǎng)12832020-08-05
  • Java教程Java list.remove( )方法注意事項

    Java list.remove( )方法注意事項

    這篇文章主要介紹了Java list.remove( )方法注意事項,非常簡單易懂,需要的朋友可以參考下...

    妖久9552021-05-25
  • Java教程Java之Springcloud Feign組件詳解

    Java之Springcloud Feign組件詳解

    這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    深情以改10322021-11-12
  • Java教程java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關(guān)資料,需要的朋友可以參考下...

    Java之家3092020-08-13
  • Java教程springboot ehcache 配置使用方法代碼詳解

    springboot ehcache 配置使用方法代碼詳解

    EhCache是一個比較成熟的Java緩存框架,Springboot對ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也簡易,今天給大家分享spri...

    m1719309529412912021-09-16
  • Java教程SpringBoot引入Thymeleaf的實現(xiàn)方法

    SpringBoot引入Thymeleaf的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot引入Thymeleaf的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下...

    Bobby6472021-07-28
609
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一本大道伊人久久综合 | 欧美性网 | 能看的av网站 | 国产九九九 | 一级全黄少妇性色生活片免费 | av资源中文在线 | 97超碰免费 | 欧美成人精品一区二区三区 | 国产精品久久久久久久午夜 | 日本黄色大片 | 日本一二三视频 | 午夜精品一区二区三区在线视频 | 成人黄色av | 国产精品日韩在线观看 | 成人午夜精品 | 伊人久久乐 | 欧美日韩国产中文 | 性做久久久久久 | 日本视频免费高清一本18 | 午夜精品影院 | 国产人体视频 | 国产一区二区精品丝袜 | 成人免费黄色片 | 亚洲伊人久久综合 | 性做久久久久久久免费看 | 中国一级黄色毛片视频 | 国内自拍视频网 | 国产精品爱久久久久久久 | 91天堂| 国产精品一区二区三区免费视频 | 欧美一区永久视频免费观看 | 夜夜爽av福利精品导航 | 久久福利电影 | 免费国产一区二区 | 日韩视频精品在线 | 久久久999精品视频 午夜精品久久久久久久久久久久 | 欧美日韩成人在线播放 | 国产成人精品一区二 | 免费a视频 | 午夜a区| 毛片在线视频 |