服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

利用jmail发带附件的邮件

package com.sidiw.util.jmail;

import java.util.date;
import java.util.hashmap;
import java.util.map;

import javax.activation.datahandler;
import javax.activation.datasource;
import javax.activation.filedatasource;
import javax.mail.messagingexception;
import javax.mail.multipart;
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 javax.mail.internet.mimemessage.recipienttype;

import sun.misc.base64encoder;

public class sendmail {
    /** 文本编码 */
    private string encode;

    /** 文本还是html内容 */
    private boolean html;

    private session session;

    private transport transport;

    private base64encoder enc = new sun.misc.base64encoder();

    public sendmail() {
        this.encode = "gbk";
        this.html = true;
    }

    public sendmail(string encode, boolean html) {
        this.encode = encode;
        this.html = html;
    }

    public boolean connect(string smtphost, string uid, string pwd) {
        boolean result = false;

        connectmail connect = new connectmail();
        result = connect.connectsmtp(smtphost, uid, pwd);
        this.session = connect.getsession();
        this.transport = connect.gettransport();

        return result;
    }

    public void close() {
        if (this.transport != null) {
            try {
                this.transport.close();
            } catch (exception e) {
                e.printstacktrace();
            }
        }
    }

    public void send(map outermailinfo) {
        try {
            /** 文件附件编码 */
            //setfilename(mimeutility.encodetext(filename, "gbk"));
            /** 文件主题编码 */
            //msg.setsubject("=?gb2312?b?"+enc.encode(subject.getbytes())+"?=");
            string title = "=?"
                    + this.encode
                    + "?b?"
                    + enc.encode(((string) outermailinfo.get("strtitle"))
                            .getbytes()) + "?=";

            mimemessage mimemessage = createmimemessage(((string) outermailinfo
                    .get("strfromname")), ((string) outermailinfo
                    .get("strfrom")), ((string) outermailinfo.get("strto")),
                    ((string) outermailinfo.get("strcc")),
                    ((string) outermailinfo.get("strbcc")), title,
                    ((string) outermailinfo.get("strcontent")),
                    ((string[]) outermailinfo.get("strfilenamelist"))//outermailinfo.getstrfilenamelist()
            );
            transport.sendmessage(mimemessage, mimemessage.getallrecipients());
        } catch (messagingexception e) {
            e.printstacktrace();
        }
    }

    private mimemessage createmimemessage(string fromname, string from,
            string to, string cc, string bcc, string subject, string text,
            string[] filename) throws messagingexception {

        /** 加入调试信息 */
        session.setdebug(true);

        mimemessage message = new mimemessage(session);
        internetaddress fromaddress = new internetaddress(from);
        try {
            if (fromname != null)
                fromaddress.setpersonal(fromname);
        } catch (exception e) {
        }
        message.setfrom(fromaddress);

        internetaddress[] toaddress = internetaddress.parse(to);
        internetaddress[] ccaddress = internetaddress.parse(cc);
        internetaddress[] bccaddress = internetaddress.parse(bcc);

        message.setrecipients(recipienttype.to, toaddress);
        message.setrecipients(recipienttype.cc, ccaddress);
        message.setrecipients(recipienttype.bcc, bccaddress);

        message.setsentdate(new date());

        message.setsubject(subject, this.encode);
        /** 处理附件 */
        if (filename != null && filename.length > 0) {
            multipart multipart = new mimemultipart();

            mimebodypart mimebodypart = new mimebodypart();
            if (html) {
                mimebodypart.setcontent(text, "text/html;charset="
                        + this.encode);
            } else {
                mimebodypart.settext(text, this.encode);
            }
            multipart.addbodypart(mimebodypart);

            for (int i = 0; i < filename.length; i++) {
                try {
                    mimebodypart filebodypart = new mimebodypart();
                    datasource datasource = new filedatasource(filename[i]);
                    filebodypart.setdatahandler(new datahandler(datasource));
                    //filebodypart.setfilename(new
                    // file(filename[i]).getname());
                    //filebodypart.setfilename("=?gbk?b?"+enc.encode((datasource.getname()).getbytes())+"?=");
                    filebodypart.setfilename("=?" + this.encode + "?b?"
                            + enc.encode((datasource.getname()).getbytes())
                            + "?=");
                    multipart.addbodypart(filebodypart);
                } catch (exception e) {
                    e.printstacktrace();
                }
            }
            message.setcontent(multipart);
        } else {
            if (html) {
                message.setcontent(text, "text/html;charset=" + this.encode);
            } else {
                message.settext(text, this.encode);
            }
        }
        return message;
    }

    public static void main(string arg[]) {

        /*
         * new sendmail() 使用gbk的默认编码发送文本信息 new sendmail(编码,文本还是html);
         */
        sendmail mail = new sendmail("gbk", true);

        try {
            if (mail.connect("smtp.163.com", "shaoqiss@163.com", "937000")) {
                for (int i = 0; i < 1; i++) {

                    map outermailinfo = new hashmap();

                    outermailinfo.put("strfrom", "shaoqiss@163.com");
                    outermailinfo.put("strto", "shaoqi8266@chinaren.com");
                    outermailinfo.put("strtitle", "发送测试send test");
                    outermailinfo.put("strcc", "");
                    outermailinfo.put("strbcc", "");
                    outermailinfo.put("strcontent",
                            "测试一下我的内容是可以吗?contexnt test");

                    //                    string[] filename = new string[3];
                    //
                    //                    filename[0] = "c:/tmp/1.txt";
                    //                    filename[1] = "c:/tmp/2.txt";
                    //                    filename[2] = "c:/tmp/add.jpg";

                    //                    outermailinfo.put("strfilenamelist",filename);

                    system.out.println("###############");

                    mail.send(outermailinfo);

                    system.out.println("@@@@@@@@@@@@@@@");

                    system.out.print(i + "/t");
                }
                mail.close();

            }
        } catch (exception e) {
            system.out.println(e.tostring());
        }

    }
}

扫描关注微信公众号