通过java api验证SMTP服务器身份验证(包括AUTH的Healthcheck)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过java api验证SMTP服务器身份验证(包括AUTH的Healthcheck)相关的知识,希望对你有一定的参考价值。
目标
我想对SMTP服务器执行健康检查。此运行状况检查应包括身份验证,这样我不仅知道服务器是否可用,而且可以使用给定的证书发送电子邮件。
[如果可能,我想要更高层次的东西。目前,我正在使用javax.mail.Session
,javax.mail.Transport
等
问题
是否可以通过使用证书进行身份验证而不通过使用简单的Java API向服务器发送诸如testmail之类的邮件来验证SMTP服务器是否(可能)接受我的请求?
还有另一个问题是,是否应该为MimeMessage使用会话,然后使用静态Transport#send方法发送这些会话。还是应该在获得实例的地方使用某些东西。我要实现的主要事情是在成功的情况下也从服务器检索返回码。
我也可以使用其他库。
作为参考,我正在准备会话和消息atm的一些代码。
public class SmtpMailService
public Session prepareSession()
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
return Session.getInstance(properties, null);
public List<MimeMessage> sendMessages(List<MimeMessage> messages)
Iterator<MimeMessage> m = messages.iterator();
while (m.hasNext())
MimeMessage currentMessage = m.next();
try
Transport.send(currentMessage);
m.remove();
catch (MessagingException e)
break;
List<MimeMessage> mailsWithError = StreamUtils.asList(m);
return mailsWithError;
以及我随后如何发送邮件。
public class SmtpMailSenderService
private SmtpMailService mailerService;
public List<SmtpEmailNotificationRecipient> sendNotificationMails(final List<SmtpEmailNotificationRecipient> recipients,
final SmtpMailTemplate templateId, final Map<String, String> templateValues)
// templating stuff
final Session smtpSession = mailerService.prepareSession();
final List<MimeMessage> messages = mailerService.prepareMessages(smtpSession, recipients, email);
final List<MimeMessage> unsentMessages = mailerService.sendMessages(messages);
return collectRemainingRecipients(unsentMessages);
您无法确定服务器是否允许您在不实际发送邮件的情况下发送邮件。然后收件人也将很重要。
您可以使JavaMail成功抛出异常,该异常将包含返回码。将mail.smtp.reportsuccess
会话属性设置为true。请参阅mail.smtp.reportsuccess
示例程序。
如果已经有一个Transport对象,则可以很好地使用它而不是静态send方法。
以上是关于通过java api验证SMTP服务器身份验证(包括AUTH的Healthcheck)的主要内容,如果未能解决你的问题,请参考以下文章
SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.5.1 需要身份验证?
C# SMTP 无法在 Outlook.com 端口 587 上进行身份验证。“服务器响应为:5.7.1 客户端未通过身份验证”
使用c#发送电子邮件SMTP服务器需要安全连接或客户端未通过身份验证[重复]