开发者

I don't get the e-mail using this code. What is the problem?

The following is the program, which I am trying to send e-mail. The code is error free and I don't get any run time exception. But the code is unable to send e-mail. I have revised this code a lot but can't get what is actually wrong. The sender and the receiver both have GMail accounts. The sender has 2-step verification process disabled. (I don't think it matters for the receiver. Does it?)

The code :

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 addr开发者_运维知识库ess ! 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);
            }
    }
}


Well, your code doesn't actually attempt to send the message. Take a look at Transport.send.

Here are some examples:

  • http://www.javapractices.com/topic/TopicAction.do?Id=144
  • http://www.vipan.com/htdocs/javamail.html


First of all, you forgot to call Transport.send() to send your MimeMessage.

Secondly, GMail needs to be configured to use TLS or SSL connection. The following needs to be added to your Properties (props):

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

To connect to GMail SMTP, use the Transport.connect() method. I see you are not using any Transport at all in your code, so add this:

Transport transport = session.getTransport();

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

Alternatively, you can create a Session by including a javax.mail.Authenticator as a parameter.

Example:

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

I hope this helps you.

Resources:

  • Send email with SMTPS (eg. Google GMail) (Javamail)
  • JavaMail API – Sending email via Gmail SMTP example
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