package com.util.mail; import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; public static final void sendMail(String to, String title, String content) { try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; Properties props = System.getProperties(); props.setProperty("mail.smtp.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.put("mail.smtp.auth", "true"); final String username = "your@gmail.com"; final String password = "your password"; Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); // -- Create a new message -- Message msg = new MimeMessage(session); // -- Set the FROM and TO fields -- msg.setFrom(new InternetAddress(to)); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse( to, false)); msg.setSubject(title); msg.setText(content); msg.setSentDate(new Date()); Transport.send(msg); } catch (MessagingException e) { _log.error(e); } } }
-
//set CLASSPATH=%CLASSPATH%;activation.jar;mail.jar
-
import javax.mail.*;
-
import javax.mail.internet.*;
-
import java.util.*;
-
-
public class Mail
-
{
-
d_password = "****",
-
d_host = "smtp.gmail.com",
-
d_port = "465",
-
m_to = "iamdvr@yahoo.com",
-
m_subject = "Testing",
-
m_text = "Hey, this is the testing email using smtp.gmail.com.";
-
{
-
//This is for google
-
Mail.sendMail("venkatesh@dfdf.com","password","smtp.gmail.com","465","true",
-
"true",true,"javax.net.ssl.SSLSocketFactory","false",to,cc,bcc,
-
"hi baba don't send virus mails..","This is my style...of reply..
-
If u send virus mails..");
-
}
-
-
//Properties props=System.getProperties();
-
props.put("mail.smtp.user", userName);
-
props.put("mail.smtp.host", host);
-
if(!"".equals(port))
-
props.put("mail.smtp.port", port);
-
if(!"".equals(starttls))
-
props.put("mail.smtp.starttls.enable",starttls);
-
props.put("mail.smtp.auth", auth);
-
if(debug){
-
props.put("mail.smtp.debug", "true");
-
}else{
-
props.put("mail.smtp.debug", "false");
-
}
-
if(!"".equals(port))
-
props.put("mail.smtp.socketFactory.port", port);
-
if(!"".equals(socketFactoryClass))
-
props.put("mail.smtp.socketFactory.class",socketFactoryClass);
-
if(!"".equals(fallback))
-
props.put("mail.smtp.socketFactory.fallback", fallback);
-
-
try
-
{
-
Session session = Session.getDefaultInstance(props, null);
-
session.setDebug(debug);
-
MimeMessage msg = new MimeMessage(session);
-
msg.setText(text);
-
msg.setSubject(subject);
-
msg.setFrom(new InternetAddress("p_sambasivarao@sutyam.com"));
-
for(int i=0;i<to.length;i++){
-
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to[i]));
-
}
-
for(int i=0;i<cc.length;i++){
-
msg.addRecipient(Message.RecipientType.CC, new InternetAddress(cc[i]));
-
}
-
for(int i=0;i<bcc.length;i++){
-
msg.addRecipient(Message.RecipientType.BCC, new InternetAddress(bcc[i]));
-
}
-
msg.saveChanges();
-
Transport transport = session.getTransport("smtp");
-
transport.connect(host, userName, passWord);
-
transport.sendMessage(msg, msg.getAllRecipients());
-
transport.close();
-
return true;
-
}
-
{
-
mex.printStackTrace();
-
return false;
-
}
-
}
-
-
}
우선 smtp를 지원하는 메일서비스만 할 수 있습니다.
naver는 지원하긴 하지만, 조낸 써야지 smtp를 사용할 수 있습니다.
저는 일반사용자인데 으뜸사용자가 되야하는 듯 합니다.
그래서 그냥 지원해주는 gmail이랑 daum메일로 테스트를 해봤습니다. 잘 되는군요.
기존에 25포트가 디폴트로 메일을 사용했는데 보안 때문에 SSL을 사용하고, smtps라는 프로토콜로 465번포트로 하는군요.
이건 좀 더 공부를 해봐야할 듯 싶네요. 그냥 기존의 ssl을 사용하지 않는 메일은 host랑 id랑 password만 지정해주면 돼요.
우선 설정파일입니다.
applicationContext.xml
templateMessage는 임시로 메세지를 지정해주는 것으로 미리 지정할 껀 지정하는 겁니다.
물론, 나중에 java코드에서 수정이 가능합니다.
서비스부분입니다.
MailTestService.java
저기서 simpleMailMessage를 받아와서 text만 설정해줍니다. 저기서 msg.setTo하면 수신자도 설정할 수 있죠. 그리고 그냥 send메소드만 호출해주면 메일이 전송됩니다.
더욱 심화된 기능은 reference를 참조하세요
http://static.springframework.org/spring/docs/2.5.x/reference/mail.html
naver는 지원하긴 하지만, 조낸 써야지 smtp를 사용할 수 있습니다.
저는 일반사용자인데 으뜸사용자가 되야하는 듯 합니다.
그래서 그냥 지원해주는 gmail이랑 daum메일로 테스트를 해봤습니다. 잘 되는군요.
기존에 25포트가 디폴트로 메일을 사용했는데 보안 때문에 SSL을 사용하고, smtps라는 프로토콜로 465번포트로 하는군요.
이건 좀 더 공부를 해봐야할 듯 싶네요. 그냥 기존의 ssl을 사용하지 않는 메일은 host랑 id랑 password만 지정해주면 돼요.
우선 설정파일입니다.
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context=http://www.springframework.org/schema/context
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="mailtest" />
<!-- 일반용
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="STMP서버주소"
p:username="아이디"
p:password="비밀번호" />
-->
<!-- gmail, hanmail 용 -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="한메일: pop.hanmail.net, 지메일:smtp.gmail.com"
p:port="465"
p:protocol="smtps"
p:username="아이디"
p:password="비밀번호">
<property name="javaMailProperties">
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtps.startls.enable">true</prop>
<prop key="mail.smtps.debug">true</prop>
</props>
</property>
</bean>
<bean id="templateMessage"
class="org.springframework.mail.SimpleMailMessage"
p:from="송신자 주소"
p:to="수신자 주소"
p:subject="안녕!" />
</beans>
templateMessage는 임시로 메세지를 지정해주는 것으로 미리 지정할 껀 지정하는 겁니다.
물론, 나중에 java코드에서 수정이 가능합니다.
서비스부분입니다.
MailTestService.java
package mailtest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
@Service
public class MailTestService
{
@Autowired
private MailSender mailSender;
@Autowired
private SimpleMailMessage simpleMailMessage;
public void sendEmail()
{
SimpleMailMessage msg = new SimpleMailMessage(this.simpleMailMessage);
msg.setText("난 종천이라고해!");
this.mailSender.send(msg);
}
}
저기서 simpleMailMessage를 받아와서 text만 설정해줍니다. 저기서 msg.setTo하면 수신자도 설정할 수 있죠. 그리고 그냥 send메소드만 호출해주면 메일이 전송됩니다.
package mailtest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MailTest
{
public static void main(String[] args)
{
String configLocation = "applicationContext.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
MailTestService mailTestService = (MailTestService) context.getBean("mailTestService");
mailTestService.sendEmail();
}
}
더욱 심화된 기능은 reference를 참조하세요
http://static.springframework.org/spring/docs/2.5.x/reference/mail.html