javax를 활용한 이메일 발송 기능 개발
Intro
java로 이메일을 발송하는 개발을 맡게되었습니다.
SMPT 서버는 이미 구축되어있었기 때문에 javax 라이브러리를 이용하여 호출하는 공통소스를 기록으로 남깁니다.
추가로 AWS 메일서버를 활용하게 되어 참고한 소스도 함께 기록합니다.
소스 내용
public class EmailUtil {
private static Logger logger = LoggerFactory.getLogger(EmailUtil.class);
private static Properties props;
private static final String strContentType = "text/html;charset=UTF-8";
static {
props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "spam.aks.com"); //smtp 서버
props.put("mail.smtp.port", "25"); // smtp 포트
//props.put("mail.smtp.auth", true); // 권한체크 유무
//props.put("mail.smtp.user", "dhk5646@aks.com"); // 계정정보
props.put("mail.debug", "true");
}
@Comment("일반메일발송")
public static void sendMail(String from, List<String> to, List<String> cc, String subject, String content, List<AttachFile> fileList) throws MessagingException, IOException {
// 01 Session 생성
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
Transport transport = session.getTransport();
Message msg = new MimeMessage(session);
// 01 발신자 설정
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
// 02 수신자 설정
if (to != null && to.size() > 0) {
InternetAddress[] addressTo = new InternetAddress[to.size()];
for (int i = 0; i < to.size(); i++) {
addressTo[i] = new InternetAddress(to.get(i).toString());
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
}
// 03 참조자 설정
if (cc != null && cc.size() > 0) {
InternetAddress[] addressCc = new InternetAddress[cc.size()];
for (int i = 0; i < cc.size(); i++) {
addressCc[i] = new InternetAddress(cc.get(i).toString());
}
msg.setRecipients(Message.RecipientType.CC, addressCc);
}
// 04 제목 설정
msg.setSubject(subject);
// 05 본문 설정
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(content, strContentType);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
if (fileList != null) {
for (AttachFile file : fileList) {
attachFile(multipart, file);
}
}
msg.setContent(multipart, "text/html");
// 06 메일발송
transport.connect();
Transport.send(msg);
transport.close();
}
@Comment("일반파일첨부")
private static void attachFile(Multipart multipart, AttachFile file) throws MessagingException {
DataSource source = new FileDataSource(PropertyUtil.getString("file.base.dir") + file.getFileRoutNm());
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getFileOrignNm());
multipart.addBodyPart(messageBodyPart);
}
@Comment("AWS를 활용한 일반메일발송")
public static void sendMailUsingAWS(String from, String[] to, String[] cc, String subject, String content, List<AttachFile> fileList) throws MessagingException, IOException {
// 01 Session 생성
Session session = Session.getDefaultInstance(new Properties());
MimeMessage message = new MimeMessage(session);
// 02 제목 설정
message.setSubject(subject, "UTF-8");
// 03 발신자 설정
message.setFrom(new InternetAddress(from));
// 03 수신자 설정
String strTo = "";
for (String item : to) {
strTo += item + ",";
}
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(strTo));
// 04 CC 설정
String strCc = "";
for (String item : to) {
strCc += item + ",";
}
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(strCc));
MimeMultipart msg_body = new MimeMultipart("mixed");
MimeBodyPart wrap = new MimeBodyPart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(content, "text/html; charset=UTF-8");
// 05 본문 설정
msg_body.addBodyPart(htmlPart);
wrap.setContent(msg_body);
MimeMultipart msg = new MimeMultipart("mixed");
message.setContent(msg);
msg.addBodyPart(wrap);
// 06 파일첨부
if (fileList != null) {
for (AttachFile file : fileList) {
attachFile(msg, file);
}
}
try {
AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder.standard().withRegion("us-east-1").build();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
message.writeTo(outputStream);
RawMessage rawMessage = new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));
SendRawEmailRequest rawEmailRequest = new SendRawEmailRequest(rawMessage);
client.sendRawEmail(rawEmailRequest);
logger.info("Email sent!");
} catch (Exception ex) {
logger.error("Email Failed : " + ex.getMessage());
}
}
}
댓글남기기