邮件操作 (发送邮件)

import java.security.Security;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
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;

import com.wzinfo.base.util.Tools;

public class SendMail
{
    private String smtphost = null; // smtp主机
    private String username = null; // smtp认证用户
    private String password = null; // smtp用户密码
    private String encoding = null; // 邮件编码
    private String subject = null;  // 邮件主题
    private String content = null;  // 邮件内容
    private String from = null;     // 邮件发送于
    private StringBuffer affixs = new StringBuffer(300);   // 邮件附件
    private StringBuffer tomails = new StringBuffer(600);  // 发送邮件到
    private StringBuffer ccmails = new StringBuffer(100);  // 抄送邮件到
    private StringBuffer bccmails = new StringBuffer(100); // 暗送邮件到
    private StringBuffer msg = new StringBuffer(600);  // 发送消息
    private Properties props = System.getProperties(); // 系统属性

    public SendMail()
    {
    }

    public void setTO(String mails)
    {
        tomails.append(filterMails(0, mails));
    }

    public void setCC(String mails)
    {
        ccmails.append(filterMails(1, mails));
    }

    public void setBCC(String mails)
    {
        bccmails.append(filterMails(2, mails));
    }

    public String filterMails(int type, String mails)
    {
        List list = splitAsMail(mails);
        int num = list.size();
        if (num < 1) return "";
        StringBuffer sb = new StringBuffer();
        if (type == 0) sb.append(tomails); // TO
        else if (type == 1) sb.append(ccmails); // CC
        else if (type == 2) sb.append(bccmails); // BCC
        else return "";

        if (sb.length() < 1) sb.append(",");
        for (int i = 0; i < num; i++)
        {
            String[] vals = new String[2];
            vals[0] = Tools.toStr(list.get(i));
            int pos = vals[0].indexOf("<");
            if (pos < 0) vals[1] = vals[0];
            else vals[1] = Tools.lower(vals[0].substring(0, pos));
            if (sb.indexOf("," + vals[1] + ",") < 0) sb.append(vals[1]).append(",");
        }
        list = null;
        return sb.toString();
    }

    public int setAffix(String file)
    {
        List list = splitAsFile(file);
        int num = list.size();
        if (num < 1) return 0;
        for (int i = 0; i < num; i++)
            affixs.append(Tools.toStr(list.get(i))).append(";");
        list = null;
        return num;
    }

    public void setFrom(String mail)
    {
        from = mail; //只能是单一的邮箱.
    }

    public void setSendAuthInfo(String smtp, String user, String pswd)
    {
        smtphost = smtp;
        username = user;
        password = pswd;
    }

    public void setSubject(String str)
    {
        subject = str; // 邮件主题
    }

    public void setContent(String str)
    {
        content = str; // 邮件内容
    }

    public void setEncoding(String str)
    {
        encoding = str; // 邮件编码
    }

    private List splitAsMail(String mails)
    {
        List list = new ArrayList(50);
        if (mails == null || mails.trim().length() < 5) return list;
        String email = null; // 过滤空格,逗号,分号为坚线
        email = Tools.replace(mails, ";", ",");
        StringTokenizer token = new StringTokenizer(email, ",");
        while (token.hasMoreTokens())
        {
            email = Tools.toStr(token.nextToken());
            if (email.length() > 5)
            {
                int pos = email.indexOf("<");
                if (pos < 0 && Tools.isMail(email)) list.add(email);
                else if (pos > -1 && Tools.isMail(email.substring(0, pos))) list.add(email);
                else msg.append("/n邮箱无效 - ").append("[").append(email).append("]");
            }
        }
        return list;
    }

    private List splitAsFile(String files)
    {
        List list = new ArrayList(9);
        if (files == null || files.trim().length() < 1) return list;
        String file = null; // 过滤逗号为分号
        file = Tools.replace(files, ",", ";");
        StringTokenizer token = new StringTokenizer(file, ";");
        while (token.hasMoreTokens())
        {
            file = Tools.toStr(token.nextToken());
            if (Tools.isFile(file)) list.add(file);
            else if (file.length() < 1) msg.append("/n文件无效 - ").append("[").append(file).append("]");
        }
        return list;
    }

