[Java Web]stmp发送带附件邮件(附SSL版)

来源:互联网 发布:kik软件 编辑:程序博客网 时间:2024/06/16 16:49
public class MailFileSendUtils {    private Properties props; //系统属性    private Session session; //邮件会话对象    private MimeMessage mimeMsg; //MIME邮件对象    private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象    /**     * Constructor     * @param     */    public MailFileSendUtils(){        props = System.getProperties();        props.put("mail.smtp.auth","false");        session = Session.getDefaultInstance(props, null);        session.setDebug(true);        mimeMsg = new MimeMessage(session);        mp = new MimeMultipart();    }    /**     * Constructor     * @param smtp 邮件发送服务器     */    public MailFileSendUtils(String smtp, String username, String password){        props = System.getProperties();        props.put("mail.smtp.auth","true");        props.put("mail.smtp.host", smtp);        props.put("username", username);        props.put("password", password);        session = Session.getDefaultInstance(props, null);        session.setDebug(true);        mimeMsg = new MimeMessage(session);        mp = new MimeMultipart();    }    /**     * 发送邮件     */    public boolean sendMail(String from, String[] to, String subject, String content, String filename) {        try {            //设置发信人            mimeMsg.setFrom(new InternetAddress(from));            //设置接收人            for (int i = 0; i < to.length; i++) {                mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));            }            //设置抄送人//            for (int i = 0; i < copyto.length; i++) {//                mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));//            }            //设置主题            mimeMsg.setSubject(subject);            //设置正文            BodyPart bp = new MimeBodyPart();            bp.setContent(content, "text/html;charset=utf-8");            mp.addBodyPart(bp);            //设置附件            bp = new MimeBodyPart();            FileDataSource fileds = new FileDataSource(filename);            bp.setDataHandler(new DataHandler(fileds));            bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));            mp.addBodyPart(bp);            mimeMsg.setContent(mp);            mimeMsg.saveChanges();            //发送邮件            if(props.get("mail.smtp.auth").equals("true")){                Transport transport = session.getTransport("smtp");                transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));//                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));                transport.close();            }else{                Transport.send(mimeMsg);            }            System.out.println("邮件发送成功");        } catch (MessagingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return true;    }//    public void toSendMail(SendMailParam sendMailParam){//        MailFileSendUtils email = new MailFileSendUtils(sendMailParam.getSmtp(), sendMailParam.getUsername(), sendMailParam.getPassword());//        email.sendMail(sendMailParam.getFrom(), sendMailParam.getTo(), sendMailParam.getSubject(), sendMailParam.getContent(), sendMailParam.getFilepath());//    }    public static void main(String[] args) {        String smtp = "smtp.exmail.qq.com";        String username = "发送的邮箱账号";        String password = "发送的邮箱密码";        String from = "发送的邮箱";        String[] to = {"接收邮件的邮箱"};//        String[] copyto = {"抄送的邮箱"};        String subject = "主题6";        String content = "邮件内容6";        String filename = "附件的文件";        MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);//        email.sendMail(from, to, copyto, subject, content, filename);        email.sendMail(from, to, subject, content, filename);    }}

(附:SSL版)

public class MailFileSendUtils {    private Properties props; //系统属性    private Session session; //邮件会话对象    private MimeMessage mimeMsg; //MIME邮件对象    private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象    /**     * Constructor     * @param     */    public MailFileSendUtils(){        props = System.getProperties();        props.put("mail.smtp.auth","false");        session = Session.getDefaultInstance(props, null);        session.setDebug(true);        mimeMsg = new MimeMessage(session);        mp = new MimeMultipart();    }    /**     * Constructor     * @param smtp 邮件发送服务器     */    public MailFileSendUtils(String smtp,                             String username,                             String password){        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";        props = System.getProperties();        MailSSLSocketFactory sf = null;        try {            sf = new MailSSLSocketFactory();        } catch (GeneralSecurityException e) {        }        sf.setTrustAllHosts(true);        props.put("mail.smtp.auth","true");        props.put("mail.smtp.host", smtp);        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);        props.put("mail.smtp.socketFactory.fallback", "false");        props.put("mail.smtp.ssl.enable", "true");        props.put("mail.smtp.port", "465");        props.put("mail.smtp.ssl.socketFactory", sf);//        props.put("username", username);//        props.put("password", password);        session = Session.getInstance(props, new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication(username, password);            }        });        session.setDebug(true);        mimeMsg = new MimeMessage(session);        mp = new MimeMultipart();    }    /**     * 发送邮件     */    public boolean sendMail(String from,                            String[] to,                            String subject,                            String content,                            String filename) {        try {            //设置发信人            mimeMsg.setFrom(new InternetAddress(from));            //设置接收人            for (int i = 0; i < to.length; i++) {                mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));            }            //设置抄送人//            for (int i = 0; i < copyto.length; i++) {//                mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));//            }            //设置主题            mimeMsg.setSubject(subject);            //设置正文            BodyPart bp = new MimeBodyPart();            bp.setContent(content, "text/html;charset=utf-8");            mp.addBodyPart(bp);            //设置附件            bp = new MimeBodyPart();            FileDataSource fileds = new FileDataSource(filename);            bp.setDataHandler(new DataHandler(fileds));            bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));            mp.addBodyPart(bp);            mimeMsg.setContent(mp);            mimeMsg.saveChanges();            //发送邮件            if(props.get("mail.smtp.auth").equals("true")){                Transport transport = session.getTransport("smtp");                transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));//                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));                transport.close();            }else{                Transport.send(mimeMsg);            }            System.out.println("邮件发送成功");        } catch (MessagingException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return true;    }    public boolean toSendMail(SendMailParam sendMailParam){        MailFileSendUtils email = new MailFileSendUtils(                sendMailParam.getSmtp(),                sendMailParam.getUsername(),                sendMailParam.getPassword());        email.sendMail(                sendMailParam.getFrom(),                sendMailParam.getTo(),                sendMailParam.getSubject(),                sendMailParam.getContent(),                sendMailParam.getFilepath());        return true;    }//    public static void main(String[] args) {//        String smtp = "smtp.mxhichina.com";//        String username = "邮箱";//        String password = "邮箱密码";//        String from = "谁去发";//        String[] to = {"发给谁"};////        String[] copyto = {"抄送的邮箱"};//        String subject = "huawei";//        String content = "邮件内容6666";//        String filename = "gdt-3583118353-ad-20170823.xls";//        MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);////        email.sendMail(from, to, copyto, subject, content, filename);//        email.sendMail(from, to, subject, content, filename);//    }}

在项目中使用这套工具,main方法我注释掉,然后使用toSendMail(SendMailParam sendMailParam)。
这里定义的SendMailParam 为:

public class SendMailParam {   private String smtp;   private String username;   private String password;   private String from;//发送人   private String[] to;//接收人    //        String[] copyto = {"909891736@qq.com"};   private String subject;//邮件主题   private String content;//邮件内容   private String filepath;//文件拿到的路径   public SendMailParam(){       this.smtp = "smtp.exmail.qq.com";//例子       this.username = "邮箱账号";       this.password = "邮箱密码";       this.from = "邮箱";       this.subject = "";       this.content = "";       this.filepath = "";   }    public String getSmtp() {        return smtp;    }    public void setSmtp(String smtp) {        this.smtp = smtp;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getFrom() {        return from;    }    public void setFrom(String from) {        this.from = from;    }    public String[] getTo() {        return to;    }    public void setTo(String[] to) {        this.to = to;    }    public String getSubject() {        return subject;    }    public void setSubject(String subject) {        this.subject = subject;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    public String getFilepath() {        return filepath;    }    public void setFilepath(String filepath) {        this.filepath = filepath;    }}

maven依赖包

        <dependency>            <groupId>javax.mail</groupId>            <artifactId>mail</artifactId>            <version>1.4.7</version>        </dependency>

gradle依赖包

    compile "javax.mail:mail:1.4.7"
原创粉丝点击