SubethaSmtp 工作示例

Man*_* SK 0 java email gmail inbox

你能告诉我如何使用SubethaSmtp库吗?我只想从我的 Gmail 收件箱中检索邮件并在控制台窗口中显示它们或其中之一。

我研究了大部分 API 文档,但我无法将各个部分放在一起以使事情正常工作。

你能告诉我一个有效的例子吗?

我写了这段代码来构建一个 grails 应用程序。您可能会发现一些不好的代码习惯,但这对于示例应用程序来说是没问题的。

这是 src/groovy 文件夹中的代码:

class MessageHandlerFactoryImpl implements MessageHandlerFactory {

    @Override
    MessageHandler create(MessageContext ctx) {
        return new MessageHandlerImpl(ctx)
    }
}
Run Code Online (Sandbox Code Playgroud)
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"

    }
}
Run Code Online (Sandbox Code Playgroud)
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}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
class UsernamePasswordValidatorImpl implements UsernamePasswordValidator {
    @Override
    void login(String username, String password) {
        try {

            println "LOGIN:::::::"
        }   catch(LoginFailedException e) {
            println "LoginFailedException: ${e.message}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码。

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()
    }


}
Run Code Online (Sandbox Code Playgroud)

谢谢。

Man*_* SK 5

好吧...我找到了答案...代码写得很好,工作正常。我只是不知道如何向端口上的侦听smtp 服务器发送消息。我只是使用telnet程序并将电子邮件发送到在localhost 上运行的smtp 服务器。现在我将创建DNS 映射以使其在 Internet 上工作。

感谢 Nicolás 表现出您的兴趣。