使用 JavaMail 发送邮件:

首先,jsp 中

<form action="servlet" method="post" ENCTYPE="multipart/form-data">

必须添加 ENCTYPE 属性才能支持附件上传功能。

其次,编写两个类:

  • FormHandler.java 处理表单
  • SenMail.java 发送邮件

其中,SendMail.java 中关键代码如下:

import javax.mail.internet.*;
import java.util.*;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
public class SendMail(){
    private String user,password,host;
    private Session session;
    private Properties props;
    priavet MimeMultipart mp;
    private MimeMessage message;

    public SendMail(String host,String user,String password){
        props=System.getProperties();
        props.put("mail.smtp.host",host);
        props.put("mail.smtp.auth","true");//身份验证
        MyAuthentication auth=new MyAuthentication(user,password);
        session=Session.getDefaultInstance(props,auth);
        session.setDebug(true);//调试,可在控制台看到运行过程
        message=new MimeMessage(session);
        mp=new MimeMultipart();
    }
    public void setContent(String content){
        try{
            MimeBodyPart bp=new MimeBodyPart();
            bp.setContent("<meta http-equiv=Content-Type content=text/html;charset=gb2312>"+ content,"text/html;charset=gb2312");//注意这里不要写错
            mp.addBodyPart(bp);
        }catch(MessagingException e){

        }
    }
    public void addAttathment(String filePath){
        try{
            MimeBodyPart bp=new MimeBodyPart();
            FileDataSource source=new FileDataSource(filePath);
            bp.setDataHandler(new DataHandler(source));
            bp.setFileName(source.getName);
            mp.addBodyPart(bp);
        }catch(MessagingException e{

        }
    }

    public boolean send(){//发送邮件
        message.addMultipart(mp);
        message.saveChanges();//如果发送简单邮件不用写这两行
        ...
    }
}

注意:如果发送简单文本邮件,则使用 message.setText(content) 就可以完成了。