我没有收到使用此代码的电子邮件。问题是什么?

时间:2011-07-07 10:51:06

标签: java gmail javamail

以下是该程序,我正在尝试发送电子邮件。代码没有错误,我没有得到任何运行时异常。但代码无法发送电子邮件。我已经修改了很多这段代码但却无法得到实际上错误的内容。 发件人和收件人都有GMail帐户。发件人已禁用两步验证流程。 (我认为对接收者来说不重要。是吗?)

代码:

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

class tester {
   public static void main(String args[]) {
      Properties props = new Properties();
      props.put("mail.smtp.host" , "smtp.gmail.com");
      props.put("mail.stmp.user" , "username"); // username or complete address ! Have tried both
      Session session  = Session.getDefaultInstance( props , null);
      String to = "me@gmail.com";
      String from = "from@gmail.com";
      String subject = "Testing...";
      Message msg = new MimeMessage(session);
         try {
           msg.setFrom(new InternetAddress(from));
           msg.setRecipient(Message.RecipientType.TO , new InternetAddress(to));
           msg.setSubject(subject);
           msg.setText("Working fine..!");
           System.out.println("fine!!??");
         }  catch(Exception exc) {
                System.out.println(exc);
            }
    }
}

2 个答案:

答案 0 :(得分:4)

好吧,您的代码实际上并没有尝试发送消息。看看Transport.send

以下是一些例子:

答案 1 :(得分:1)

首先,您忘记致电Transport.send()发送MimeMessage

其次,需要将GMail配置为使用TLS或SSL连接。以下内容需要添加到您的Propertiesprops):

//To use TLS
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");

//To use SSL
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");

要连接到GMail SMTP,请使用Transport.connect()方法。我发现您的代码中根本没有使用任何Transport,因此请添加:

Transport transport = session.getTransport();

//Connect to GMail
transport.connect("smtp.gmail.com", 465, "USERNAME_HERE", "PASSWORD_HERE");
transport.send(msg);

或者,您可以通过添加Session作为参数来创建javax.mail.Authenticator

示例:

Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("USERNAME_HERE", "PASSWORD_HERE");
        }
    });

我希望这会对你有所帮助。

资源: