Spring XD - Mail source configuration - how to provide password

亡梦爱人 提交于 2019-12-13 00:26:38

问题


I created a mailstream with following command -------

stream create --name mailstream --definition "mail --host=imap.gmail.com --username=yyyyyyyy12@gmail.com --password=my password | file --dir=/tmp/gmailData" --deploy

Refer -http://docs.spring.io/spring-xd/docs/1.0.0.BUILD-SNAPSHOT/reference/html/#modules

But in the xd-singletone console I get -

Caused by: javax.mail.AuthenticationFailedException: failed to connect, no password specified?

How to resolve this issue.

Also --password=secret - how to keep my password invisible or secret in the XD shell

/shankha


回答1:


You need to escape "@" with "%40" for both username and password and to specify --port=993 for gmail. Also, it may be possible not to work with the default settings as GMail requires SSL for imap and this needs to be configured as well.

So, I would suggest the following (basically, creating a new source module):

  1. Go to spring-xd-1.0.0.M6\xd\modules\source and make a copy of mail folder and name this copy gmail
  2. Go to spring-xd-1.0.0.M6\xd\modules\source\gmail\config and rename both mail.properties and mail.xml to gmail.properties and gmail.xml respectively
  3. Inside gmail.xml replace everything with:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:file="http://www.springframework.org/schema/integration/file"
    xmlns:int-mail="http://www.springframework.org/schema/integration/mail"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/integration/mail http://www.springframework.org/schema/integration/mail/spring-integration-mail.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <channel id="output" />

    <int-mail:mail-to-string-transformer
        charset="${charset}" input-channel="transform" output-channel="output" />

    <beans:beans profile="use-polling">
        <int-mail:inbound-channel-adapter
            store-uri="${protocol}://${username:}:${password:}@${host}:${port}/${folder}"
            channel="transform" should-mark-messages-as-read="${markAsRead}"
            should-delete-messages="${delete}" java-mail-properties="javaMailProperties">
            <poller fixed-delay="${fixedDelay}" time-unit="SECONDS">
                <advice-chain>
                    <beans:bean
                        class="org.springframework.xd.dirt.module.support.ThreadContextClassLoaderSetterAdvice" />
                </advice-chain>
            </poller>
        </int-mail:inbound-channel-adapter>
    </beans:beans>

    <beans:beans profile="use-idle">
        <int-mail:imap-idle-channel-adapter
            store-uri="${protocol}://${username:}:${password:}@${host}:${port}/${folder}"
            channel="transform" auto-startup="true" mail-filter-expression="${expression}"
            should-mark-messages-as-read="${markAsRead}"
            should-delete-messages="${delete}"  java-mail-properties="javaMailProperties">
        </int-mail:imap-idle-channel-adapter>
    </beans:beans>

    <beans:beans profile="default">
        <util:properties id="javaMailProperties">
            <beans:prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</beans:prop>
            <beans:prop key="mail.imap.socketFactory.fallback">false</beans:prop>
            <beans:prop key="mail.store.protocol">imaps</beans:prop>
            <beans:prop key="mail.debug">false</beans:prop>
        </util:properties>
    </beans:beans>
</beans:beans>

4. In XD shell now you will use something like the following to create your stream:

stream create --name myGmailStream --definition "gmail --host=imap.gmail.com --username=yyyyyyyy12%40gmail.com --password=my_password --port=993 | file --dir=/tmp/gmailData" --deploy

Here, please note the following:

  • I added --port=993
  • the username contains "%40" instead of "@"
  • the definition of the stream starts with "gmail
  • if your password contains "@" you need to replace that with "%40" as well

What I've done above is to, basically, create a new custom module (a source) which is kind of easy (more details about this you can find in the documentation). The XD single node or the XD Shell doesn't even need to be restarted. Give it a try and let me know how it goes.




回答2:


Regarding the password that you don't want to appear as part of the stream definition, you can provide it as part of your mail module options, as described here: http://docs.spring.io/spring-xd/docs/1.0.0.BUILD-SNAPSHOT/reference/html/#_module_configuration

ie

<xd_home>/config/modules/source/mail/mail.properties:

password: yourpassword


来源:https://stackoverflow.com/questions/23820831/spring-xd-mail-source-configuration-how-to-provide-password

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!