我在JavaSpring中编写了一个使用JavaMail API发送电子邮件的应用程序。我希望它在Linux上使用我的Office 365 Exchange服务而不是我的localhost sendmail服务。这将避免下游的任何欺骗问题。但是,我不清楚如何设置握手。我需要建议。
目前我所知道的是:
在我的应用程序上下文文件中,我为JavaMail创建了一个bean:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="localhost"/>
<property name="port" value="25"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">false</prop>
<!--
<prop key="mail.debug">true</prop>
-->
</props>
</property>
</bean>
我将改为
我不知道还需要配置什么,但是:
我必须配置什么才能接收这些请求? (即如何与O365 Exchange服务握手?)我在O365 Exchange和Connections中看到了有关Mail Flow的一些信息,但我没有看到任何为这些服务设置身份验证的方法。我是否需要使用用户名和密码创建一个新的特殊帐户,而是通过应用程序使用它?
我是否需要在运行java应用程序的linux服务器上设置任何内容? (主机名等)
我可以咨询的任何专家或在线文档对我都非常有用。
此致
斯蒂芬。
答案 0 :(得分:3)
我找到了答案:
JavaMail配置:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.office365.com"/>
<property name="port" value="587"/>
<property name="username" value="foo@bar.com"/>
<property name="password" value="****"/>
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">false</prop>
</props>
</property>
</bean>
备注:强>
Office365有一个特殊的SMTP主机:smtp.office365.com
出于安全目的使用端口587。
必须注册一个特殊的O365电子邮件帐户,通过该帐户发送邮件。 (例如foo@foo.bar)。 message.setFrom()方法必须与使用的帐户匹配(例如foo@foo.bar),否则Exchange不会通过该帐户发送(抛出错误)。
TLS必须设置为TRUE
支持信息:
https://howtodoinjava.com/spring/spring-core/send-email-with-spring-javamailsenderimpl-example/
答案 1 :(得分:0)
我遇到了同样的错误。在此处检查了StackOverflow上的一些答案并到达任何地方后,我决定登录Office365上的帐户,以确保一切正常。因此,我意识到我应该执行首次登录并更改生成的密码,以便能够从该帐户发送电子邮件。
在我的application.properties中,我有以下内容(我正在使用spring-boot-starter-mail):
spring.mail.host=smtp.office365.com
spring.mail.port=587
spring.mail.username=no-reply@<my-domain>.com
spring.mail.password=<my-secret>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true