参考资料:https://blog.csdn.net/zqz_zqz/article/details/80250654html
spring+javamailjava
依赖spring
<!-- 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>
配置文件api
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
代码session
代码 @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;
demo1app
// 发送注册普通邮件(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();
demo2ide
// 发送附件邮件(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包spa
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.发送邮件若是异常,会致使主程序异常,显然这并不符合常理