javamail

参考资料:https://blog.csdn.net/zqz_zqz/article/details/80250654

spring+javamail

依赖

<!-- javamail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.5</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

配置文件

applicationContent-mail.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:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans.xsd    
    http://www.springframework.org/schema/aop    
    http://www.springframework.org/schema/aop/spring-aop.xsd    
    http://www.springframework.org/schema/tx    
    http://www.springframework.org/schema/tx/spring-tx.xsd    
    http://www.springframework.org/schema/context    
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <description>JavaMail配置文件</description>
    
    <!-- 加载属性文件 -->
    <context:property-placeholder location="classpath*:properties/*.properties"/>
    
    <!-- 配置一个简单邮件对象 -->
    <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
       <property name="from" value="${mail.fromAddr}"></property>
    </bean>
    
    <!-- 邮件的发送对象 -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
         <property name="host" value="${mail.smtp_host}"></property>
         <property name="username" value="${mail.from_username}"></property>
         <property name="password" value="${mail.authorization_code}"></property>
         <property name="defaultEncoding" value="${mail.defaultEncoding}"></property>
         <!-- 邮件发送相关的配置信息 -->
         <property name="javaMailProperties" >
            <props>
                  <prop key="mail.smtp.auth">${mail.smtp_auth}</prop>
                  <prop key="mail.debug">${mail.debug}</prop>
                  <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
            </props>
         </property>
    </bean>
</beans>

属性文件

mail.properties
#邮箱登录名
mail.from_username=123456@qq.com/123456@163.com
#邮箱POP3/SMTP授权码
mail.authorization_code=qwertyuhgfvdcwre
#邮箱账户
mail.fromAddr=123456@qq.com/123456@163.com
#邮箱服务器
mail.smtp_host=smtp.qq.com/smtp.163.com
#服务器是否验证用户的身份信息(普通邮件参数)
mail.smtp_auth=true
#打印debug信息
mail.debug=true
#邮件延迟发送:毫秒
mail.smtp.timeout=0
#邮件字符编码
mail.defaultEncoding=UTF-8
#邮件发送协议
mail.transport=smtp
#邮件附件(附件邮件参数)
mail.image.path=C:\\Users\\as\\Desktop\\11234rtgf.png

代码

代码
    @Resource
    private SimpleMailMessage mailMessage;
    @Resource
    private JavaMailSender mailSender;
    
    @Value("${mail.from_username}")
    private String from_username;
    @Value("${mail.authorization_code}")
    private String authorization_code;
    @Value("${mail.fromAddr}")
    private String fromAddr;
    @Value("${mail.smtp_host}")
    private String smtp_host;
    @Value("${mail.smtp_auth}")
    private String smtp_auth;
    @Value("${mail.transport}")
    private String transport;
    
    @Value("${mail.image.path}")
    private String path;

demo1

// 发送注册普通邮件(spring + javamail.jar + mail.properties)
        new Thread(new Runnable() {
            String subject = "邮件主题";
            String content = "邮件内容";
            @Override
            public void run() {
                mailMessage.setTo(model.getUserinfo().getEmail()); // 邮件接收人
                mailMessage.setSubject(subject); // 邮件主题
                mailMessage.setText(content); // 邮件内容
                
                mailSender.send(mailMessage); // 发送邮件
            }
        }).start();

demo2

// 发送附件邮件(spring + javamail.jar + mail.properties)
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                String subject = "邮件主题";
                String content = "<html><head></head><body><h1>附件邮件</h1><a href='#'>超链接</a><img src=cid:image></body></html>"; // 邮件内容,带有附件
                try {
                    MimeMessage mimeMessage = mailSender.createMimeMessage();
                    
                    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
                    helper.setFrom(fromAddr); // 邮件发送方
                    helper.setSubject(subject); // 邮件主题
                    helper.setText(content, true); // 邮件内容与有几件内容解析方式:true(html),false(text)
                    helper.setTo(model.getUserinfo().getEmail()); // 邮件接收方
                    FileSystemResource resource = new FileSystemResource(path); // 邮件附件
                    // "image" == (src=cid:xxx)
                    helper.addInline("image", resource); // 方式附件邮件
                    
                    mailSender.send(mimeMessage);
                } catch (MessagingException e) {
                    
                    e.printStackTrace();
                }
                
            }
        }).start();

javamail

jar包

    dsn.jar
    imap.jar
    mailapi.jar
    pop3.jar
    smtp.jar

MailUtil

package com.erp.star.shine.utils;

import java.util.Map;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class MailUtil {

    public static void sendMessage(Map<String, String> map) throws Exception{
        Properties props = new Properties();
        props.put("mail.smtp.host", map.get("smtp_host"));//指定邮件的发送服务器地址
//        props.put("mail.smtp.host", "smtp.163.com");//指定邮件的发送服务器地址
        props.put("mail.smtp.auth", map.get("smtp_auth"));//服务器是否要验证用户的身份信息
//        props.put("mail.smtp.auth", "true");//服务器是否要验证用户的身份信息
        Session session = Session.getInstance(props);//得到Session
        session.setDebug(true);//代表启用debug模式,可以在控制台输出smtp协议应答的过程
        
        //创建一个MimeMessage格式的邮件
        MimeMessage message = new MimeMessage(session);
        
        //设置发送者
        Address fromAddress = new InternetAddress(map.get("fromAddr"));//邮件地址
//        Address fromAddress = new InternetAddress("xxx@163.com");//邮件地址
        message.setFrom(fromAddress);//设置发送的邮件地址
        
        //设置接收者
        Address toAddress = new InternetAddress(map.get("toAddr"));//邮件地址
        message.setRecipient(RecipientType.TO, toAddress);//设置接收者的地址
        
        //设置邮件的主题
        message.setSubject(map.get("subject"));
        //设置邮件的内容
        message.setText(map.get("content"));
        
        //保存邮件
        message.saveChanges();        
        
        //得到发送邮件的对象
        Transport transport = session.getTransport(map.get("transport"));
//        Transport transport = session.getTransport("smtp");
        
        //连接到服务器上
        transport.connect(map.get("fromAddr"),map.get("from_username"),map.get("mail.authorization_code"));
//        transport.connect("smtp.163.com","username","password");
        
        //发送
        transport.sendMessage(message, message.getAllRecipients());
            
        //关闭通道
        transport.close();
    }
}

demo3

// 发送普通邮件(javamail.jar + MailUtil.java + mail.properties)
        new Thread(new Runnable() {
            String subject = "邮件主题";
            String content = "邮件内容";
            @Override
            public void run() {
                Map<String, String> map = new HashMap<String, String>();
                map.put("fromAddr", fromAddr);
                map.put("toAddr", model.getUserinfo().getEmail());
                map.put("subject", subject);
                map.put("content", content);
                map.put("from_username", from_username);
                map.put("authorization_code", authorization_code);
                map.put("smtp_host", smtp_host);
                map.put("smtp_auth", smtp_auth);
                map.put("transport", transport);
                try {
                    MailUtil.sendMessage(map);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();


 

*为什么是开线程发送邮件?

邮件发送的结果对主线程的继续执行没有必然关联关系,如果在主线程发送邮件,1.影响程序效率,2.发送邮件如果异常,会导致主程序异常,显然这并不符合常理

 

posted @ 2019-05-05 15:29  指北的司南  阅读(230)  评论(0编辑  收藏  举报