在我的java应用程序中,我有一个允许发送邮件的模块
application.yml:
...
mail:
host: smtp.gmail.com
port: 587
username: [email protected] #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
...
mail service.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上安装postfix或其他人来传递邮件?
我在Centos 7防火墙上打开了端口587 25
所以我想知道是否有必要在我的服务器Centos 7上安装postfix或其他人来传递邮件?
它没有必要。 Javamail API应该能够直接与SMTP服务器通信,而无需任何本地中介来中继电子邮件。
我在Centos 7防火墙上打开了端口587 25
如果被阻止,则必须解锁服务器防火墙上端口587上的出站连接。但是阻止传出端口并不常见。
端口587上的传出连接更可能被ISP或云提供商阻止。查看客户发送电子邮件的政策。
另一种可能性是电子邮件到达谷歌邮件服务器,但它们被归类为垃圾邮件......并被静默过滤掉。
通过将mail.debug
属性设置为true
,或者通过在邮件setDebug(true)
对象上调用Session
,可以获得有关实际发生情况的更多线索。