传统方式和Spring通过mailSender实现邮件发送(带附件图片)

1、传统方式发送邮件

引入jar包

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

实体类:MailInfo.java

public class MailInfo {

	private String mailServerHost;  //服务器主机号
	private String mailServerPort;  //服务器端口
	private String fromAddress;     //发送者地址
	private String userName; 		//发送者账号
	private String password;		//发送者密码
	// 是否需要身份验证  
    private boolean validate = false;  
	private String toAddress;		//收件人地址
	private String subject;		//邮件主题
	private String content;		//邮件内容
	
	/*
	 * 获得邮件会话属性
	 */
	public Properties getProperties() {
		Properties p = new Properties();
		p.put("mail.smtp.host", this.mailServerHost); //邮件主机服务器
		p.put("mail.smtp.port", this.mailServerPort); //端口号
		p.put("mail.smtp.auth", "true");
		return p;
	}

	public String getMailServerHost() {
		return mailServerHost;
	}

	public void setMailServerHost(String mailServerHost) {
		this.mailServerHost = mailServerHost;
	}

	public String getMailServerPort() {
		return mailServerPort;
	}

	public void setMailServerPort(String mailServerPort) {
		this.mailServerPort = mailServerPort;
	}

	public String getFromAddress() {
		return fromAddress;
	}

	public void setFromAddress(String fromAddress) {
		this.fromAddress = fromAddress;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isValidate() {
		return validate;
	}

	public void setValidate(boolean validate) {
		this.validate = validate;
	}

	public String getToAddress() {
		return toAddress;
	}

	public void setToAddress(String toAddress) {
		this.toAddress = toAddress;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	
}

验证类:MyAuthenticator.java

public class MyAuthenticator extends Authenticator{

	String userName = null;
	String password = null;
	
	public MyAuthenticator(String userName,String password) {
		this.userName = userName;
		this.password = password;
	}
	//验证用户名密码
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName,password);
		
	}
}

邮件发送:MailSender .java

public class MailSender {

	public boolean sendtextMail(MailInfo mailInfo) {
		// 判断是否需要身份验证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
	            // 如果需要身份认证,则创建一个密码验证器  
	            authenticator = new MyAuthenticator(mailInfo.getUserName(),  
	                    mailInfo.getPassword());  
		// 根据邮件会话属性和密码构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
		try {
			// 通过session创建邮件信息
			Message mailMessage = new MimeMessage(sendMailSession);
			// 创建邮件发送者地址
			Address from = new InternetAddress(mailInfo.getFromAddress());
			mailMessage.setFrom(from);
			Address to = new InternetAddress(mailInfo.getToAddress());
			// RecipientType.TO 接受者类型,qq 163 等
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件主题
			mailMessage.setSubject(mailInfo.getSubject());
			// 设置发送时间
			mailMessage.setSentDate(new Date());
			// 创建容器类
			Multipart multipart = new MimeMultipart();
			// 创建一个包含HTML容器的bodypart
			BodyPart html = new MimeBodyPart();
			html.setContent(mailInfo.getContent(), "text/html;charset=utf-8");
			multipart.addBodyPart(html);
			mailMessage.setContent(multipart);
			// 发送
			MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
			mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
			mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
			mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
			mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
			mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
			CommandMap.setDefaultCommandMap(mc);
			Transport.send(mailMessage);
			System.out.println("成功....");
			return true;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("失败....");
			return false;
		}
	}
}

测试类

public class TestMail {

	public static void main(String[] args) {
		MailInfo mailInfo = new MailInfo();
		mailInfo.setMailServerHost("smtp.qq.com");//主机地址
		mailInfo.setMailServerPort("25");			//主机端口
		mailInfo.setUserName("123456789");				//邮箱账号
		mailInfo.setPassword("mipqxcnmlzpyecib");				//邮箱密码
		mailInfo.setFromAddress("123456789@qq.com");			//发送地址		
//		接收者信息
		mailInfo.setToAddress("789456123@qq.com");				//收件地址
		mailInfo.setSubject("测试");				//邮件标题
		mailInfo.setContent("<div style='width:500px;height:300px;background-color:pink'><h2><font color=red>邮件测试</font></h2></div>");
//		mailInfo.setContent("啦啦啦");
		MailSender ms = new MailSender();
		ms.sendtextMail(mailInfo);
	}
}

2、Spring通过mailSender进行发送邮件

public class ComplexMailTest {

	public static void main(String[] args) throws MessagingException {
		
		String[] arr = {"123456789@qq.com","456789@163.com"};
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
		JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");
	
		MimeMessage message = sender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message,true); //true带图片带附件必须设置
		helper.setFrom("789456123@qq.com");
		helper.setTo(arr);
		helper.setSubject("附件测试!!!");
		
		//true代表前面的文本可以当成html标签进行解析
		helper.setText("<html><head></head><body><h1>王者荣耀!!!</h1><a href=http://www.baidu.com>百度</a><img src='cid:image' /></body></html>", true);
				
		//添加了一个图片的附件
		helper.addInline("image", new FileSystemResource(new File("E:/测试.png")));

		//添加附件
		helper.addAttachment("邮箱测试.docx", new FileSystemResource(new File("E:/邮箱测试.docx")));
	
		sender.send(message);
	}
}

配置文件:applicationContext-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-3.0.xsd    
	http://www.springframework.org/schema/aop    
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd    
	http://www.springframework.org/schema/tx    
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd    
	http://www.springframework.org/schema/context    
	http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	
	<description>mail</description>

	<context:property-placeholder location="classpath:mail.properties"/>
	
	<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">  
        <property name="from">  
            <value>${mail.from}</value>  
        </property>  
        <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->  
    </bean>  
    <!-- 申明JavaMailSenderImpl对象 -->  
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">  
        <property name="defaultEncoding" value="UTF-8" />  
        <property name="host" value="${mail.host}" />  
        <property name="username" value="${mail.username}" />  
        <property name="password" value="${mail.password}" />  
        <property name="javaMailProperties">  
            <props>  
                <!-- 设置认证开关 -->  
                <prop key="mail.smtp.auth">true</prop>  
                <!-- 启动调试开关 -->  
                <prop key="mail.debug">true</prop>  
                <!-- 设置发送延时 -->
                <prop key="mail.smtp.timeout">0</prop>
            </props>  
        </property>  
    </bean>  	
	
</beans>

发送账号信息:mail.properties

mail.host=smtp.qq.com
//发送账号
mail.username=123456789@qq.com
//发送授权码
mail.password=hrgqsktjsxlmdjgb
mail.from=123456789@qq.com
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值