title: Java Mail not working
body: <p>I am sending an email using the Java mail api. And it works fine when I send an email to myself from my own account. But when I try to send an email to a different account it gives me an authentication exception. Here is my code:</p>
  
  <pre><code>package nl.cofely.MailHandler;
  
  import java.util.Date;
  import java.util.Properties;
  import javax.activation.CommandMap;
  import javax.activation.DataHandler;
  import javax.activation.DataSource;
  import javax.activation.FileDataSource;
  import javax.activation.MailcapCommandMap;
  import javax.mail.BodyPart;
  import javax.mail.Multipart;
  import javax.mail.PasswordAuthentication;
  import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeBodyPart;
  import javax.mail.internet.MimeMessage;
  import javax.mail.internet.MimeMultipart;
  
  public class Mail extends javax.mail.Authenticator {
  private String _user;
  private String[] _to;
  private String _from;
  private String _pass;
  
  private String _port;
  private String _sport;
  
  private String _host;
  
  private String _subject;
  private String _body;
  
  private boolean _auth;
  
  private boolean _debuggable;
  
  private boolean testMessageSend;
  
  private Multipart _multipart;
  static Mail instance;
  
  private Mail() {
      _host = "smtp.gmail.com"; // default smtp server
      _port = "465"; // default smtp port
      _sport = "465"; // default socketfactory port
  
      _subject = "Person in trouble   !"; // email subject
      _body = ""; // email body
  
      _debuggable = false; // debug mode on or off - default off
      _auth = true; // smtp authentication - default on
  
      _multipart = new MimeMultipart();
  
      // There is something wrong with MailCap, javamail can not find a
      // handler for the multipart/mixed part, so this bit needs to be added.
      MailcapCommandMap mc = (MailcapCommandMap) CommandMap
              .getDefaultCommandMap();
      mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
      mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
      mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
      mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
      mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
      CommandMap.setDefaultCommandMap(mc);
  }
  public static Mail getInstance(){
      if(instance == null){
          instance = new Mail();
      }
      return instance;
  }
  
  public void addAttachment(String filename) throws Exception {
      BodyPart messageBodyPart = new MimeBodyPart();
      DataSource source = new FileDataSource(filename);
      messageBodyPart.setDataHandler(new DataHandler(source));
      messageBodyPart.setFileName(filename);
  
      _multipart.addBodyPart(messageBodyPart);
  }
  
  @Override
  public PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(_user, _pass);
  }
  
  private Properties _setProperties() {
      Properties props = new Properties();
  
      props.put("mail.smtp.host", _host);
  
      if (_debuggable) {
          props.put("mail.debug", "true");
      }
  
      if (_auth) {
          props.put("mail.smtp.auth", "true");
      }
  
      props.put("mail.smtp.port", _port);
      props.put("mail.smtp.socketFactory.port", _sport);
      props.put("mail.smtp.socketFactory.class",
              "javax.net.ssl.SSLSocketFactory");
      props.put("mail.smtp.socketFactory.fallback", "false");
  
      return props;
  }
  
  // the getters and setters
  public String getBody() {
      return _body;
  }
  
  public void setBody(String _body) {
      _body = _body + " gebruiker: " + _from;
      this._body = _body;
  }
  
  // more of the getters and setters …..
  public boolean send() throws Exception {
      Properties props = _setProperties();
  
      if (!_user.equals("") &amp;&amp; !_pass.equals("") &amp;&amp; _to.length &gt; 0
              &amp;&amp; !_from.equals("") &amp;&amp; !_subject.equals("")
              &amp;&amp; !_body.equals("")) {
          Session session = Session.getInstance(props, this);
  
          MimeMessage msg = new MimeMessage(session);
  
          msg.setFrom(new InternetAddress(_from));
  
          InternetAddress[] addressTo = new InternetAddress[_to.length];
          for (int i = 0; i &lt; _to.length; i++) {
              addressTo[i] = new InternetAddress(_to[i]);
          }
          msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
  
          msg.setSubject(_subject);
          msg.setSentDate(new Date());
  
          // setup message body
          BodyPart messageBodyPart = new MimeBodyPart();
          messageBodyPart.setText(_body);
          if(testMessageSend){
              _multipart.removeBodyPart(0);
          }
          _multipart.addBodyPart(messageBodyPart,0);
          System.out.println(_multipart.getBodyPart(0));
  
          // Put parts in message
          msg.setContent(_multipart);
  
  
          // send email
          Transport.send(msg);
  
          return true;
      } else {
          return false;
      }
  }
  public boolean sendTestMail() throws Exception{
      setSubject("Testing mail configuration!");
      setBody("Dit is een email voor het testen van de email configuratie ");
      testMessageSend = send();
      setBody("");
      return testMessageSend;
  }
  public void setFrom(String _from){
      this._from = _from;
  }
  public String getFrom(){
      return _from;
  }
  public void setPass(String _pass){
      this._pass = _pass;
  }
  public String getPass(){
      return _pass;
  }
  public void setSubject(String _subject){
      this._subject = _subject;
  }
  public String getSubject(){
      return _subject;
  }
  public void setUser(String _user){
      this._user = _user;
  }
  public String getUser(){
      return _user;
  }
  
  public void updateUserInfo(String[] _to, String _from, String _pass){
      this._to = _to;
      this._from = _from;
      this._pass = _pass;
      this._user = _to[0].substring(0, _to[0].lastIndexOf("@"));
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Can anyone tell what is going on here? Thanks</p>