java 发邮件(有正文,有图片,有附件)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xinyuezitang/article/details/85768462

一 需求:

1 java实现邮件发送
2 发送内容:
① 正文: 图片说明和图片
② 附件一: 图片作为附件发送
③ 附件二: Excel表格

二 思路:

1首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程
2邮件创建步骤:
配置连接邮件服务器的参数( 邮件服务器SMTP, 是否需要SMTP验证 )
创建一个邮件对象( MimeMessage )
设置发件人,收件人 ( 可增加多个收件人,抄送人,密送人 )
设置邮件标题, 正文 , 附件等
设置显示的发送时间

三 操作:

(一). 在pom.xml中添加依赖
举例: 添加1.4版本的javax.mail ,如下图

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

(二) 代码

在Controller层

 /**
 * sendEmail  发邮件
 *   
 * @param to  参数to为收件人,只能为单个收件人
 * @return
 * @throws UnsupportedEncodingException
 * @throws MessagingException
 */
@RequestMapping(value = "/sendEmail",method = RequestMethod.GET)
public ResponseEntity<?> sendEmail( @RequestParam(value = "to") String to)
                                        throws UnsupportedEncodingException, MessagingException{
    topicService.sendMail(to);
    return Utility.ok();
}

在TopicService中:

/** The logger 日志. */
private Logger logger = LoggerFactory.getLogger(this.getClass());

 /**
 * sendMail 发邮件
 * 
 * @param to 收件人
 * @throws MessagingException 
 * @throws UnsupportedEncodingException 
 */
 public void sendMail(String to) throws UnsupportedEncodingException, MessagingException {

    //1.创建邮件对象
    Properties properties = new Properties();
    properties.put("mail.smtp.host", "smtp.51testing.com"); // 指定SMTP服务器
    properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证
    Session session = Session.getInstance(properties);
    MimeMessage message =new MimeMessage(session);

    //2.设置发件人
    // InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
    message.setFrom(new InternetAddress("[email protected]","tang","UTF-8"));
    
    //3.设置收件人
    //To收件人   CC 抄送  BCC密送   
    message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to,"xin","UTF-8"));
   // message.addRecipient(MimeMessage.RecipientType.CC,new InternetAddress("409****[email protected]","xinyuezi","UTF-8"));

    //4.设置标题
    message.setSubject("测试邮件" ,"UTF-8");
    //message.setContent("Test Content:这是一封测试邮件...","text/html;charset=UTF-8");

    //5.设置邮件正文

    //一个Multipart对象包含一个或多个bodypart对象,组成邮件正文
    MimeMultipart multipart = new MimeMultipart();
    //读取本地图片,将图片数据添加到"节点"
    MimeBodyPart image = new MimeBodyPart();
    DataHandler dataHandler1 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\flower.jpg"));
    image.setDataHandler(dataHandler1);
    image.setContentID("image_flower");

    //创建文本节点
    MimeBodyPart text = new MimeBodyPart();
    text.setContent("这张图片是花<br/><img src='cid:image_flower'/>","text/html;charset=UTF-8");

    //创建附件节点  读取本地文件,并读取附件名称
    MimeBodyPart file1 = new MimeBodyPart();
    DataHandler dataHandler2 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\growing.png"));
    file1.setDataHandler(dataHandler2);
    file1.setFileName(MimeUtility.encodeText(dataHandler2.getName()));

    MimeBodyPart file2 = new MimeBodyPart();
    DataHandler dataHandler3 = new DataHandler(new FileDataSource("E:\\Tang\\topics.xlsx"));
    file2.setDataHandler(dataHandler3);
    file2.setFileName(MimeUtility.encodeText(dataHandler3.getName()));

    //将文本和图片添加到multipart
    multipart.addBodyPart(text);
    multipart.addBodyPart(image);
    multipart.addBodyPart(file1);
    multipart.addBodyPart(file2);
    multipart.setSubType("mixed");//混合关系

    message.setContent(multipart);

    message.setSentDate(new Date());
    message.saveChanges();
    Transport transport = session.getTransport("smtp");
    transport.connect("smtp.51testing.com","[email protected]","(需修改,填写自己的邮箱密码)");
    transport.sendMessage(message,message.getAllRecipients());
    transport.close();
    logger.info(Calendar.getInstance().getTime()+" : # Send mail to "+" success #");

    System.out.println("sendMail-----结束了");
}

(三) 结果显示
在这里插入图片描述

注: 本文中参数to只适合单个收件人, 不适合群发邮件
但是如果需要发送多个, 可以多选抄送CC

扫描二维码关注公众号,回复: 7197835 查看本文章

猜你喜欢

转载自blog.csdn.net/xinyuezitang/article/details/85768462