java发送email

package com.zhou.email; 
   
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; 
import javax.activation.DataHandler; 
import javax.activation.FileDataSource; 
import javax.mail.Message; 
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; 

public class AttchImgMail {
	
	/**
     * Message对象将存储我们实际发送的电子邮件信息,
     * Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。
     */
    private MimeMessage message;
    
    /**
     * Session类代表JavaMail中的一个邮件会话。
     * 每一个基于JavaMail的应用程序至少有一个Session(可以有任意多的Session)。
     * 
     * JavaMail需要Properties来创建一个session对象。
     * 寻找"mail.smtp.host"    属性值就是发送邮件的主机
     * 寻找"mail.smtp.auth"    身份验证,目前免费邮件服务器都需要这一项
     */
    private Session session;
    
    /***
     * 邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和 Store。 
     * Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。
     */
    private Transport transport;
    
    private String mailHost="";
    private String sender_username="";
    private String sender_password="";
    private String sendto_names = "";
    private String sendtocc_names = "";

    
    private Properties properties = new Properties();
    /*
     * 初始化方法
     */
    public AttchImgMail(boolean debug) {
        InputStream in = AttchImgMail.class.getClassLoader().getResourceAsStream("message.properties");
        try {
            properties.load(in);
            this.mailHost = properties.getProperty("mail.smtp.host");
            this.sender_username = properties.getProperty("mail.sender.username");
            this.sender_password = properties.getProperty("mail.sender.password");
            this.sendto_names = properties.getProperty("mail.sendto.username");
            this.sendtocc_names = properties.getProperty("mail.sendtocc.username");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        session = Session.getInstance(properties);
        session.setDebug(debug);//开启后有调试信息
        message = new MimeMessage(session);
    }
	/**
	 * 
	 * @param imgPath
	 * @param imgPath1
	 * @param sender 发件人
	 * @param toUser 收件人
	 * @param toCcUser 抄送人
	 * @param content
	 * @param subject
	 * @throws Exception
	 * JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. 
	 */
    public void doSendHtmlEmail(String imgPath,String imgPath1,String toUser,String toCcUser,String content,String subject) throws Exception { 
        Properties properties = new Properties(); 
        properties.put("mail.smtp.host", mailHost);// 设置smtp主机 
        properties.put("mail.smtp.auth", "true");// 使用smtp身份验证 
        properties.put("mail.sender.username",sender_username);
        properties.put("mail.sender.password",sender_password);
        /*
         * 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的
         * getPasswordAuthentication() 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail
         * 中的这种设计是使用了策略模式(Strategy
         */ 
        session = Session.getInstance(properties);
        // 设置邮件的属性 
        // 设置邮件的发件人 
        message.setFrom(new InternetAddress("datacenter@imtzp.com")); 
        // 设置邮件的收件人 cc表示抄送 bcc 表示暗送 
        //message.setRecipient(Message.RecipientType.TO, new InternetAddress(toUser));
        //message.setRecipient(Message.RecipientType.CC, new InternetAddress(toCcUser)); 
        // 设置邮件的主题 
        message.setSubject(subject); 
        // 创建邮件的正文 
        MimeBodyPart text = new MimeBodyPart(); 
        // setContent(“邮件的正文内容”,”设置邮件内容的编码方式”) 
        text.setContent(content+"<br><br><img src='cid:a'><br><br><img src='cid:b'>", 
                "text/html;charset=gb2312"); 
   
        // 点到点的发送 
        // 一对多发送只要改一个地方如下: 
           
        // // 构建一个群发地址数组 
        String[] toMore = toUser.split(",");
        InternetAddress[] adr=new InternetAddress[toMore.length]; 
        for(int i=0;i<toMore.length;i++){ 
        	adr[i]=new InternetAddress(toMore[i]); 
        } 
        //Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样 
        message.setRecipients(Message.RecipientType.TO,adr); 
        
        String[] ccMore = toCcUser.split(",");
        InternetAddress[] adrcc=new InternetAddress[ccMore.length]; 
        for(int i=0;i<ccMore.length;i++){ 
        	adrcc[i]=new  InternetAddress(ccMore[i]); 
        } 
        //Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样 
        message.setRecipients(Message.RecipientType.CC,adrcc); 
            
   
        // 创建图片 
        MimeBodyPart img = new MimeBodyPart(); 
        /*
         * JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.
         * 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的. JavaMail
         * API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.
         */ 
        DataHandler dh = new DataHandler(new FileDataSource(imgPath));//图片路径 
        img.setDataHandler(dh); 
        // 创建图片的一个表示用于显示在邮件中显示 
        img.setContentID("a"); 
   
        MimeBodyPart img2 = new MimeBodyPart(); 
        DataHandler dh2 = new DataHandler(new FileDataSource(imgPath1));//第二张图片路径 
        img2.setDataHandler(dh2); 
        img2.setContentID("b"); 
        // 创建附件 
        // MimeBodyPart attch = new MimeBodyPart(); 
        // DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg")); 
        // attch.setDataHandler(dh1); 
        // String filename1 = dh1.getName(); 
        // MimeUtility 是一个工具类,encodeText()用于处理附件字,防止中文乱码问题 
        // attch.setFileName(MimeUtility.encodeText(filename1)); 
        // 关系 正文和图片的 
        MimeMultipart mm = new MimeMultipart(); 
        mm.addBodyPart(text); 
        mm.addBodyPart(img); 
        mm.setSubType("related");// 设置正文与图片之间的关系 
        // 图班与正文的 body 
        MimeBodyPart all = new MimeBodyPart(); 
        all.setContent(mm); 
        // 附件与正文(text 和 img)的关系 
        MimeMultipart mm2 = new MimeMultipart(); 
        mm2.addBodyPart(all); 
        mm2.addBodyPart(img2); 
        mm2.setSubType("mixed");// 设置正文与附件之间的关系 
   
        message.setContent(mm2); 
        message.saveChanges(); // 保存修改 
   
        transport = session.getTransport("smtp");
        // smtp验证,就是你用来发邮件的邮箱用户名密码
        transport.connect(mailHost, sender_username, sender_password);
        // 发送
        transport.sendMessage(message, message.getAllRecipients());

        System.out.println("邮件发送成功"); 
   
    }
    
    public static void main(String[] args) throws Exception {
    	AttchImgMail atm = new AttchImgMail(false);
    	atm.doSendHtmlEmail("e:\\version\\img\\110.png", "e:\\version\\img\\110.png",atm.sendto_names,atm.sendtocc_names,"ccc","ccc");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值