java - javax.mail.NoSuchProviderException: Invalid protocol :null -


we have socket application sends out quite number of email out. decided send huge number message trigger emails. see email taking hours before reach of inboxes either gmail,hotmail or yahoo etc. have codes in begining.

public class commuse {   bonecp connectionpool = null;   class connectionhandler implements runnable {     private socket receivedsocketconn1;     connectionhandler(socket receivedsocketconn1) {       this.receivedsocketconn1=receivedsocketconn1;     }     public void run() {      .....     }     void sendclientemail(string emailmessagestring)      {       try        {           properties props = new properties();                 props.put("mail.smtp.host", "**********");                   props.put("mail.smtp.socketfactory.port", "******");                 //props.put("mail.smtp.socketfactory.class","javax.net.ssl.sslsocketfactory");                   props.put("mail.smtp.auth", "true");                 props.put("mail.smtp.port", "*****");                    session session = session.getdefaultinstance(props,new javax.mail.authenticator()           {                          protected passwordauthentication getpasswordauthentication()              {                                return new passwordauthentication("*********","*******");                            }                  });             int count=0;             system.out.println("\n\nclient email queue took ready :"+emailmessagestring);                try                 {                     string[] emarray = null;                     emarray = emailmessagestring.split("@eml@");                     message emailmessage = new mimemessage(session);                                 emailmessage.setfrom(new internetaddress("****************"));                     if(emarray.length>1)                     {                      for(int iemail=1; iemail<emarray.length ; iemail++)                      {                       string cc1 = emarray[iemail];                       emailmessage.addrecipient(message.recipienttype.to,new internetaddress(cc1));                      }                                                emailmessage.setrecipients(message.recipienttype.bcc,internetaddress.parse("**************"));                     }                     else                     {                      emailmessage.setrecipients(message.recipienttype.to,internetaddress.parse("*************"));                        }                     emailmessage.setsubject("alerts");                     emailmessage.settext(emarray[0]);                     transport.send(emailmessage);                }                catch (exception e)                 {                system.out.println("transport problem");                e.printstacktrace();                }         }         catch (exception e)         {         system.out.println("main email try got problem");         e.printstacktrace();        }           } } 

so based on link how send bulk mails using javax.mail api efficiently? & can use reuse authenticated sessions improve speed? tried change following. end mail exception. tried build 1 session , keep reusing avoid mail delivery delay. declare @ top session session = null; store session created?

public class commuse {       bonecp connectionpool = null;        session session = null;       class connectionhandler implements runnable {         private socket receivedsocketconn1;         connectionhandler(socket receivedsocketconn1) {           this.receivedsocketconn1=receivedsocketconn1;         }         public void run() {          .....         }         void sendclientemail(string emailmessagestring)          {           try            {                               int count=0;                 system.out.println("\n\nclient email queue took ready :"+emailmessagestring);                    try                     {                         string[] emarray = null;                         emarray = emailmessagestring.split("@eml@");                         message emailmessage = new mimemessage(session);                                     emailmessage.setfrom(new internetaddress("****************"));                         if(emarray.length>1)                         {                          for(int iemail=1; iemail<emarray.length ; iemail++)                          {                           string cc1 = emarray[iemail];                           emailmessage.addrecipient(message.recipienttype.to,new internetaddress(cc1));                          }                                                    emailmessage.setrecipients(message.recipienttype.bcc,internetaddress.parse("**************"));                         }                         else                         {                          emailmessage.setrecipients(message.recipienttype.to,internetaddress.parse("*************"));                            }                         emailmessage.setsubject("alerts");                         emailmessage.settext(emarray[0]);                         transport t = session.gettransport();                         t.connect();                         t.sendmessage(emailmessage, emailmessage.getallrecipients());                       }                    catch (exception e)                     {                    system.out.println("transport problem");                    e.printstacktrace();                    }             }             catch (exception e)             {             system.out.println("main email try got problem");             e.printstacktrace();            }               }     }      public static void main(string[] args) {      new commuse ();    }    commuse () {      properties props = new properties();                     props.put("mail.smtp.host", "**********");                       props.put("mail.smtp.socketfactory.port", "******");                     //props.put("mail.smtp.socketfactory.class","javax.net.ssl.sslsocketfactory");                       props.put("mail.smtp.auth", "true");                     props.put("mail.smtp.port", "*****");                        session = session.getinstance(props,new javax.mail.authenticator()               {                              protected passwordauthentication getpasswordauthentication()                  {                                    return new passwordauthentication("*********","*******");                                }                      });     } 

stack trace below.

javax.mail.nosuchproviderexception: invalid protocol: null @ javax.mail.session.getprovider(session.java:440) @ javax.mail.session.gettransport(session.java:659) @ javax.mail.session.gettransport(session.java:640) @ javax.mail.session.gettransport(session.java:626) @ commuse $connectionhandler.sendemail(commuse .java:26028) @ commuse $connectionhandler.run(commuse .java:4734) @ java.lang.thread.run(thread.java:722)   

you've made @ least 2 of these common javamail mistakes. fix them , see if helps. if doesn't, update post new code , details of exception you're getting, including stack trace.


Comments