package com.beltino.common_java;import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
import java.io.*;
import javax.activation.*;public class JavaMail {
  String m_user = null; //用于需要验证的用户名
  String m_pass = null; //口令
  String m_server = null; //SMTP服务器名称
  int m_port = 25; //端口号,缺省为25
  String m_from = null; //发件人
  String m_to = null; //收件人
  String m_cc = null; //抄送
  String m_bcc = null; //密送
  String m_subject = null; //主题
  String m_body = null; //内容体
  LinkedList m_attach = null; //附件的文件名列表
  JavaMail() {
  }  //设定smtp服务器用户名(可选)
  public void setUser(String user) {
    m_user = user;
  }  //设定smtp服务器口令(可选)
  public void setPass(String pass) {
    m_pass = pass;
  }  //设定smtp的地址和端口号(可选)
  public void setServer(String server, int port) {
    if (port > 0) {
      m_port = port;
    }
    m_server = server;
  }  //设定smtp服务器地址,端口号使用缺省值
  public void setServer(String server) {
    m_server = server;
  }  //发件人
  public void setFrom(String from) {
    m_from = from;
  }  //收件人
  public void setTo(String to) {
    m_to = to;
  }  //抄送(可选)
  public void setCc(String cc) {
    m_cc = cc;
  }  //密送(可选)
  public void setBcc(String bcc) {
    m_bcc = bcc;
  }  //设置新的主题(可选)
  public void setSubject(String subject) {
    m_subject = subject;
  }  //设置信的内容,若以<html>或<HTML>开头的内容为text/html格式
  public void setBody(String body) {
    m_body = body;
  }  //可以多次添加附件,文件名最好是全路径,使用相对路径容易出错
  public void attach(String attachfile) {
    if (m_attach == null) {
      m_attach = new LinkedList();
    }
    m_attach.add(attachfile);
  }  public boolean sendMail() throws Exception {    Properties props = System.getProperties();
    props.setProperty("mail.transport.protocol", "smtp"); //smtp协议
    props.setProperty("mail.smtp.host", m_server); //服务器地址
    props.setProperty("mail.smtp.port", "" + m_port); //端口号    //认证信息
    if (m_user != null && m_pass != null && m_user.length() > 0 &&
        m_pass.length() > 0) {
      props.setProperty("mail.smtp.auth", "true");
    }    javax.mail.Session sess = javax.mail.Session.getDefaultInstance(props, null);
    MimeMessage msg = new MimeMessage(sess);    //发件人
    msg.setFrom(new InternetAddress(m_from));    //收件人、抄送、密送
    msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(m_to));
    if (m_cc != null && m_cc.length() > 0) {
      msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(m_cc));
    }
    if (m_bcc != null && m_bcc.length() > 0) {
      msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(m_bcc));
    }
    //主题
    if (m_subject != null) {
      msg.setSubject(m_subject);      //发件日期
    }
    msg.setSentDate(new Date());    //文本内容
    MimeMultipart content = new MimeMultipart();
    if (content == null) {
      return false;
    }    MimeBodyPart part;
    if (m_body != null && m_body.length() > 0) {
      part = new MimeBodyPart();
      String type = "text/plain";
      if (m_body.startsWith("<html>") || m_body.startsWith("<HTML>")) {
        type = "text/html";
      }
      part.setText(m_body);      //以<html>和<HTML>开始的文本为text/html类型
      part.setHeader("Content-Type", type);      content.addBodyPart(part);    }    //添加附件
    if (m_attach != null) {      String filename;
      Iterator it = m_attach.iterator();      while (it.hasNext()) {
        filename = (String) it.next();
        if (filename == null || filename.length() <= 0) {
          continue;
        }        part = new MimeBodyPart();
        FileDataSource fds = new FileDataSource(filename);
        part.setDataHandler(new DataHandler(fds));
        part.setFileName(MimeUtility.encodeText(fds.getName()));        content.addBodyPart(part);
      }
    }    //保存修改
    msg.setContent(content);
    msg.saveChanges();    //如果需要验证用户(如:smtp.sina.com.cn),则使用connect并sendMessage
    //注意必须设定mail.smtp.auth属性为true
    if (m_user != null && m_pass != null && m_user.length() > 0 &&
        m_pass.length() > 0) {
      Transport trans = sess.getTransport();
      trans.connect(m_server, m_user, m_pass);
      trans.sendMessage(msg, InternetAddress.parse(m_to));
      trans.close();
    }
    //否则,不需要用户名和口令使用静态方法发送由件
    else {
      Transport.send(msg);    }
    return true;
  }  public static void main(String argv[]) throws Exception {    JavaMail smtp = new JavaMail();
    smtp.setFrom("XXX@XXX");
    smtp.setTo("[email protected]");
    smtp.setCc("[email protected]>");    smtp.setServer("XXX.com");
    smtp.setUser("zmj");
    smtp.setPass("zmjsxd");    smtp.setSubject("你好,测试由件");
    smtp.setBody("<html><a href=hh>你好</a>,我的朋友\r\n还有</html>");
    smtp.attach("d:\\bbb.jpg");
    smtp.attach("d:\\TOrder修改.sql");    boolean ret = smtp.sendMail();    if(ret){
      System.out.println("发送成功");
    }else{
      System.out.println("发送失败");
    }  }}

解决方案 »

  1.   

    以下是完整代码:package com.me.util.mail;import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.Date;public class sendMail {  public static void main(String[] args) {    try{    //设置邮件信息
        String tto="[email protected]";
        String ttitle="你好,这是测试主题";
        String tcontent="你好,这是测试邮件文本";    Properties props=new Properties();//也可用Properties props = System.getProperties();
        props.put("mail.smtp.host","smtp.163.com");//存储发送邮件服务器的信息
        props.put("mail.smtp.auth","true");//同时通过验证
        Session s=Session.getInstance(props);//根据属性新建一个邮件会话
        s.setDebug(true);    MimeMessage message=new MimeMessage(s);//由邮件会话新建一个消息对象    //设置邮件
        InternetAddress from=new InternetAddress("fromtest");
        message.setFrom(from);//设置发件人
        InternetAddress to=new InternetAddress(tto);
        message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO
        message.setSubject(ttitle);//设置主题
        message.setText(tcontent);//设置信件内容
        message.setSentDate(new Date());//设置发信时间    //发送邮件
        message.saveChanges();//存储邮件信息
        Transport transport=s.getTransport("smtp");
        transport.connect("smtp.163.com" , "userid","password");//以smtp方式登录邮箱
        transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有
        //已设好的收件人地址
        transport.close();
        System.out.println("发送成功!");
        }catch(MessagingException e){
          System.out.println(e.toString());
        }
      }}