在java异常中发送邮件

时间:2013-09-10 13:01:36

标签: java email smtp

我正在尝试用Java发送邮件,我用谷歌搜索它,我发现了一些代码,我试图运行它,但它给了我这个例外:

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

这是我的代码:

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();
    }
  }
}

3 个答案:

答案 0 :(得分:0)

这里我使用的配置对我来说没问题

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

当我发送消息时

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

答案 1 :(得分:0)

以下是一些适用于我的Gmail设置:

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

和一些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);

答案 2 :(得分:0)

这对我有用。

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();
     }
   }
 }