티스토리 뷰

프로그래밍/Java

[Java] 메일 보내기

꼬렙 2011. 9. 19. 13:31
728x90

[MailSender.java]
 

import java.io.*;
import java.util.*;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailSender extends Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
public MailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if(recipients.indexOf(',') > 0) {
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
} else {
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
}
Transport.send(message);
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if(type == null) {
return "application/octet-stream";
} else {
return type;
}
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}



[실제 사용 클래스]
String user = "G메일 계정"
String password = "암호"

MailSender sender = new MailSender(user, password);

String subject = "보낼 제목";
String body = "보낼 본문 내용";
String sender = "보내는 메일 주소";
String recipients = "받는 메일 주소";

try {
    sender.sendMail(subject, body, sender, recipients);
} catch(Excpetion e) {}


위 코드는 구글 G메일 세팅이다..

네이버나 다음의 smtp를 사용해서 보내는 것도 실험해봐야 되는데 아직 못해보고 있다..

인터넷에 다른 소스를 찾아보면 매우 간단하게 표현된 것들이 꽤 있던데 이상하게 계속 안먹혀서 결국 이렇게 코딩을 했다

위 소스를 사용하려면 activation.jar 와 mail.jar 를 라이브러리로 지정해줘야 한다


출처 : 어디더라;;