We know that if we have to send a mail to somebody from java code, we need to have access on some mail server credentials. Well, not always.
Google has provided free access to one of its mail server and you can use it java code.
Below written code if more like a note to my self. So, if i need it sometime, you can refer here.
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JavaEmail
{
Session mailSession;
public static void main(String args[]) throws AddressException, MessagingException
{
JavaEmail javaEmail = new JavaEmail();
javaEmail.setMailServerProperties();
javaEmail.draftEmailMessage();
javaEmail.sendEmail();
}
private void setMailServerProperties()
{
Properties emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", "586");
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
mailSession = Session.getDefaultInstance(emailProperties, null);
}
private MimeMessage draftEmailMessage() throws AddressException, MessagingException
{
String[] toEmails = { "howtodoinjava@gmail.com" };
String emailSubject = "Test email subject";
String emailBody = "This is an email sent by http://www.howtodoinjava.com.";
MimeMessage emailMessage = new MimeMessage(mailSession);
/**
* Set the mail recipients
* */
for (int i = 0; i < toEmails.length; i++)
{
emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
/**
* If sending HTML mail
* */
emailMessage.setContent(emailBody, "text/html");
/**
* If sending only text mail
* */
//emailMessage.setText(emailBody);// for a text email
return emailMessage;
}
private void sendEmail() throws AddressException, MessagingException
{
/**
* Sender's credentials
* */
String fromUser = "user-email@gmail.com";
String fromUserEmailPassword = "*******";
String emailHost = "smtp.gmail.com";
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromUser, fromUserEmailPassword);
/**
* Draft the message
* */
MimeMessage emailMessage = draftEmailMessage();
/**
* Send the mail
* */
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
System.out.println("Email sent successfully.");
}
}
Happy Learning !!


hey when i copy paste this code and change the userid and password in netbeans i am getting following exception please help me out….
Exception in thread “main” javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 586;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at JavaEmail.sendEmail(JavaEmail.java:67)
at JavaEmail.main(JavaEmail.java:20)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
… 5 more
Posted by Prabhakar Reddy | 28 March, 2013, 12:35 pmwhat port number should i use ??
emailProperties.put(“mail.smtp.port”, “586″);
586 port number gives error.
Posted by Manjeet Kumar | 2 December, 2012, 11:21 amManjeet, Can you please tell me the exact error [stack trace].. FYI: above program runs fine on my home network.
Also, please ensure two things before running this program.
1) You are not behind any firewall. [Most corporate networks have them. e.g. in offices]
2) Put correct credentials here: [i.e. your email and password]
String fromUser = “user-email@gmail.com”;
String fromUserEmailPassword = “*******”;
Posted by Lokesh Gupta | 2 December, 2012, 11:35 am