send SMTP mail using JavaMail with gmail account

Discussion in 'Java' started by jrefactors@hotmail.com, Feb 21, 2005.

  1. Guest

    I want the Java application to send email using google gmail account.

    The following is the output, and it cannot display "sendMail() 3..."
    in the following sendMail() method. The program just hangs after
    printing "sendMail() 2...", and there is no errors.

    output
    ===============
    sendMail()...
    sendMail() 2...

    Basically it get stucks on line
    transport.connect(smtpHost, 465, "gmail account", "gmail password");

    ----------------------------------------------------------
    public void sendMail() throws MessagingException
    {
    System.out.println("sendMail()...");
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "465");

    // props.put("mail.smtp.auth", "true");

    Session session = Session.getDefaultInstance(props, null);
    session.setDebug(false);
    MimeMessage message = new MimeMessage(session);
    message.setFrom(from);
    Iterator itrto = toRecipients.iterator();
    while(itrto.hasNext())
    {
    Object obj = (Address)itrto.next();
    if(obj instanceof Address){
    message.addRecipient(Message.RecipientType.TO, (Address)obj);
    }
    }
    System.out.println("sendMail() 2...");

    message.setSubject(subject);
    message.setContent(msgText, "text/plain");

    Transport transport = session.getTransport("smtp");

    //***** GET STUCK HERE!!! ******
    transport.connect(smtpHost, 465, "gmail account", "gmail password");

    System.out.println("sendMail() 3...");

    Transport.send(message);

    System.out.println("sendMail() 4...");

    }
    --------------------------------------------------------

    any ideas? please advise.
    thanks!!
    , Feb 21, 2005
    #1
    1. Advertising

  2. GaryM Guest

    wrote in news:1109005482.258452.142720
    @o13g2000cwo.googlegroups.com:

    > // props.put("mail.smtp.auth", "true");


    Uncomment this line.
    GaryM, Feb 21, 2005
    #2
    1. Advertising

  3. Guest

    GaryM wrote:
    > wrote in news:1109005482.258452.142720
    > @o13g2000cwo.googlegroups.com:
    >
    > > // props.put("mail.smtp.auth", "true");

    >
    > Uncomment this line.


    I uncomment line props.put("mail.smtp.auth", "true");
    but it still cannot display sendMail() 3...:

    sendMail()...
    sendMail() 2...

    But it has exception this time:

    javax.mail.MessagingException: Could not connect to SMTP host:
    smtp.gmail.com, port: 465;
    nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:867)
    at
    com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:156)
    at javax.mail.Service.connect(Service.java:234)
    at SMTPHandler.sendMail(SMTPHandler.java:145)
    at SMTPHandlerTest.main(SMTPHandlerTest.java:33)
    Exception in thread "main"



    any ideas? thanks!!
    , Feb 21, 2005
    #3
  4. GaryM Guest

    wrote in
    news::


    >
    > any ideas? thanks!!
    >


    I have no time to try this myself, but you can give it a go and post
    back:

    props.put("mail.smtp.starttls.enable","true");
    GaryM, Feb 21, 2005
    #4
  5. GaryM Guest

    GaryM <> wrote in news:Xns9604BA3A9C8DR3344324357788499939@192.168.1.81:

    >
    > I have no time to try this myself, but you can give it a go and post
    > back:


    OK Here is working code. I followed the instructions here, which, though it
    does not even mention SMTP, still works with SMTP:

    http://www.javaworld.com/javatips/jw-javatip115.html

    Look for the xxxxx occurances and substiture with your credentials :

    /*
    * Created on Feb 21, 2005
    *
    */

    import java.security.Security;
    import java.util.Properties;

    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class GoogleTest {

    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "A test from gmail";
    private static final String emailFromAddress = "";
    private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = { ""};


    public static void main(String args[]) throws Exception {

    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt,
    emailMsgTxt, emailFromAddress);
    System.out.println("Sucessfully Sent mail to All Users");
    }

    public void sendSSLMessage(String recipients[], String subject,
    String message, String from) throws MessagingException {
    boolean debug = true;

    Properties props = new Properties();
    props.put("mail.smtp.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");
    props.put("mail.smtp.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
    props.put("mail.smtp.socketFactory.fallback", "false");

    Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {

    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("xxxxxx", "xxxxxx");
    }
    });

    session.setDebug(debug);

    Message msg = new MimeMessage(session);
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++) {
    addressTo = new InternetAddress(recipients);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);

    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
    }
    }
    GaryM, Feb 22, 2005
    #5
  6. Guest

    hello
    , Feb 23, 2005
    #6
  7. theAmerican

    Joined:
    May 15, 2006
    Messages:
    2
    I was searching Google for advice on Gmail + javamail and found this forum. I tried Gary's code (replacing the x's with appropriate info, of course) and got the following feedback:

    Code:
    DEBUG: not loading system providers in <java.home>/lib
    DEBUG: successfully loaded optional custom providers from URL: jar:file:/Library/Java/Extensions/javamail-1.4/lib/imap.jar!/META-INF/javamail.providers
    DEBUG: successfully loaded optional custom providers from URL: jar:file:/Library/Java/Extensions/javamail-1.4/lib/pop3.jar!/META-INF/javamail.providers
    DEBUG: successfully loaded optional custom providers from URL: jar:file:/Library/Java/Extensions/javamail-1.4/lib/smtp.jar!/META-INF/javamail.providers
    DEBUG: successfully loaded default providers
    
    DEBUG: Tables of loaded providers
    DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
    DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]}
    DEBUG: successfully loaded optional address map from URL: jar:file:/Library/Java/Extensions/javamail-1.4/lib/smtp.jar!/META-INF/javamail.address.map
    
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
            at javax.mail.Session.getService(Session.java:607)
            at javax.mail.Session.getTransport(Session.java:541)
            at javax.mail.Session.getTransport(Session.java:484)
            at javax.mail.Session.getTransport(Session.java:464)
            at javax.mail.Session.getTransport(Session.java:519)
            at javax.mail.Transport.send0(Transport.java:155)
            at javax.mail.Transport.send(Transport.java:81)
            at login.util.GoogleTest.sendSSLMessage(GoogleTest.java:70)
            at login.util.GoogleTest.main(GoogleTest.java:29)
    Caused by: java.lang.NoSuchMethodError: javax.mail.Session.getDebugOut()Ljava/io/PrintStream;
            at com.sun.mail.smtp.SMTPTransport.<init>(SMTPTransport.java:112)
            at com.sun.mail.smtp.SMTPTransport.<init>(SMTPTransport.java:97)
            ... 13 more
    Exception in thread "main" javax.mail.NoSuchProviderException: smtp
            at javax.mail.Session.getService(Session.java:611)
            at javax.mail.Session.getTransport(Session.java:541)
            at javax.mail.Session.getTransport(Session.java:484)
            at javax.mail.Session.getTransport(Session.java:464)
            at javax.mail.Session.getTransport(Session.java:519)
            at javax.mail.Transport.send0(Transport.java:155)
            at javax.mail.Transport.send(Transport.java:81)
            at login.util.GoogleTest.sendSSLMessage(GoogleTest.java:70)
            at login.util.GoogleTest.main(GoogleTest.java:29)
    What is it I'm doing wrong?
    theAmerican, May 15, 2006
    #7
  8. theAmerican

    Joined:
    May 15, 2006
    Messages:
    2
    Actually, nevermind. The code worked after I removed all the individual protocols from my /Library/Java/Extensions folder. I hadn't realized they were redundant.
    theAmerican, May 15, 2006
    #8
  9. Mritunjay

    Joined:
    Jul 18, 2006
    Messages:
    2
    Problem facing while sending attachment thru smtp mail

    Hi,

    I am facing problem while sending attachment thru java code(smtp mail ). kindly help me in this regard.

    regards,
    Mritunjay
    Mritunjay, Jul 20, 2006
    #9
  10. Mritunjay

    Joined:
    Jul 18, 2006
    Messages:
    2
    OK Here is working code. I followed the instructions here, which, though it
    does not even mention SMTP, still works with SMTP:

    http://www.javaworld.com/javatips/jw-javatip115.html

    Look for the xxxxx occurances and substiture with your credentials :

    /*
    * Created on Feb 21, 2005
    *
    */

    import java.security.Security;
    import java.util.Properties;

    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class GoogleTest {

    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "A test from gmail";
    private static final String emailFromAddress = "";
    private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = { ""};


    public static void main(String args[]) throws Exception {

    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt,
    emailMsgTxt, emailFromAddress);
    System.out.println("Sucessfully Sent mail to All Users");
    }

    public void sendSSLMessage(String recipients[], String subject,
    String message, String from) throws MessagingException {
    boolean debug = true;

    Properties props = new Properties();
    props.put("mail.smtp.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");
    props.put("mail.smtp.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
    props.put("mail.smtp.socketFactory.fallback", "false");

    Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {

    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("xxxxxx", "xxxxxx");
    }
    });

    session.setDebug(debug);

    Message msg = new MimeMessage(session);
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++) {
    addressTo = new InternetAddress(recipients);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);

    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
    }
    }[/QUOTE]



    Hello,
    How do i send attachment with smtp mail . can u please tell me the code

    regards,
    Mritunjay
    Mritunjay, Jul 20, 2006
    #10
  11. malbers

    Joined:
    Feb 4, 2008
    Messages:
    1




    Hello,
    How do i send attachment with smtp mail . can u please tell me the code

    regards,
    Mritunjay[/QUOTE]



    here is the same code working with an attatchment:

    /*
    * Created on Feb 21, 2005
    *
    */

    import java.security.Security;
    import java.util.Properties;

    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;


    //----------------------------------------------------------
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.Multipart;
    import java.io.IOException;
    //----------------------------------------------------------




    public class GoogleTest {

    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "subject line";
    private static final String emailFromAddress = "";
    private static final String SSL_FACTORY
    = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = {""};
    private static final String fileToSend = "filename goes here";
    private static final String gMailAccount = "xxxxx";
    private static final String gMailPassword = "xxxxx";


    public static void main(String args[]) throws Exception
    {
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt,
    emailMsgTxt, emailFromAddress, fileToSend,
    gMailAccount, gMailPassword);
    //System.out.println("Sucessfully Sent mail to All Users");
    }

    public void sendSSLMessage(String recipients[], String subject,
    String message, String from, String attatchment,
    final String account, final String password)
    throws MessagingException
    {
    //boolean debug = true;

    Properties props = new Properties();
    props.put("mail.smtp.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    //props.put("mail.debug", "true");
    props.put("mail.smtp.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
    props.put("mail.smtp.socketFactory.fallback", "false");

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

    //session.setDebug(debug);

    Message msg = new MimeMessage(session);
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];

    for (int i = 0; i < recipients.length; i++)
    {
    addressTo = new InternetAddress(recipients);
    }

    msg.setRecipients(Message.RecipientType.TO, addressTo);

    // Setting the Subject Type
    msg.setSubject(subject);

    //----------------------------------------------------

    Multipart mp = new MimeMultipart();

    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setText(message);
    mp.addBodyPart(mbp1);

    MimeBodyPart mbp2 = new MimeBodyPart();
    try
    {
    //attatch the file
    mbp2.attachFile(attatchment);
    }
    catch (IOException ioex)
    {
    ioex.printStackTrace();
    }
    mp.addBodyPart(mbp2);

    msg.setContent(mp);

    //------------------------------------------------------

    Transport.send(msg);
    }
    }
    malbers, Feb 4, 2008
    #11
  12. AAKKI

    Joined:
    Apr 19, 2010
    Messages:
    1
    hello friends
    i want to use this code(send SMTP mail using JavaMail with gmail account ) in my project("Complain Managment system") but, i don't know how to use?
    pls tell me code and how to use it.
    thank you.
    AAKKI, Apr 19, 2010
    #12
  13. kkitagawa

    Joined:
    May 19, 2010
    Messages:
    2
    Send from different Gmail domain

    I'm trying to accessing mail from a different Google main Domain (custom google apps domain i.e. email(at)labs.com

    Currently the application is accessing the mail from Gmail and sending it to same mail id

    Does anyone know how to change this?
    kkitagawa, May 19, 2010
    #13
  14. kkitagawa

    Joined:
    May 19, 2010
    Messages:
    2
    I'm trying to accessing mail from a different Google main Domain (custom google apps domain i.e. email(at)labs.com

    Currently the application is accessing the mail from Gmail and sending it to same mail id

    Does anyone know how to change this?
    kkitagawa, May 19, 2010
    #14
  15. abhishek-technicalwork

    Joined:
    Jul 11, 2012
    Messages:
    2
    There are two solution for this:

    1. You can generate the application specific password by the link given by "friek" i.e "https://accounts.google.com/IssuedAuthSubTokens" and **use the generated application specific password in place your original password**. I have done this and its working

    or

    2. The reason why the Exception (javax.mail.AuthenticationFailedException: 535-5.7.1 Application-specific password required) is occurring is that you may have activated the 2-step verification of your gmail account. If you use an account in which you do not activate the 2-step verification then you can send the email by you original password. I have also tried this and its working fine.
    abhishek-technicalwork, Jul 11, 2012
    #15
  16. abhishek-technicalwork

    Joined:
    Jul 11, 2012
    Messages:
    2
    There are two solution for this:

    1. You can generate the application specific password by the link "https://accounts.google.com/IssuedAuthSubTokens" and use the generated application specific password in place your original password. I have done this and its working

    or

    2. The reason why the Exception (javax.mail.AuthenticationFailedException: 535-5.7.1 Application-specific password required) is occurring is that you may have activated the 2-step verification of your gmail account. If you use an account in which you do not activate the 2-step verification then you can send the email by you original password. I have also tried this and its working fine.
    abhishek-technicalwork, Jul 11, 2012
    #16
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. RN
    Replies:
    3
    Views:
    604
    Smithers
    Feb 23, 2005
  2. Gabriel Genellina

    Re: smtplib send email by using gmail smtp server

    Gabriel Genellina, May 3, 2009, in forum: Python
    Replies:
    0
    Views:
    433
    Gabriel Genellina
    May 3, 2009
  3. Junkone

    send email using gmail as smtp

    Junkone, Dec 20, 2007, in forum: Ruby
    Replies:
    3
    Views:
    269
    Junkone
    Dec 20, 2007
  4. Mikael H.
    Replies:
    1
    Views:
    217
    Robert Klemme
    Feb 21, 2011
  5. ashish makani
    Replies:
    5
    Views:
    562
    Mark Lawrence
    Sep 20, 2012
Loading...

Share This Page