    private InternetAddress[] parseAddress(String mails)
    {
        InternetAddress[] address = null;
        try
        {
            address = InternetAddress.parse(mails);
        }
        catch (Exception e)
        {
            msg.append("/n解析邮件地址出错 - ").append("[").append(mails).append("]");
        }
        return address;
    }


    public String getMsg()
    {
        return msg.toString();
    }

    private long cost(long start)
    {
        return System.currentTimeMillis() - start;
    }

    public boolean send()
    {
        long start = System.currentTimeMillis();
        boolean test = true;
        props.put("mail.smtp.host", toStr(smtphost, "stmp.163.com"));
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        Message mmsg = new MimeMessage(session);

       
        try
        {
            //邮件发出人
            if (test) mmsg.setFrom(new InternetAddress(toStr(from, "liujy_mail@163.com")));
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件发送人[setFrom]出错");
        }

        // 邮件发送到
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(tomails.toString());
                int num = (address == null?0:address.length);
                if (num < 1)
                {
                    test = false;
                    msg.append("/n设置邮件接收者[无接收者]出错/n");
                }
                else
                {
                    mmsg.addRecipients(Message.RecipientType.TO, address);
                }
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件接收者[setTo]出错");
        }

        // 邮件抄送人
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(ccmails.toString());
                //int num = (address == null?0:address.length);
                mmsg.addRecipients(Message.RecipientType.CC, address);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件抄送者[setCC]出错");
        }

        // 邮件暗送人
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(bccmails.toString());
                //int num = (address == null?0:address.length);
                mmsg.addRecipients(Message.RecipientType.BCC, address);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件暗送者[setBCC]出错");
        }

        // 邮件主题
        try
        {
            if (test) mmsg.setSubject(toStr(subject, "No Subject"));
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置主题[setSubject]出错");
        }

        Multipart mpart = new MimeMultipart();

        // 设置邮件正文
        try
        {
            if (test)
            {
                String str = toStr(encoding, "utf-8");
                BodyPart part = new MimeBodyPart();
                part.setContent("<meta http-equiv=Content-Type content=text/html;charset=" + str
                        + ">" + toStr(content), "text/html;charset=" + str);
                mpart.addBodyPart(part);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件正文[setContent]出错");
        }

        // 设置邮件附件
        try
        {
            List list = splitAsFile(affixs.toString());
            int num = list.size();
            if (num < 1) msg.append("/n没有附件附带发送");
            if (num > 0 && test)
            {
                for (int i = 0; i < num; i++)
                {
                    BodyPart part = new MimeBodyPart();
                    FileDataSource fileds = new FileDataSource(toStr(list.get(i)));
                    part.setDataHandler(new DataHandler(fileds));
                    part.setFileName(fileds.getName());
                    mpart.addBodyPart(part);
                }
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件附件[FileAffix]出错");
        }

        try
        {
            msg.append("/n@@ -- 发送邮件设置结束 设置用时:").append(cost(start));
            start = System.currentTimeMillis();
            mmsg.setSentDate(new Date());
            mmsg.setContent(mpart);
            mmsg.saveChanges();
            Transport transport = session.getTransport("smtp");
            transport.connect(toStr(smtphost, "stmp.163.com"), toStr(username, "liujy_mail"), toStr(password, "***"));
            transport.sendMessage(mmsg, mmsg.getRecipients(Message.RecipientType.TO));// Transport.send(mimeMsg);
            transport.close();
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n@@ -- 邮件发送失败/n").append(e.toString());
        }
        finally
        {
            msg.append("/n@@ -- 发送邮件操作完成[");
            msg.append( (test?"成功":"失败"));
            msg.append("] 发送用时:").append(cost(start));
        }
        return test;
    }

    public void setGmailAuthInfo(String user, String pswd)
    {
        username = user;
        password = pswd;
    }
   
    public boolean sendGmail()
    {
        long start = System.currentTimeMillis();
        boolean test = true;
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        Properties gprops = System.getProperties();
        gprops.setProperty("mail.smtp.host", "smtp.gmail.com");
        gprops.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        gprops.setProperty("mail.smtp.socketFactory.fallback", "false");
        gprops.setProperty("mail.smtp.port", "465");
        gprops.setProperty("mail.smtp.socketFactory.port", "465");
        gprops.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(gprops, new Authenticator()
        {
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(toStr(username, "liujy.mail"), toStr("****"));
            }
        });
       
        Message mmsg = new MimeMessage(session);
       
        // 邮件发出人
        try
        {
            if (test) mmsg.setFrom(new InternetAddress(toStr(from, "liujy.mail@gmail.com")));
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件发送人[setFrom]出错");
        }

        // 邮件发送到
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(tomails.toString());
                int num = (address == null?0:address.length);
                if (num < 1)
                {
                    test = false;
                    msg.append("/n设置邮件接收者[无接收者]出错/n");
                }
                else
                {
                    mmsg.addRecipients(Message.RecipientType.TO, address);
                }
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件接收者[setTo]出错");
        }

        // 邮件抄送人
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(ccmails.toString());
                //int num = (address == null?0:address.length);
                mmsg.addRecipients(Message.RecipientType.CC, address);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件抄送者[setCC]出错");
        }

        // 邮件暗送人
        try
        {
            if (test)
            {
                InternetAddress[] address = parseAddress(bccmails.toString());
                //int num = (address == null?0:address.length);
                mmsg.addRecipients(Message.RecipientType.BCC, address);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件暗送者[setBCC]出错");
        }

        // 邮件主题
        try
        {
            if (test) mmsg.setSubject(toStr(subject, "No Subject"));
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置主题[setSubject]出错");
        }

        Multipart mpart = new MimeMultipart();

        // 设置邮件正文
        try
        {
            if (test)
            {
                String str = toStr(encoding, "utf-8");
                BodyPart part = new MimeBodyPart();
                part.setContent("<meta http-equiv=Content-Type content=text/html;charset=" + str
                        + ">" + toStr(content), "text/html;charset=" + str);
                mpart.addBodyPart(part);
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件正文[setContent]出错");
        }

        // 设置邮件附件
        try
        {
            List list = splitAsFile(affixs.toString());
            int num = list.size();
            if (num < 1) msg.append("/n没有附件附带发送");
            if (num > 0 && test)
            {
                for (int i = 0; i < num; i++)
                {
                    BodyPart part = new MimeBodyPart();
                    FileDataSource fileds = new FileDataSource(toStr(list.get(i)));
                    part.setDataHandler(new DataHandler(fileds));
                    part.setFileName(fileds.getName());
                    mpart.addBodyPart(part);
                }
            }
        }
        catch (Exception e)
        {
            test = false;
            msg.append("/n设置邮件附件[FileAffix]出错");
        }
       
        try
        {
            msg.append("/n@@ -- 发送Gmail邮件设置结束 设置用时:").append(cost(start));
            start = System.currentTimeMillis();
            mmsg.setSentDate(new Date());
            mmsg.setContent(mpart);
            mmsg.saveChanges();
            mmsg.setSentDate(new Date());
            Transport.send(mmsg);
        }       
        catch (Exception e)
        {
            test = false;
            msg.append("/n@@ -- Gmail邮件发送失败/n").append(e.toString());
        }
        finally
        {
            msg.append("/n@@ -- Gmail发送邮件操作完成[");
            msg.append( (test?"成功":"失败"));
            msg.append("] Gmail发送用时:").append(cost(start));
        }
        return true;
    }
   
    private String toStr(Object obj)
    {
        return (obj==null?"":obj.toString().trim());       
    }
   
    private String toStr(Object obj, String val)
    {
        String str = toStr(obj);
        if (str.length()<1) return toStr(val);
        return str;
    }
   
    public static void main(String[] args)
    {       
        SendMail send = new SendMail();
        send.setFrom("wu198751@163.com");
        send.setTO("wu198751@163.com");
        send.setSubject("mail send post  ~ ");
        send.setContent("mail send post  ~ ");
        //send.setAffix("D://eclipse//eclipse_workspace//VSS_WZTEST//src.rar");
        send.setSendAuthInfo("smtp.163.com", "wu198751", "wuhao198751");
        boolean test = send.send();
        if (test) System.out.println("邮件发送成功! " + send.getMsg());
        else System.err.println("邮件发送失败! " + send.getMsg());
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值