邮件箱发送工具

邮件箱发送案例从邮件箱配置到实现图片,附件,文本发送:

首先导入相关依赖jar;

<dependency>
                <groupId>com.sun.mail</groupId>
                <artifactId>javax.mail</artifactId>
                <version>1.6.0</version>
    </dependency>

第一,使用xml的bean配置固定参数配置;

applicationContext-email.xml;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">   
 <bean id="mailSendUtil" class="com.zxq.iov.cloud.sp.fota.utils.email.MailSendUtil">
        <property name="protocol" value="smtp"></property>
        <property name="host" value="smtp.163.com"></property>
        <property name="port" value="25"></property>
        <property name="isAuth" value="true"></property>
        <property name="isEnabledDebugMod" value="false"></property>
    </bean>
</beans>

这里使用的时bean的set方法模式



第二:创建邮件发送类;

mailUtils();类

private static Properties props = null;
private static String protocol;
private static String host;
private static String port;
private static String isAuth;
private static String isEnabledDebugMod;

public static void setHost(String host) {
MailSendUtil.host = host;
}
public static void setPort(String port) {
MailSendUtil.port = port;
}
public static void setIsAuth(String isAuth) {
MailSendUtil.isAuth = isAuth;
}
public static void setIsEnabledDebugMod(String isEnabledDebugMod) {
MailSendUtil.isEnabledDebugMod = isEnabledDebugMod;
}
public static void setProtocol(String protocol) {
MailSendUtil.protocol = protocol;
}


/**
     * 发送图片,文本,附件,HTML的邮件
     */
    public static void sendTextEmail(SoftwareMailBean mailMessage,List<String> sendTos) throws Exception {
    props = new Properties();
       props.setProperty("mail.transport.protocol", protocol);
       props.setProperty("mail.smtp.host", host);
       props.setProperty("mail.smtp.port", port);
       props.setProperty("mail.smtp.auth", isAuth);
       props.setProperty("mail.debug", isEnabledDebugMod);
   
    // 创建Session实例对象
        Session session = Session.getDefaultInstance(props);


        // 创建MimeMessage实例对象
        MimeMessage message = new MimeMessage(session);
        // 设置发件人
        message.setFrom(new InternetAddress(mailMessage.getUserMail(), mailMessage.getSubject(), "utf-8"));
        // 设置邮件主题
        message.setSubject(mailMessage.getSubject());
        // 设置收件人
        if (!CollectionUtils.isEmpty(sendTos)) {
            List<Address> addressList = new ArrayList<>();
            for (String sendTo : sendTos) {
                addressList.add(new InternetAddress(sendTo));
            }
            Address[] addresses = new Address[addressList.size()];
            message.setRecipients(RecipientType.TO, addressList.toArray(addresses));
        } else {
            new RuntimeException();
        }
        // 设置发送时间
        message.setSentDate(new Date());
        // 设置优先级(1:紧急   3:普通    5:低)
        message.setHeader("X-Priority", "1");
        // 设置纯文本内容为邮件正文
        message.setText(mailMessage.getContent());
        //设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
        if (StringUtils.isNotEmpty(mailMessage.getImageFile()) && StringUtils.isNotBlank(mailMessage.getAccessoryFile())) {
        MimeMultipart mm = new MimeMultipart();
       if (StringUtils.isNotEmpty(mailMessage.getImageFile())) {
           // 5. 创建图片“节点”
           MimeBodyPart image = new MimeBodyPart();
           DataHandler dh = new DataHandler(new FileDataSource(new File(mailMessage.getImageFile()))); // 读取本地文件
           image.setDataHandler(dh);                   // 将图片数据添加到“节点”
           image.setContentID("image_fairy_tail");     // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)

           // 6. 创建文本“节点”
           MimeBodyPart text = new MimeBodyPart();
           //    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
           text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8");

           // 7. (文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)
           MimeMultipart mm_text_image = new MimeMultipart();
           mm_text_image.addBodyPart(text);
           mm_text_image.addBodyPart(image);
           mm_text_image.setSubType("related");    // 关联关系

           // 8. 将 文本+图片 的混合“节点”封装成一个普通“节点”
           //    最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
           //    上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
           MimeBodyPart text_image = new MimeBodyPart();
           text_image.setContent(mm_text_image);
           mm.addBodyPart(text_image);
}
       if (StringUtils.isNotBlank(mailMessage.getAccessoryFile())) {
        // 9. 创建附件“节点”
        MimeBodyPart attachment = new MimeBodyPart();
        DataHandler dh2 = new DataHandler(new FileDataSource(new File(mailMessage.getAccessoryFile())));  // 读取本地文件
        attachment.setDataHandler(dh2);                                             // 将附件数据添加到“节点”
        attachment.setFileName(MimeUtility.encodeText(dh2.getName()));              // 设置附件的文件名(需要编码)
        // 10. 
        mm.addBodyPart(attachment);     // 如果有多个附件,可以创建多个多次添加
        mm.setSubType("mixed");         // 混合关系
}
       message.setContent(mm);
        }
        
        // 保存并生成最终的邮件内容
        message.saveChanges();
        // 获得Transport实例对象
        Transport transport = session.getTransport();
        // 打开连接
        transport.connect(mailMessage.getUserMail(), mailMessage.getPassword());
        // 将message对象传递给transport对象,将邮件发送出去
        transport.sendMessage(message, message.getAllRecipients());
        // 关闭连接
        transport.close();
    }



第三:测试;

 public static void main(String[] args) {
       ApplicationContext cxt= new ClassPathXmlApplicationContext("applicationContext-email.xml");
       MailSendUtil p=(MailSendUtil) cxt.getBean("mailSendUtil");
       List<String> sendTos = new ArrayList<>();//创建收件人
       sendTos.add("...@163.com");
       sendTos.add("...@qq.com");
       SoftwareMailBean mailMessage = new SoftwareMailBean();
       mailMessage.setUserMail("....@163.com");//发件人
       mailMessage.setPassword("...");//发件人密码
       mailMessage.setSubject("");//发件主旨
       mailMessage.setContent("主要內容");
       mailMessage.setTheWriters("陌陌来信");
      // mailMessage.setImageFile("D:/page/mm.jpg");//展示图片
     //  mailMessage.setAccessoryFile("D:/page/hehe.docx");//展示附件
       try {
p.sendTextEmail(mailMessage, sendTos);
System.out.println("发送成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       
   }

好了这就简单的完成了一个邮件发送案例了;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值