2014-04-01 209 views
0

您能否告訴我如何使用SubethaSmtp庫?我只想從我的Gmail收件箱中檢索郵件,並在控制檯窗口中顯示它們或其中一個。SubethaSmtp工作示例

我研究了大部分的API文檔,但我無法將這些部分放在一起以獲得正常工作。

你能告訴我一個有效的例子嗎?

我寫了這段代碼來構建一個grails應用程序。你可能會發現一些不好的代碼習慣,但它對於一個示例應用程序來說很重要。

這裏在src /常規文件夾的代碼:

class MessageHandlerFactoryImpl implements MessageHandlerFactory { 

    @Override 
    MessageHandler create(MessageContext ctx) { 
     return new MessageHandlerImpl(ctx) 
    } 
} 

class MessageHandlerImpl implements MessageHandler { 

    MessageContext context 

    MessageHandlerImpl(MessageContext context) { 
     this.context = context 
    } 

    @Override 
    void from(String from) { 
     println "FROM: ${from}" 
    } 

    @Override 
    void recipient(String recipient) { 
     println "RECIPIENT: ${recipient}" 

    } 

    @Override 
    void data(InputStream data) { 
     println "DATA" 
     println "-------------------" 

     BufferedReader reader = new BufferedReader(new InputStreamReader(data)) 
     StringBuilder builder = new StringBuilder() 
     String line 
     while ((line = reader.readLine()) != null) { 
      builder.append(line + "\n") 
     } 
     println builder.toString() 
    } 

    @Override 
    void done() { 
     println "DONE" 

    } 
} 

class SimpleMessageListenerImpl implements SimpleMessageListener { 
    @Override 
    boolean accept(String from, String recipient) { 
     println "accept: ${from} \n>> ${recipient}" 
     return false 
    } 

    @Override 
    void deliver(String from, String recipient, InputStream data) { 
     try { 
      println "deliver: ${from} \n>> ${recipient} \n>>> ${data.read()}" 
     } catch (TooMuchDataException e) { 
      println "TooMuchDataException: ${e.message}" 
     } catch (IOException e) { 
      println "IOException: ${e.message}" 
     } 
    } 
} 

class UsernamePasswordValidatorImpl implements UsernamePasswordValidator { 
    @Override 
    void login(String username, String password) { 
     try { 

      println "LOGIN:::::::" 
     } catch(LoginFailedException e) { 
      println "LoginFailedException: ${e.message}" 
     } 
    } 
} 

這裏是我的控制器代碼。

class SubethaController { 

    SMTPServer server 
    def index() { 

     MessageHandlerFactoryImpl factory = new MessageHandlerFactoryImpl() 
     server = new SMTPServer(factory) 
     server.hostName = "imap.gmail.com" 
     server.port = 993 
     server.authenticationHandlerFactory = new EasyAuthenticationHandlerFactory(new UsernamePasswordValidatorImpl()) 
     server.start() 
    } 

    def stop() { 
     server?.stop() 
    } 

    Wiser wiser 
    def wiser() { 
     server = new SMTPServer(new SimpleMessageListenerAdapter(new SimpleMessageListenerImpl())) 
     server.start() 
     wiser = new Wiser() 
     wiser.setPort(25001) 
     wiser.start() 

     for (WiserMessage message : wiser.getMessages()) 
     { 
      String eSender = message.getEnvelopeSender() 
      String eReceiver = message.getEnvelopeReceiver() 

      println ">>>>>>>message.getMimeMessage ${message.getMimeMessage()}" 
     } 
    } 
    def wiserS() { 
     wiser?.stop() 
    } 


} 

感謝。

+1

Google.com:subethasmtp示例 –

+0

是的,我搜索了很多Google。圖書館附帶的簡單例子不是很有用。你能特別告訴我哪個例子或文檔? –

+0

沒有。你試過什麼了?如果你不能付出任何努力,我不會浪費時間做你的工作。當我說'努力'時,我的意思是實際的代碼,即使它是錯誤的。 –

回答

4

Okey ...我找到了答案...代碼寫得很好,工作正常。我只是不知道如何發送消息來偵聽smtp服務器端口。我只用telnet程序併發送郵件到smtp服務器運行在本地主機。現在我將創建DNS映射以使其在Internet上工作。

感謝Nicolás對你的興趣。