java 发送邮件

package com.neusoft.test;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
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;

public class AttchImgMail {
  /**
   * @param recipient 收件人地址
   * @param subject 标题
   * @param content 文章正文
   * @param imgPath 图片路径
   * */
    public boolean sendEmailWithImg(String recipient,String subject, String content,String imgPath) {
        // JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.
        Properties properties = new Properties();
        // properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 设置smtp主机
        properties.put("mail.smtp.host", "smtp.163.com");// 设置smtp主机
        properties.put("mail.smtp.auth", "true");// 使用smtp身份验证
        boolean flag = false;
        try {
            MimeMessage message = new MimeMessage(Session.getInstance(properties,
                    new Authenticator() {
                        public PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(//设置发送帐号密码
                                    "发送邮件邮箱", "密码");
                        }
                    }));
            // 设置邮件的属性
            // 设置邮件的发件人
            message.setFrom(new InternetAddress("发件人"));
            // 设置邮件的收件人 cc表示抄送 bcc 表示暗送
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient
            ));
            // 设置邮件的主题
            message.setSubject(subject);
            // 创建邮件的正文
            MimeBodyPart text = new MimeBodyPart();
            // setContent(“邮件的正文内容”,”设置邮件内容的编码方式”)
            text.setContent(content,
                    "text/html;charset=gb2312");

            // 点到点的发送
            // 一对多发送只要改一个地方如下:

            // // 构建一个群发地址数组
            // 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);


            // 创建图片
            MimeBodyPart img = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(imgPath));//图片路径
            img.setDataHandler(dh);
            // 创建图片的一个表示用于显示在邮件中显示
            img.setContentID("a");

            // 创建附件
            // 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);

            message.setContent(mm);
            message.saveChanges(); // 保存修改

            Transport.send(message);// 发送邮件
            System.out.println("邮件发送成功");
            flag = true;
            return flag;
        }catch(Exception ex) {
            ex.printStackTrace();
            return flag;
        }

    }



}

Linux环境下邮件主题、发件人中文乱码解决

加入mail-1.4.jar javaEE6 以下需要依赖包activation-1.0.2.jar 
使用MimeUtility.encodeText()方法 
例如:emailVo.setYjzt(MimeUtility.encodeText(yjzt,MimeUtility.mimeCharset("gb2312"), null))

即可解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值