Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm trying to send an email using my java application, but it always gives me a connection error back. So my code looks like this:

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendMail {

public static void main(String [] args) {

    String to = "something@gmail.com";
    String from = "fromsomeone@gmail.com";
    String host = "localhost";

    Properties properties = System.getProperties();
    properties.setProperty("mail.user", "fromsomeone");
    properties.setProperty("mail.password", "passwordForSomeone");
    properties.setProperty("mail.smtp.host", host);

    Session session = Session.getDefaultInstance(properties);


    try {

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        message.setSubject("subject typed");
        message.setText("This is actual message which is just some lines");
        Transport.send(message);

    }catch (MessagingException mex) {
        mex.printStackTrace();
    }
}
}

of course I provide valid information (using my gmail account). And this is the error I get back:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
  nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2118)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
at javax.mail.Service.connect(Service.java:366)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at email.SendMail.main(SendMail.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:331)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2084)
... 12 more

Can someone help me, what is wrong with my code? Thank you!

See Question&Answers more detail:os

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

1 Answer

This will be help you to send mail via gmail account;

public class MailMan {
Session session = null;

public MailMan() {
    if (session == null) {
        init();
    }
}

public void init() {

    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("EMAIL", "PASSWORD");
        }
    });
    if (session != null) {
        System.out.println("[OK]");
    } else {
        System.out.println("[NOK]");
    }
}

public void sendMail() {
    if (session == null) {
        System.exit(0);
    }
    try {
        String messageText = "";
        Message message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress("no-reply", "No Reply"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        message.setReplyTo(InternetAddress.parse("no-reply"));


        message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("to_email")); 
        message.setSubject("TEST");
        message.setText(messageText);

        Transport.send(message);

        System.out.println("[OK]");

    } catch (MessagingException e) {
        e.printStackTrace();
        System.out.println("Not Sent...");
    }
 }
}

And the main class;

public class SendMail {

public static void main(String[] args) {
    MailMan ma = new MailMan();
    ma.sendMail();

  }
}

After all you should turn on your "Access for less secure apps".


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...