package com.cn.mail.util;import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.security.spec.X509EncodedKeySpec;
public class SendMail {
  private MimeMessage mimeMsg; //MIME mail object  private Session session;
  private Properties props; //system property
  private boolean needAuth = false;  private String username = "";
  private String password = "";  private Multipart mp; //Multipart ,存放信件 title\内容\附件等  public SendMail(String smtp) {
    setSmtpHost(smtp);
    createMimeMessage();
  }  /**
   * @param hostName String
   */
  public void setSmtpHost(String hostName) {
    System.out.println("sytem属性:mail.smtp.host = " + hostName);
    if (props == null) {
      props = System.getProperties();
    }
    props.put("mail.smtp.host", hostName); //SMTP主机
  }  /**
   * @return boolean
   */
  public boolean createMimeMessage() {
    try {
      System.out.println("session begin-------");
      session = Session.getInstance(props, null);
    }
    catch (Exception e) {
      System.err.println("Session.getInstance faild!" + e);
      return false;
    }    System.out.println("MimeMessage begin-------!");
    try {
      mimeMsg = new MimeMessage(session);
      mp = new MimeMultipart();      return true;
    }
    catch (Exception e) {
      System.err.println("MimeMessage fiald!" + e);
      return false;
    }
  }  /**
   * @param need boolean
   */
  public void setNeedAuth(boolean need) {
    System.out.println(":mail.smtp.auth = " + need);
    if (props == null) {
      props = System.getProperties();    }
    if (need) {
      props.put("mail.smtp.auth", "true");
    }
    else {
      props.put("mail.smtp.auth", "false");
    }
  }  /**
   * @param name String
   * @param pass String
   */
  public void setNamePass(String name, String pass) {
    username = name;
    password = pass;
  }  /**
   * @param mailSubject String
   * @return boolean
   */
  public boolean setSubject(String mailSubject) {
    System.out.println("set title begin-----!");
    try {
      if (!mailSubject.equals("") && mailSubject != null) {
        mimeMsg.setSubject(mailSubject);
      }
      return true;
    }
    catch (Exception e) {
      System.err.println("set title faild!");
      return false;
    }
  }  /**
   * @param name String
   * @param pass String
   */
  public boolean addFileAffix(String filename) {    System.out.println("增加附件----:" + filename);
    if (filename.equals("") || filename == null) {
      return false;
    }
    String file[];
    file = filename.split(";");
    System.err.println("========" + file.length);
    try {
      for (int i = 0; i < file.length; i++) {
        BodyPart bp = new MimeBodyPart();
        FileDataSource fileds = new FileDataSource(file[i]);
        bp.setDataHandler(new DataHandler(fileds));
        bp.setFileName(fileds.getName());
        mp.addBodyPart(bp);
      }
      return true;
    }
    catch (Exception e) {
      System.err.println("增加附件:" + filename + "--faild!" + e);
      return false;
    }  }  /**
   * @param name String
   * @param pass String
   */
  public boolean setFrom(String from) {
    System.out.println("set Mail From!");
    try {
      mimeMsg.setFrom(new InternetAddress(from));
      return true;
    }
    catch (Exception e) {
      return false;
    }
  }  /**
   * @param name String
   * @param pass String
   */
  public boolean setTo(String to) {
    if (to == null) {
      return false;
    }    try {
      mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
      return true;
    }
    catch (Exception e) {
      return false;
    }  }  /**
   * @param name String
   * @param pass String
   */
  public boolean setCopyTo(String copyto) {
    if (copyto.equals("") || copyto == null) {
      return false;
    }
    try {
      String copy[];
      int i = 0;
      copy = copyto.split(";");
      for(i=0; i<copy.length; i++){
        mimeMsg.setRecipients(Message.RecipientType.CC,
                              (Address[]) InternetAddress.parse(copy[i]));
      }
      return true;
    }
    catch (Exception e) {
      return false;
    }
  }  /**
   * @param mailBody String
   */
  public boolean setBody(String mailBody) {
    try {
      BodyPart bp = new MimeBodyPart();
      bp.setContent(
          "<meta http-equiv=Content-Type content=text/html; charset=gb2312>" +
          mailBody, "text/html;charset=GB2312");
      mp.addBodyPart(bp);      return true;
    }
    catch (Exception e) {
      System.err.println("Set content Fiald!" + e);
      return false;
    }
  }  /**
   *送html
   * @param htmlPath
   * @return
   */
  public boolean setHtml(String htmlPath) {
    try {
      if (!htmlPath.equals("") && htmlPath != null) {
        BodyPart mbp = new MimeBodyPart();
        DataSource ds = new FileDataSource(htmlPath);
        mbp.setDataHandler(new DataHandler(ds));
        mbp.setHeader("Content-ID", "meme");
        mp.addBodyPart(mbp);
      }
      return true;
    }
    catch (Exception e) {
      System.err.println("set html Fiald!" + e);
      return false;
    }
  }  /**
   * @param name String
   * @param pass String
   */
  public boolean sendout() {
    try {
      mimeMsg.setContent(mp);
      mimeMsg.saveChanges();
      System.out.println("正在 Send Mail ....");      Session mailSession = Session.getInstance(props, null);
      Transport transport = mailSession.getTransport("smtp");
      transport.connect( (String) props.get("mail.smtp.host"), username,
                        password);
      transport.sendMessage(mimeMsg,
                            mimeMsg.getRecipients(Message.RecipientType.TO));
      transport.sendMessage(mimeMsg,
                            mimeMsg.getRecipients(Message.RecipientType.CC));
      System.out.println("Mail Send 成功!");
      transport.close();      return true;
    }
    catch (Exception e) {
      System.err.println("Mail Send Fiald!" + e);
      return false;
    }
  }}

