Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

api - Sending emails through Java - javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587;

I'm currently working on a project that involves the creation of a .jar file. The following is to be achieved, I'm supposed to export/read the path of a friend's registry, once this is done I'm supposed to get the result back via email. The whole concept is in creating the jar file and once it's clicked I get the results through my email since I actually sent it through email.

(I hope this makes sense)

So first, I've combined the following code to actually read the registry and display the keys ( i got it from the popular post on stack overflow for read/write registries) so the reading process is working fine, now my problem is with the email code,

(I'm not quite sure who the original owner to this code is but full credit goes it him) I'm trying to get the basic concept of this email code to work so that I can continue working on sending my jar file as an attachment and link it to my code in a way when a user clicks on the jar file, the registry results will be emailed back to me.

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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailCode {

  public static void main(String[] args) throws Exception {


     final String smtp_host = "smtp.gmail.com";
    final String smtp_username = "user@gmail.com";
    final String smtp_password = "password";
    final String smtp_connection = "TLS";  // Use 'TLS' or 'SSL' connection

    final String toEmail="tomail@hotmail.com";
    final String fromEmail="**@gmail.com";

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");

   if (smtp_connection.equals("TLS")) {
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.port", "587");
    } else{
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.port", "465");
    }

    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(smtp_username, smtp_password);
            }
      });

    try {
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(fromEmail, "NoReply"));
        msg.addRecipient(Message.RecipientType.TO,
                         new InternetAddress(toEmail, "Mr. Recipient"));
        msg.setSubject("Welcome To JavaMail API");
        msg.setText("JavaMail API Test - Sending email example through remote smtp server");
        Transport.send(msg);
        System.out.println("Email sent successfully...");
    } catch (AddressException e) {
        throw new RuntimeException(e);
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
   }
 }

This is the error message I'm getting:

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587;
nested exception is:
java.net.SocketException: Permission denied: connect  
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You're setting smtp_host but you're never using it.

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587;

You're trying to connect to 'localhost' instead of gmail.com. That's becase you're not setting mail.smtp.host anywhere.

And why are you setting an SSL socket factory in the non-TLS case?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...