# Email by JAVA (자바 프로그램을 이용해 이메일 보내기) 이메일 (Email) 을 프로그래밍적으로 보내고 싶은데 어떻게 해야할까? 메일로 광고/스팸 메일 받는걸 엄청 싫어하기 때문에, 이런건 공개 안하는게 좋을거 같기도?ㅋ 개인적으로는 Recoeve.net 에 회원가입을 할 때, 계정 만들고 이메일 통해 인증/확인 하기 위한 용도로 이메일을 활용하려고 하는 중인데, 또 비밀번호를 잊어버렸다거나 했을때의 보완수단으로서 활용하려고... 이러려면 아무튼 프로그래밍적으로 이메일을 보낼 수 있어야 한다. 어떻게 하면 될까? ## TOC ## Email Server 만들기 아예 Email Server 까지 돌리면서 JAVA 랑 연결해서 자동화 시키는 방법도 있는거 같긴한데... 귀찮;;; 방법은 알아서 찾아보시길. 시간날때 정리하겠음; (아예 안할지도ㅋ) ## Gmail (지메일) by JavaMail
Gmail 에서 JAVA 프로그래밍을 통한 이메일을 보내려면 계정설정에서 계정 설정 - 보안 수준이 낮은 앱의 엑세스 를 허용해야 하는듯. 그런데 보안 높이려면 어찌해야 하지? ㅡㅂㅡ
Email Server 까지 만들기는 귀찮으니 많이들 사용하는 Gmail 계정을 JAVA 와 연결해서 메일을 보내는 법을 알아봅시다. 우선 에서 javax.mail.jar file 을 다운받읍시다. 적당한 폴더에 넣어놓고, 이 폴더\javax.mail.jar 를 윈도우 변수(?) CLASSPATH 에 포함시킵시다. 아니면 java compile 하거나 실행시킬때, javac -classpath "folder path\javax.mail.jar;other classes", java -classpath "folder path\javax.mail.jar;other classes" 식으로 실행시키면 됨. 그리고 아래와 같이 JAVA 코드를 작성하면 잘 돌아감. 해당 코드는 에서 가져왔고, 제가 class 이름 등 약간 수정함. ```[.scrollable.lang-java] import com.sun.mail.smtp.SMTPTransport; import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; // For import: download javax.mail.jar file from Java.net - The Source for Java Technology Collaboration - JavaMail API // and include the filepath in classpath. // API: Package com.sun.mail.smtp // https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html // https://developers.google.com/appengine/docs/java/mail/usingjavamail /** * http://stackoverflow.com/questions/3649014/send-email-using-java * asked Sep 6 '10 at 4:34 by Mohit Bansal * @author doraemon */ public class Gmail{ public static void main(String... args) throws Exception { // Test Gmail.send("gmail id", "gmail password", "to email", "cc email", "title", "msg"); } /** * Send email using GMail SMTP server. * * @param username GMail username * @param password GMail password * @param recipientEmail TO recipient * @param ccEmail CC recipient. Can be empty if there is no CC recipient * @param title title of the message * @param message message to be sent * @throws AddressException if the email address parse failed * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage */ public static void send(final String username, final String password, String recipientEmail, String ccEmail, String title, String message) throws AddressException, MessagingException { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; // Get a Properties object Properties props = System.getProperties(); props.setProperty("mail.smtps.host", "smtp.gmail.com"); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); props.setProperty("mail.smtps.auth", "true"); /* If set to false, the QUIT command is sent and the connection is immediately closed. If set to true (the default), causes the transport to wait for the response to the QUIT command. ref : http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html http://forum.java.sun.com/thread.jspa?threadID=5205249 smtpsend.java - demo program from javamail */ props.put("mail.smtps.quitwait", "false"); Session session = Session.getInstance(props, null); // -- Create a new message -- final MimeMessage msg = new MimeMessage(session); // -- Set the FROM and TO fields -- msg.setFrom(new InternetAddress("noreply@recoeve.com")); // 이거 안먹힘. Does not work. (Cannot change from-email.) // msg.setFrom(new InternetAddress(username + "@gmail.com")); // 이렇게 설정하나 안하나 보낸 계정으로 from 이 정해짐. 스팸/Abusing/Cheating/속임수/사기 막으려고 이런 설정은 막아놓은듯? From 을 마음대로 바꿀 수 있으면 낚시가 너무 쉬워지긴 할듯. msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false)); if (ccEmail.length()>0) { msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false)); } msg.setSubject(title); msg.setContent(message, "text/html; charset=utf-8"); msg.setSentDate(new Date()); SMTPTransport t=(SMTPTransport)session.getTransport("smtps"); t.connect("smtp.gmail.com", username, password); t.sendMessage(msg, msg.getAllRecipients()); t.close(); } } ```/ ## RRA
  1. Java.net - The Source for Java Technology Collaboration - JavaMail API
    and javamail.java.net - API docs
  2. javamail.java.net - API docs - Package com.sun.mail.smtp summary
  3. developers.google.com - Google App Engine - Java - Using JavaMail to Send Mail
  4. stackoverflow.com - Send email using java, 2010-09-06, asked by Mohit Bansal.
    // I used the answer by Cheok Yan Cheng. The code is written by doraemon (the same person??).
저작자 표시 비영리 변경 금지
신고
Posted by 냥냥 kipid
comments powered by Disqus


티스토리 툴바