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>
これは私のために働いた:
<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」でなければならないことでした。
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:要求されたターゲットへの有効な認証パスが見つかりません。
GmailでTLSまたはSSLを使用するには:
TLS/STARTTLSのポート:587
SSL用ポート:465
両方とも必須パラメーターですjavax.net.ssl.SSLSocketFactory
、mail.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>
魅力のように働いた!!!
GMailに必要な唯一のプロパティは
<prop key="mail.smtp.starttls.enable">true</prop>
いつか/初めてグーグルは、サードパーティのアプリケーションまたはあなたのコードを使用してアカウントにサインインすることを防ぎます。ブラウザでアカウントにサインインすると、「Googleはアカウントへの不審なサインインを防ぎます」というメッセージが表示されます。下のスクリーンショットを参照してください。
「あなたはどうですか」をクリックして、サインインを許可します。
以下の設定(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を使用する必要があると思います。
これは私のために働きました:
<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
これはそれほど違わないようですが、おそらく試してみてください:
<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>
また、この認証例外に直面していましたが、これはGmailのセキュリティのためです。次のURLを開きます
https://www.google.com/settings/security/lesssecureapps
セキュリティの低い機能を有効にします。
「送信元」アドレスを<prop key="mail.smtp.from">[email protected]</prop>
として指定するか、メッセージを作成するときに指定する必要があります。