简体   繁体   中英

Sending mail in java exception

I'm trying to send mail in Java, and I googled it I found some piece of code and I tried to run it but it gives me this exception:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
nested exception is:
    java.net.ConnectException: Connection timed out: connect

Here is my code:

public class SendMail {

  public static void Send(String username, String email) {

  Properties props = System.getProperties();
    props.put("mail.smtp.starttls.enable", true); // added this line
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.user", "username@gmail.com");
    props.put("mail.smtp.password", "password");
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", true);

    Session session = Session.getInstance(props, null);
    MimeMessage message = new MimeMessage(session);

    System.out.println("Port: " + session.getProperty("mail.smtp.port"));
    try {
      InternetAddress from = new InternetAddress("username");
      message.setSubject("Yes we can");
      message.setFrom(from);
      message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(email));
      Multipart multipart = new MimeMultipart("alternative");
      BodyPart messageBodyPart = new MimeBodyPart();
      messageBodyPart.setText("your username :" + username);
      multipart.addBodyPart(messageBodyPart);
      messageBodyPart = new MimeBodyPart();
      String htmlMessage = "Our html text";
      messageBodyPart.setContent(htmlMessage, "text/html");
      multipart.addBodyPart(messageBodyPart);
      message.setContent(multipart);
      Transport transport = session.getTransport("smtp");
      transport.connect("smtp.gmail.com", "username@gmail.com",  "password");
      System.out.println("Transport: " + transport.toString());
      transport.sendMessage(message, message.getAllRecipients());

    } catch (AddressException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MessagingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

Here the configuration i use and it's ok for me

mail.from = myMail
mail.transport.protocol = smtp
mail.smtp.host = smtp.gmail.com
mail.smtp.timeout = 30000
mail.smtp.starttls.enable = true
mail.smtp.auth = true
mail.debug = false

and when i'm sending the message

Authenticator auth = new MailAuthenticator(myMail , myPass);
Session session = Session.getDefaultInstance(properties, auth);

Here's some Gmail settings which work for me:

//these are fed into the Properties object below:
mail.smtp.starttls.enable = true
mail.transport.protocol   = smtp
mail.smtp.auth            = true

and some Java:

Properties properties = ...

javax.mail.Session session = javax.mail.Session.getInstance(properties, null);
Transport transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com", username, password);

This works for me.

public class SendEmail
{
   public static void main(String [] args)
  {    
     String to = "to@gmail.com";
     String from = "from@gmail.com";
     String host = "localhost";
     Properties properties = System.getProperties();
     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");
        message.setText("Message");
        Transport.send(message);
        System.out.println("Message sent.");
     }catch (MessagingException mex) {
        mex.printStackTrace();
     }
   }
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM