Error sending email via SMTP

I am trying to send an email via java code using gmail as SMTP. But get an exception as shown below. Can you pls let me know why it is unable to find the gmail host. I work in an office network, not sure if some kind of firewall has stopped sending it. If so, what is the solution?

Exception in thread "main" com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 586; timeout -1; nested exception is: java.net.UnknownHostException: smtp.gmail.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2053) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697) at javax.mail.Service.connect(Service.java:364) at javax.mail.Service.connect(Service.java:245) at mail.JavaEmail.sendEmail(JavaEmail.java:72) at mail.JavaEmail.main(JavaEmail.java:22) Caused by: java.net.UnknownHostException: smtp.gmail.com 

Java Source Code:

 package mail; 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 = { " to-mail@gmail.com " }; String emailSubject = "Test email subject"; String emailBody = "This is an email sent by JAVA Code"; 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 credentials * */ String fromUser = " from-user@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."); } } 
+5
source share
4 answers

You are connecting to the wrong port. Google SMTP Server for TLS 587 . You can see more information about this here: http://email.about.com/od/accessinggmail/f/Gmail_SMTP_Settings.htm

+3
source

it can help you

 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); 
+1
source

The following code can help you solve your problem, its work ........

 import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class Email { private static String USER_NAME = "username"; // GMail user name (just the part before "@gmail.com") private static String PASSWORD = "password"; // GMail password private static String RECIPIENT = " xxxxx@gmail.com "; public static void main(String[] args) { String from = USER_NAME; String pass = PASSWORD; String[] to = { RECIPIENT }; // list of recipient email addresses String subject = "Java send mail example"; String body = "hi ....,!"; sendFromGMail(from, pass, to, subject, body); } private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) { Properties props = System.getProperties(); String host = "smtp.gmail.com"; props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.ssl.trust", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", pass); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); InternetAddress[] toAddress = new InternetAddress[to.length]; // To get the array of addresses for( int i = 0; i < to.length; i++ ) { toAddress[i] = new InternetAddress(to[i]); } for( int i = 0; i < toAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, toAddress[i]); } message.setSubject(subject); message.setText(body); Transport transport = session.getTransport("smtp"); transport.connect(host, from, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException ae) { ae.printStackTrace(); } catch (MessagingException me) { me.printStackTrace(); } } } 
0
source

I had the same problem. The host smtp.gmail.com has been changed to ip 74.125.133.109, and now it works well.

0
source

Source: https://habr.com/ru/post/1209748/


All Articles