web-dev-qa-db-ja.com

Gmail用にSpring JavaMailSenderImplを構成する方法

JavaMailSenderImplクラスを使用してGmail SMTPサーバーに接続するために使用する正しいプロパティを見つけようとしています。

最初に here が見つかったアプローチを試みたと言いましょう。これはうまくいきました。しかし、まったく同じ認証情報を使用してその投稿の下の構成を試みたときに、javax.mail.AuthenticationFailedExceptionを受け取りました。

私の現在の構成は次のようになります。

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>

資格情報が正しいことがわかっているのに、なぜこのjavax.mail.AuthenticationFailedExceptionが引き続き発生するのですか。

更新

以下は、以下の回答に基づいて更新されたコードです。私はまだ同じ例外を受け取っています。

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.from">[email protected]</prop>
        <prop key="mail.smtp.user">[email protected]</prop>
        <prop key="mail.smtp.password">XXX</prop>
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>
38
Andrew

これは私のために働いた:

        <property name="Host"><value>smtp.gmail.com</value></property>
        <property name="port"><value>587</value></property>
        <property name="protocol"><value>smtp</value></property>
        <property name="username"><value>${mail.username}</value></property>
        <property name="password"><value>${mail.password}</value></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.quitwait">false</prop>
            </props>
        </property>

私にとって本当のトリックは、「プロトコル」値が「smtps」ではなく「smtp」でなければならないことでした。

33
Ken Burcham

Javamailsenderを使用してGmailからメールを送信するための適切な設定を見つけるのに1時間苦労し、最終的にそれを行いました。 javamailsenderでgmailを介して送信する包括的な例を見つけることができないため、これを投稿しています。これは、同じことをしたい人に役立つことを願っています:

ステップ1:

次の設定をmail.propertiesに追加します。

mail.protocol=smtp
mail.Host=smtp.gmail.com
mail.port=465
mail.smtp.socketFactory.port=465
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.debug=true
mail.smtp.starttls.required=true
mail.smtp.socketFactory.fallback=false
[email protected]
[email protected]
mail.password=my_password

そして、mailConfigurationクラスで、次の場所に@Valueを追加します。

@Configuration
@PropertySource("classpath:mail.properties")
public class MailConfiguration {

    @Value("${mail.protocol}")
    private String protocol;
    @Value("${mail.Host}")
    private String Host;
    @Value("${mail.port}")
    private int port;
    @Value("${mail.smtp.socketFactory.port}")
    private int socketPort;
    @Value("${mail.smtp.auth}")
    private boolean auth;
    @Value("${mail.smtp.starttls.enable}")
    private boolean starttls;
    @Value("${mail.smtp.starttls.required}")
    private boolean startlls_required;
    @Value("${mail.smtp.debug}")
    private boolean debug;
    @Value("${mail.smtp.socketFactory.fallback}")
    private boolean fallback;
    @Value("${mail.from}")
    private String from;
    @Value("${mail.username}")
    private String username;
    @Value("${mail.password}")
    private String password;

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

        Properties mailProperties = new Properties();
        mailProperties.put("mail.smtp.auth", auth);
        mailProperties.put("mail.smtp.starttls.enable", starttls);
        mailProperties.put("mail.smtp.starttls.required", startlls_required);
        mailProperties.put("mail.smtp.socketFactory.port", socketPort);
        mailProperties.put("mail.smtp.debug", debug);
        mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        mailProperties.put("mail.smtp.socketFactory.fallback", fallback);

        mailSender.setJavaMailProperties(mailProperties);
        mailSender.setHost(Host);
        mailSender.setPort(port);
        mailSender.setProtocol(protocol);
        mailSender.setUsername(username);
        mailSender.setPassword(password);
        return mailSender;
    }
}

SpringサーバーはSSL対応であるため、ポート465を使用していることに注意してください。SSLの場合はポート465を使用します。487を使用している場合は、TLSを使用する必要があります。

ステップ2:

このリンクをたどって、安全性の低いアプリへのアクセスをオンに選択します。

https://www.google.com/settings/security/lesssecureapps

ステップ3:

PCにAVASTがある場合は、AVASTをオフにします。 AVASTメールシールドは、電子メールの送信と競合します。オフにしないと、次のエラーが表示されます。

