Getting javax.mail.NoSuchProviderException when trying to send mail using java

I read and tried the whole solution mentioned in stackoverflow and other sites, but still getting the problem and getting an exception.

The code:

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 sendmail { Properties emailProperties; Session mailSession; MimeMessage emailMessage; public static void main(String args[]) throws AddressException, MessagingException { sendmail javaEmail = new sendmail(); javaEmail.setMailServerProperties(); javaEmail.createEmailMessage(); javaEmail.sendEmail(); } public void setMailServerProperties() { String emailPort = "587";//gmail smtp port emailProperties = System.getProperties(); emailProperties.put("mail.smtp.port", emailPort); emailProperties.put("mail.smtp.auth", "true"); emailProperties.put("mail.smtp.starttls.enable", "true"); } public void createEmailMessage() throws AddressException, MessagingException { String[] toEmails = { " emailid@gmail.com " }; String emailSubject = "Java Email"; String emailBody = "This is an email sent by JavaMail api."; mailSession = Session.getDefaultInstance(emailProperties, null); emailMessage = new MimeMessage(mailSession); for (int i = 0; i < toEmails.length; i++) { emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i])); } emailMessage.setSubject(emailSubject); emailMessage.setContent(emailBody, "text/html");//for a html email //emailMessage.setText(emailBody);// for a text email } public void sendEmail() throws AddressException, MessagingException { String emailHost = "smtp.gmail.com"; String fromUser = "emailid";//just the id alone without @gmail.com String fromUserEmailPassword = "test"; Transport transport = mailSession.getTransport("smtp"); transport.connect(emailHost, fromUser, fromUserEmailPassword); transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); transport.close(); System.out.println("Email sent successfully."); } } 

When I debug the code, it stops working on the line: Transport transport = mailSession.getTransport ("smtp");

I added the following JARs:

Mail.jar, pop3.jar, smtp-1.4.2.jar, Activation.jar, optional .jar

Full exception:

An exception is thrown in the main thread javax.mail.NoSuchProviderException: smtp in javax.mail.Session.getService (Session.java:764) in javax.mail.Session.getTransport (Session.java:689) in javax.mail.Session. getTransport (Session.java:632) in javax.mail.Session.getTransport (Session.java:612) in javax.mail.Session.getTransport (Session.java:667) on javax.mail.Transport.send0 (Transport.java : 154) on javax.mail.Transport.send (Transport.java:80) in JannyaPaid_Device.sendmail.sendEmail (sendmail.java:68) in JannyaPaid_Device.sendmail.main (sendmail.java:26)

Also I want to ask what can a firewall prevent these things from sending mail? Since we have a firewall installed, but I can manually open and send thrugh gmail mail.

+5
source share
2 answers
 import java.util.Properties; 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; public class SendMailTLS { public static void main(String[] args) { final String username = " username@gmail.com "; final String password = "password"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(" from-email@gmail.com ")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(" to-email@gmail.com ")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } } 

}

+5
source

For - should execute the STARTTLS command (start transport layer security), you may need a certificate on the way (in JDK / JRE) and the same one on the side of the email server.

+2
source

All Articles