Java网络编程:利用Java mail包发送电子邮件

下面代码是利用Java mail包封装了一个发送邮件的类

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendMail {
    private static final String MAIL_ADDRESS_REGEX = "^[\\w\\.=-]+@[\\w\\.-]+\\.[\\w]{2,3}$";

    private String mailServer;
    private String sender;
    private String[] receiver;

    public SendMail(){

    }

    public void setMailBasicInfo(String mailServer,String sender,String receiver){
        this.mailServer = mailServer;
        this.sender = sender;
        this.receiver =receiver.split(",");
    }

    public void setMailBasicInfo(String mailServer,String sender,String[] users){
        this.mailServer = mailServer;
        this.sender = sender;
        this.receiver = users;
    }

    public void setMailBasicInfo(String mailServer,String sender,List<String> users){
        this.mailServer = mailServer;
        this.sender = sender;
        this.receiver = new String[users.size()];
        users.toArray(this.receiver);
    }

    public boolean send(String subject, String content, List<String> fileNames)
    {
        subject = subject==null?"":subject;
        content = content==null?"":content;
        Properties props = new Properties();
        props.put("mail.smtp.host", mailServer);
        Session session = Session.getInstance(props, null);
        try
        {
            InternetAddress[] receiver = getReceiverList();
            if (receiver.length == 0)
            {
                System.out.println("receiver is null");
                return false;
            }
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(sender));
            msg.setRecipients(Message.RecipientType.TO, receiver);
            msg.setSubject(subject);
            msg.setSentDate(new Date());

            Multipart container = new MimeMultipart();
            MimeBodyPart textBodyPart = new MimeBodyPart();
            textBodyPart.setContent(content.toString(), "text/html;charset=gbk");
            container.addBodyPart(textBodyPart);

            doAttachFile(container,fileNames);
            msg.setContent(container);
            System.out.println("begin send mail");
            Transport.send(msg);
            System.out.println("send mail success");
        }
        catch (MessagingException e)
        {
            System.out.println("send mail fail");
            System.out.println(e);
            return false;
        }
        catch(Exception e){
            return false;
        }
        return true;
    }

    public boolean send(String subject, String content){
        return send(subject,content,null);
    }

    public boolean send(String subject){
        return send(subject,null);
    }

    private void doAttachFile(Multipart container, List<String> fileNames) throws MessagingException{
        if(fileNames==null || fileNames.size()==0)
            return;
        for(String filename:fileNames){
            File f = new File(filename);
            if(!f.isFile())
                continue;
            System.out.println("the attach file is:"+filename);
            MimeBodyPart fileBodyPart = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(f);// 要发送的附件地址
            fileBodyPart.setDataHandler(new DataHandler(fds));
            fileBodyPart.setFileName(fds.getName());// 设置附件的名称
            container.addBodyPart(fileBodyPart);
        }
    }

    private InternetAddress[] getReceiverList() throws AddressException
    {
        ArrayList<InternetAddress> toList = new ArrayList<InternetAddress>();
        for (int i = 0; i < receiver.length; ++i)
        {
            if (receiver[i].matches(MAIL_ADDRESS_REGEX))
            {
                toList.add(new InternetAddress(receiver[i]));
            }
        }

        return (InternetAddress[]) toList.toArray(new InternetAddress[toList.size()]);
    }
}

使用举例

String host = "168.xx.xx.xx"; //邮件服务器的地址
String subject = "发送邮件的主题";
String sender = "test@gmail.com";
List<String> receivers = new ArrayList<String>();
receivers.add("user1@263.com");
receivers.add("user2@263.com");
String content = "邮件主题";
SendMail sendMail = new SendMail();
sendMail.setMailBasicInfo(host, sender, receivers);
sendMail.send(subject, content, null); //没有附件

正文也可以是html内容,如
String content = "<html>详细信息:<a href='xxxx'>请点击查看!</a></html>";
 

 

posted @ 2016-01-12 08:37  51kata  阅读(394)  评论(0编辑  收藏  举报