パス[]を持つコンテキストのサーブレット[dispatcherServlet]のServlet.service()が例外をスローしました[リクエスト処理に失敗しました。ネストされた例外はorg.springframework.mail.MailSendException:メールサーバーの接続に失敗しました。ネストされた例外はjavax.mail.MessagingException:例外読み取り応答です。ネストされた例外:javax.net.ssl.SSLHandshakeException:Sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:Sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な認証パスが見つかりません。

13
Simon

GmailでTLSまたはSSLを使用するには:

TLS/STARTTLSのポート:587
SSL用ポート:465

両方とも必須パラメーターですjavax.net.ssl.SSLSocketFactorymail.smtp.socketFactory.fallback そして、作ります mail.smtp.starttls.enableをfalseに。

<beans>
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="Host"><value>smtp.gmail.com</value></property>
        <property name="port"><value>465</value></property>
        <property name="protocol"><value>smtp</value></property>
        <property name="username"><value>[email protected]</value></property>
        <property name="password"><value>XXXX</value></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">false</prop>
                <prop key="mail.smtp.quitwait">false</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.socketFactory.fallback">false</prop>
                <prop key="mail.debug">true</prop>
            </props>
        </property>
    </bean>
    <bean id="mailMail" class="com.embitel.service.email.EmailService">
        <property name="mailSender" ref="mailSender" />
        <property name="simpleMailMessage" ref="customeMailMessage" />
    </bean>
    <bean id="customeMailMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from" value="[email protected]" />
        <property name="to" value="[email protected]" />
        <property name="subject" value="Testing Subject Line for email senind.." />
        <property name="text">
            <value>
        <![CDATA[
            Dear %s,
            Mail Content : %s
        ]]>
            </value>
        </property>
    </bean>
</beans>

魅力のように働いた!!!

5
Vinod Java JEE

GMailに必要な唯一のプロパティは

<prop key="mail.smtp.starttls.enable">true</prop>
4
timomeinen

いつか/初めてグーグルは、サードパーティのアプリケーションまたはあなたのコードを使用してアカウントにサインインすることを防ぎます。ブラウザでアカウントにサインインすると、「Googleはアカウントへの不審なサインインを防ぎます」というメッセージが表示されます。下のスクリーンショットを参照してください。 enter image description here

「あなたはどうですか」をクリックして、サインインを許可します。

4
Rakesh Soni

以下の設定(yaml形式)は私のために働いた


spring.mail:
  Host: smtp.gmail.com
  port: 465
  protocol: smtp
  username: [email protected]
  password: abc
  test-connection: true
  properties:
    "mail.smtp.auth": true
    "mail.smtp.starttls.enable": true
    "mail.smtp.starttls.required": true
    "mail.smtp.socketFactory.class": javax.net.ssl.SSLSocketFactory
    "mail.debug": true

私のために働いたjavaConfigはここにあります:

    public JavaMailSender getJavaMailSender()
    {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setProtocol("smtp");
        sender.setHost("smtp.gmail.com");
        sender.setPort(587);
        sender.setUsername("username");
        sender.setPassword("password");

        Properties mailProps = new Properties();
        mailProps.put("mail.smtps.auth", "true");
        mailProps.put("mail.smtp.starttls.enable", "true");
        mailProps.put("mail.smtp.debug", "true");

        sender.setJavaMailProperties(mailProps);

        return sender;
    }

TLSが機能するには、ポート587を使用する必要があると思います。

2
leeor

これは私のために働きました

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="Host" value="smtp.gmail.com" />
    <property name="port" value="465" />
    <property name="protocol" value="smtps" />
    <property name="username" value="[email protected]" />
    <property name="password" value="my_password" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtps.auth">true</prop>
    </props>
    </property>
</bean>

詳細については、Googleサポートを参照してください: http://support.google.com/mail/bin/answer.py?hl=ja&answer=78799

1

これはそれほど違わないようですが、おそらく試してみてください:

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.user" value="[email protected]" />
        <prop key="mail.smtp.password" value="XXX" />
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>
0
jsight

また、この認証例外に直面していましたが、これはGmailのセキュリティのためです。次のURLを開きます

https://www.google.com/settings/security/lesssecureapps

セキュリティの低い機能を有効にします。

0
Hemant Nagpal

「送信元」アドレスを<prop key="mail.smtp.from">[email protected]</prop>として指定するか、メッセージを作成するときに指定する必要があります。

0
axtavt

あなたの質問を再設定しました。

春に非同期電子メールサービスを実装する方法

これはスプリング3で機能するので、スプリング2ではわからないことに注意してください。

0
karl li