解决方案 »

  1.   

    没有注释倒没有什么,只是我一直无法通过一个发简单email的测试
    两种验证用户名密码的方法都用过了,无法测试通过代码如下import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;
    public class sendMail
    {
        public static void main(String args[]) throws Exception
        {        String host = "smtp.tom.com";
            String from =  "[email protected]";
            String to = "[email protected]";
            String username = "kotaro2005";
            String password = "******";        // Get system properties
            // Properties props = System.getProperties(); 
            Properties props = new Properties();
            //Properties props = System.getProperties();        // Setup mail server
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");
            //SmtpAuth sa=new SmtpAuth(); 
            //sa.getuserinfo("kotaro2005","*******"); 
            // Get session
            Session session = Session.getInstance(props,null);
            
            // watch the mail commands go by to the mail server
            session.setDebug(true);        // Define message
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO,
              new InternetAddress(to));
            message.setSubject("Hello JavaMail");
            message.setText("Welcome to JavaMail");        // Send message
            message.saveChanges();
            Transport transport = session.getTransport("smtp");
            transport.connect(host, username, password);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        }
    }
    错误信息如下:
    javax.mail.SendFailedException: Sending failed;
      nested exception is:
    class javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
      nested exception is:
    java.net.SocketException: Software caused connection abort: connect at javax.mail.Transport.send0(Transport.java:218) at javax.mail.Transport.send(Transport.java:80) at testcon.ConTest.main(ConTest.java:98)javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
      nested exception is:
    java.net.SocketException: Software caused connection abort: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1008) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) at javax.mail.Service.connect(Service.java:255)Sending failed;
      nested exception is:
    class javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
      nested exception is:
    java.net.SocketException: Software caused connection abort: connect at javax.mail.Service.connect(Service.java:134) at javax.mail.Service.connect(Service.java:86) at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:104) at javax.mail.Transport.send0(Transport.java:162) at javax.mail.Transport.send(Transport.java:80) at testcon.ConTest.main(ConTest.java:98)
      

  2.   

    不好意思;
    错误信息是
    javax.mail.MessagingException: Could not connect to SMTP host: smtp.tom.com, port: 25;
      nested exception is:
    java.net.SocketException: Software caused connection abort: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1008)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197)
    at javax.mail.Service.connect(Service.java:233)
    at javax.mail.Service.connect(Service.java:134)
    at testcon.sendMail.main(sendMail.java:46)
    Exception in thread "main" 
    上面的写错了