하나 가능한 해결책 : 직접 MX 레코드를 가져오고 JavaMail API을 사용하십시오.
당신은 dnsjava 프로젝트를 사용하여 MX 레코드를 얻을 수 있습니다 :
Maven2 의존성 : MX 레코드 검색을위한
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.0.1</version>
</dependency>
방법 : JavaMail에 코드를 통해 메일을 보내기
public static String getMXRecordsForEmailAddress(String eMailAddress) {
String returnValue = null;
try {
String hostName = getHostNameFromEmailAddress(eMailAddress);
Record[] records = new Lookup(hostName, Type.MX).run();
if (records == null) { throw new RuntimeException("No MX records found for domain " + hostName + "."); }
if (log.isTraceEnabled()) {
// log found entries for debugging purposes
for (int i = 0; i < records.length; i++) {
MXRecord mx = (MXRecord) records[i];
String targetString = mx.getTarget().toString();
log.trace("MX-Record for '" + hostName + "':" + targetString);
}
}
// return first entry (not the best solution)
if (records.length > 0) {
MXRecord mx = (MXRecord) records[0];
returnValue = mx.getTarget().toString();
}
} catch (TextParseException e) {
throw new RuntimeException(e);
}
if (log.isTraceEnabled()) {
log.trace("Using: " + returnValue);
}
return returnValue;
}
private static String getHostNameFromEmailAddress(String mailAddress) throws TextParseException {
String parts[] = mailAddress.split("@");
if (parts.length != 2) throw new TextParseException("Cannot parse E-Mail-Address: '" + mailAddress + "'");
return parts[1];
}
:
를
public static void sendMail(String toAddress, String fromAddress, String subject, String body) throws AddressException, MessagingException {
String smtpServer = getMXRecordsForEmailAddress(toAddress);
// create session
Properties props = new Properties();
props.put("mail.smtp.host", smtpServer);
Session session = Session.getDefaultInstance(props);
// create message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(fromAddress));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress));
msg.setSubject(subject);
msg.setText(body);
// send message
Transport.send(msg);
}
궁금합니다. 왜 메시지를 처리하고 작업 부하를 줄이기 위해 자신의 메일 서버를 사용하고 싶지 않습니까? – Joel
응용 프로그램이 다른 환경의 다른 고객을 위해 설치됩니다. 그들은 자신의 이메일 주소로 보고서 메일을 보낼 것입니다. 나는 그들에게 "우리"의 이메일 서버를 사용하여 "그들의"이메일을 전달하기를 원하지 않는다. –
아스피린에 대한 연구가 재개 된 것 같습니다. 2009 년 GitHub (http://github.com/masukomi/aspirin)로 옮겨졌고 9 월에 출시되었습니다. –