在我的Java应用程序中,我有一个允许发送邮件的模块
application.yml:
...
mail:
host: smtp.gmail.com
port: 587
username: xxxxxx@gmail.com #Replace this field with your Gmail username.
password: xxxxxxx #Replace this field with your Gmail password.
protocol: smtp
tls: true
properties.mail.smtp:
auth: true
starttls.enable: true
ssl.trust: smtp.gmail.com
...
MailService.java:
...
@Async
public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
isMultipart, isHtml, to, subject, content);
// Prepare message using a Spring helper
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name());
message.setTo(to);
message.setFrom(Properties.getMail().getFrom());
message.setSubject(subject);
message.setText(content, isHtml);
javaMailSender.send(mimeMessage);
log.debug("Sent email to User '{}'", to);
} catch (Exception e) {
if (log.isDebugEnabled()) {
log.warn("Email could not be sent to user '{}'", to, e);
} else {
log.warn("Email could not be sent to user '{}': {}", to, e.getMessage());
}
}
}
...
在本地使用应用程序(Windows 10)时,我会收到电子邮件。 但是,当我在服务器Centos 7上部署应用程序时,我没有收到任何邮件,并且日志中也没有错误。
所以我想知道是否有必要在服务器Centos 7上安装后缀或其他后缀来中继邮件?
我在Centos 7防火墙上打开了端口587 25
答案 0 :(得分:0)
所以我想知道是否有必要在服务器Centos 7上安装后缀或其他后缀来中继邮件?
这不是必需的。 Javamail API应该能够直接与SMTP服务器通信,而无需任何本地中介来中继电子邮件。
我在Centos 7防火墙上打开了端口587 25
如果需要阻止服务器防火墙上端口587上的出站连接,则有必要...但是通常不阻止传出端口。
您的ISP或云提供商很可能阻止了端口587上的传出连接。查看他们对客户发送电子邮件的政策。
另一种可能性是,电子邮件正在到达Google邮件服务器,但它们被归类为垃圾邮件……并被静默过滤掉。
通过将mail.debug
属性设置为true
,或在邮件setDebug(true)
对象上调用Session
,您可以得到有关实际情况的更多线索。