구글 계정을 이용하여 이메일 보내기
package example;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.activation.URLDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
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;
public class MailTest {
public static void sendMail() {
String fromEmail = "보내는 사람의 이메일 주소";
String email_pwd = "보내는 사람의 이메일 비밀번호";
String toEmail = "받는 사람의 이메일주소";
String filepath = "http://www.koreadaily.com/_data/article_img/2016/09/06/"; // https는 오류발생
String filename = "174341677.jpg";
// 이메일 정규식 체크
String emailPattern = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$";
boolean check = Pattern.matches(emailPattern, toEmail);
if(check) {
Properties p = new Properties();
// Google 계정 설정
p.put("mail.smtp.user", fromEmail);
p.put("mail.smtp.host", "smtp.gmail.com");
p.put("mail.smtp.port", "465");
p.put("mail.smtp.starttls.enable","true");
p.put("mail.smtp.auth", "true");
p.put("mail.smtp.debug", "true");
p.put("mail.smtp.socketFactory.port", "465");
p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.put("mail.smtp.socketFactory.fallback", "false");
// worksmobile 계정 설정
// p.put("mail.smtp.host", "smtp.worksmobile.com");
// p.put("mail.smtp.socketFactory.port", "465");
// p.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
// p.put("mail.smtp.auth", "true");
// p.put("mail.smtp.port", "465");
//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
try {
Session session = Session.getInstance(p, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, email_pwd);
}
});
session.setDebug(true); // 메일을 전송할 때 상세한 상황을 콘솔에 출력한다.
String strContent = "테스트 내용입니다. 1\n\n"+
"테스트 내용입니다. 2\n"+
"테스트 내용입니다. 3\n"+
"테스트 내용입니다. 4\n"+
"테스트 내용입니다. 5\n";
String subject = "테스트 제목입니다.";
String content = "<html>"+
"<head><meta charset='utf-8'></head>"+
"<body>"+
"<p>"+strContent.replace("\n", "<br />")+"</p>"+
"</body>"+
"</html>";
String document = filepath+filename;
MimeMessage message = new MimeMessage(session);
// 1. 보내는 사람 설정
message.setFrom(new InternetAddress(fromEmail, "베로베로스", "EUC-KR"));
// 2. 받는 사람 설정
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
// 3. 제목 설정
message.setSubject(subject, "EUC_KR");
// 4. 본문내용 설정
message.setContent(content, "text/html; charset=EUC-KR");
message.setHeader("Content-Transfer-Encoding", "quoted-printable");
MimeBodyPart bodypart = new MimeBodyPart();
bodypart.setContent(content, "text/html; charset=euc-kr");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodypart);
MimeBodyPart attachPart = new MimeBodyPart();
// URL로부터 파일을 첨부
URL url = null;
try {
url = new URL(document);
URLDataSource source = new URLDataSource(url);
// 5. 첨부파일 설정
attachPart.setDataHandler(new DataHandler(source));
//attachPart.setFileName(filename); // 파일명
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
// 6. 파일명 설정
attachPart.setFileName(MimeUtility.encodeText(filename, "euc-kr", "B"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
multipart.addBodyPart(attachPart);
message.setContent(multipart);
Transport.send(message); // 7. 메일 보내기
System.out.println("* 이메일 SMTP서버를 이용한 메일보내기 성공");
} catch (Exception e) {
e.printStackTrace();
// 메일 검증 실패
if("javax.mail.AuthenticationFailedException".equals(e.toString())) {
System.out.println("* 이메일 검증에 실패 했습니다. 정보를 올바르게 입력하세요.");
return;
} else {
System.out.println("* 메일 전송 중 오류가 발생하였습니다.");
return;
}
}
} else {
System.out.println("* 이메일이 올바르지 않습니다.");
return;
}
}
public static void main(String[] args) {
sendMail();
}
}
[실행화면]
[필요한 JAR파일 첨부]
[Reference]
* IMAP을 사용하여 다른 이메일 클라이언트에서 Gmail 메일 읽기
'JAVA 프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 날짜 관련 함수 모음 (0) | 2016.11.02 |
---|