Send Mail Bean
In our application we have developed mailer bean that sends welcome email when a new user is registered to the system. Mail Bean also used when user asks for the forgotten password.
In this article we use Java Mail API to send emails. This is standard part of J2EE.You can download this API from http://java.sun.com/products/javamail/.If you download this API ,you will get mail.jar file .Put this file in your tomcat's lib directory.
Now we write java source code to send a mail. Very first we imports some java packages which allow you to use methods.
package roseindia.web.common; import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class SendMail { private String strSmtp; public void setStrSmtp(String strSmtp){ this.strSmtp=strSmtp; } public String getStrSmtp(){ return this.strSmtp; } public void sendMail( String recipients[ ], String subject, String message , String from) throws MessagingException { boolean debug = false; //Set the host smtp address Properties props = new Properties(); props.put("mail.smtp.host", getStrSmtp()); // create some properties and get the default Session Session session = Session.getDefaultInstance(props, null); session.setDebug(debug); // create a message Message msg = new MimeMessage(session); // set the from and to address InternetAddress addressFrom = new InternetAddress(from); msg.setFrom(addressFrom); InternetAddress[] addressTo = new InternetAddress[recipients.length]; for (int i = 0; i < recipients.length; i++) { addressTo[i] = new InternetAddress(recipients[i]); } msg.setRecipients(Message.RecipientType.TO, addressTo); // Optional : You can also set your custom headers in the Email if you Want //msg.addHeader("MyHeaderName", "myHeaderValue"); // Setting the Subject and Content Type msg.setSubject(subject); msg.setContent(message, "text/plain"); //send message Transport.send(msg); } }
After that we declare a member variable 'strSmtp' to store name of the mail server for the connection. This strSmtp represents the host name or IP address of mail server. Here we use setter and getter methods to set or get the value of strSmtp. After getting the value of strSmtp we need to set this value into a property object.
Properties props = new Properties();
props.put("mail.smtp.host", getStrSmtp());
The property 'mail.smtp.host' contains the information about mail server to be used for the connection. Now this is time to connect with mail server and create a session. This is done by a specific class of Java Mail API named Session. We use the following code for this purpose-
Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);
After you have the Session, you can create a Message from the Session. This Message class represents the email message. Message class is an abstract class, so you must create an instance of a subclass. That subclass is Mime Message.
Message msg = new MimeMessage(session);
After we have the Message, we will create a instances of InternetAddress class for from and to email addresses.
InternetAddress addressFrom = new InternetAddress(from);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
addressTo[i] = new InternetAddress(recipients[i]);
}
Now, by using setFrom() and setRecipients() methods of Message class we will set from and recipients email addresses
msg.setFrom(addressFrom);
msg.setRecipients(Message.RecipientType.TO, addressTo);
Now, we will set subject of message and content type.
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Finally our message is set,
send it with the Transport
class
Transport.send(msg);
This uses the SMTP server specified in the properties for
the session.
Now set this bean and property in applicationContext.xml file
<beans>
<bean id="mailbean" class="roseindia.web.common.SendMail">
<property name="strSmtp"><value>192.168.10.14</value></property>
</bean>
</beans>
Here we set the host name or IP of webserver.
Defining constants---
package roseindia.web.common;
public class ProjectConstants {
public static String MAIL_BEAN="mailbean";
public static String FROM_MAIL="deepak@localhost";
}
Put the following code in which class from where you want to send mail--------
//Retrieve the DAO Reference
roseindia.web.common.SendMail mailBean = (roseindia.web.common.SendMail)
ServiceFinder.getContext(request).getBean(roseindia.web.common.ProjectConstants.MAIL_BEAN);
String subject="Your username & password ";
String message="Hi,"+username;
message+="\n Your username is "+username+".";
message+="\n Your password is "+strPasswordEmail[0]+".";
message+="\n Please login to the web site with your username and password.";
message+="\n \n Thanks";
message+="\n \n \n Regards";
//Getting FROM_MAIL from roseindia.web.common.ProjectConstants.FROM_MAIL
String from=roseindia.web.common.ProjectConstants.FROM_MAIL;
try{
mailBean.sendMail(reciepent,subject,message,from);
}catch(Exception e){
System.out.println("Error in sending mail:"+e);
}