Java SMTPS로 인증·암호화하여 메일 송신(본문+첨부 파일)
소개
SMTPS로 이메일 계정을 인증한 다음 암호화하여 이메일을 전송합니다.
다음에 본문과 첨부 파일의 구성 예로 합니다.
사전에 다음 라이브러리를 준비합니다.
구현 예
샘플에서는, 동작 확인하기 쉽게 main 메소드로 실행할 수 있도록 하고 있습니다.
SMTPSTest.java
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;
/**
*
* @author tool-taro.com
*/
public class SMTPSTest {
public static void main(String[] args) throws MessagingException, IOException {
String from = "差出人メールアドレス";
String fromName = "差出人名を指定します";
String subject = "件名を指定します";
String to = "宛先メールアドレス";
String toName = "宛名を指定します";
String body = "これは本文です。\n\n\n\n\n\n\n\n\n\n以上。";
String attachmentFileName = "添付ファイル名.txt";
String attachmentFileType = "text/plain; charset=UTF-8";
byte[] attachmentFileBody = "これは添付ファイルです。\n\n\n\n\n\n\n\n\n\n以上。".getBytes("UTF-8");
String host = "メール送信サーバホスト";
String user = "メール送信アカウント";
String password = "メール送信アカウントパスワード";
Properties properties;
Session session;
Store store = null;
Transport transport = null;
MimeMessage mimeMessage;
MimeBodyPart messageBody;
MimeMultipart multipart;
InternetAddress[] address;
try {
properties = System.getProperties();
properties.setProperty("mail.transport.protocol", "smtps");
properties.setProperty("mail.smtp.port", "465");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.starttls.required", "true");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.socketFactory.fallback", "true");
session = Session.getInstance(properties);
mimeMessage = new MimeMessage(session);
//件名は(一応)JISで
mimeMessage.setSubject(MimeUtility.encodeText(subject, "iso-2022-jp", "B"), "iso-2022-jp");
mimeMessage.setSentDate(new Date());
address = new InternetAddress[1];
address[0] = new InternetAddress(from);
//差出人名は設定しなくても問題ない
if (fromName != null) {
//差出人名は(一応)JISで
address[0].setPersonal(MimeUtility.encodeText(fromName, "iso-2022-jp", "B"));
}
mimeMessage.setFrom(address[0]);
address[0] = new InternetAddress(to);
//宛名は設定しなくても問題ない
if (toName != null) {
//宛名は(一応)JISで
address[0].setPersonal(MimeUtility.encodeText(toName, "iso-2022-jp", "B"));
}
mimeMessage.setRecipients(Message.RecipientType.TO, address);
/*
マルチパートのメッセージを作成する
構造
パート1: 本文
パート2: 添付ファイル
*/
multipart = new MimeMultipart();
mimeMessage.setContent(multipart);
//パート1: 本文
messageBody = new MimeBodyPart();
//本文のテキストは(一応)JISで
messageBody.setText(body, "iso-2022-jp");
messageBody.setHeader("Content-Transfer-Encoding", "7bit");
multipart.addBodyPart(messageBody);
//パート2: 添付ファイル
messageBody = new MimeBodyPart();
//添付ファイル名は(一応)JISで
messageBody.setFileName(MimeUtility.encodeText(attachmentFileName, "iso-2022-jp", "B"));
messageBody.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(attachmentFileBody), attachmentFileType)));
multipart.addBodyPart(messageBody);
transport = session.getTransport();
transport.connect(host, user, password);
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
}
finally {
if (store != null) {
try {
store.close();
}
catch (MessagingException e) {
}
}
if (transport != null) {
try {
transport.close();
}
catch (MessagingException e) {
}
}
}
}
}
동작 확인
$ javac SMTPSTest.java
$ java SMTPSTest
보낸 메일을 살펴 보겠습니다.
지정한대로
가 표시됩니다.
첨부 파일을 열어보십시오.
<<<<<<< HEAD
환경
=======
환경
YOUR_EDITION
- 개발
- Windows 10 Pro
- JDK 1.8.0_112
- NetBeans IDE 8.2
웹 도구도 공개하고 있습니다.
웹 편리 도구 @ 도구 타로
Reference
이 문제에 관하여(Java SMTPS로 인증·암호화하여 메일 송신(본문+첨부 파일)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tool-taro/items/551af598b7c81bd75acf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)