ssm使用Transport.send发送邮件(带附件)

使用Transport.send发送邮件(带附件)

最近做了一个邮件发送功能,遇到的坑不是一般的多,网上的例子大多数获取file都是测试时直接输入文件所在位置,不是从前端上传上来的。于是自己做了一个,开始不带附件很简单,加上文件之后,问题接踵而来,第一次使用form表单直接传,controller使用multiparfile接收得到file,通过file.getAbsolutePath()取得绝对路径,谁知道最后取出来的路径只取得到桌面的路径,其他路径的文件根本取不到,最后有想了一个办法把multiparfile类型转成file类型,找了一下资料,尝试了几次,最后宣告失败。(说明:我是通过 File usFile = new File(filePath);
// 添加附件的内容
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(usFile);
attachmentBodyPart.setDataHandler(new DataHandler(source));
//MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(usFile.getName()));
multipart.addBodyPart(attachmentBodyPart);所以我需要取到上传文件的绝对路径,因为实在取不到文件的绝对路径所以就想直接把multipartfile接收到的file直接转成usFile看看能不能用,结果转换失败GG)思考了好久,最后决定使用ajax直接传文件的绝对路径,捣鼓一波代码终于写好了,因为ojbk,然后迅速打脸,取到的路径根本就不是自己需要的c:\fakefile**,本着不能轻易放弃的原则,又查了度娘,了解到这是由于浏览器安全问题,最后找了好多方法,然而并没有什么卵用,网上大多数是ie,搜狐的解决办法,就是没有谷歌的,通过测试ie是可以取到文件的绝对路径,谷歌失败,扎心了。无论是修改浏览器的安全配置,还是代码啥的,都试过了,只能说句mmp,到这里ajax上传文件绝对路径失败。你以为这样我就会放弃了吗,天真。最后灵机一动反正是毕业设计,既然我不能直接获取文件的绝对路径,我是否可以把文件上传到项目的工程目录,然后在获取他的绝对路径呢,这一刻仿佛看到了胜利的曙光,说干就干,又是一通操作,最后终于黄天不负有心人,我终于成功了,激动到买了一瓶可乐庆祝一下。最后附上代码,希望能对你们有所帮助。

发送邮件
        <tr>
            <td style="text-align: center;">
           <input type="submit"  class="btn btn-mini btn-primary" value="提交" />
             <!-- <a  class="btn btn-mini btn-primary" id="sendEmail">提交</a> -->
                <a class="btn btn-mini btn-danger" id="sendEmailCancelLink">取消</a>
            </td>
        </tr>
    </table>

这是后台代码

package com.jiaying.teamanager.controller;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.jiaying.teamanager.model.MyAuthentication;

@RestController
@RequestMapping(value="/javaEmailSender")
public class JavaEmailSenderControler {

@RequestMapping(value="/sendEmail")
public  String sendEmail(String EMAIL,String TITLE,String CONTENT,MultipartFile file,HttpServletRequest request)throws Exception{
	String path = request.getSession().getServletContext().getRealPath("/images/");
	//String path = "D:\\jee-swork2018\\teaManagerSystem\\src\\main\\webapp\\images\\";
	String fileName = file.getOriginalFilename(); 
	 File dir = new File(path);
	 if(!dir.exists()){  
         dir.mkdirs();  
     }
	
	 file.transferTo(new File(path+File.separator+fileName)); 
	
	String smtpServer ="smtp.qq.com";
	String protocol = "smtp";
	String username = "邮箱账号";
	String password = "获取的密码";
	
	String from ="邮箱账号";
	String to   = EMAIL;
	String subject = TITLE;
	String body = CONTENT;
	String filePath = "";// jar包的路径
	Properties props = new Properties();
	props.setProperty("mail.transport.protocol", protocol);
	props.setProperty("mail.host", smtpServer);
	props.setProperty("mail.smtp.auth", "true");
	MyAuthentication authentication = new MyAuthentication(username, password);
	Session session = Session.getInstance(props, authentication);
	session.setDebug(true);
	//创建代表邮件的MimeMessage对象
	Message message = new MimeMessage(session);
	//存放附件或摘要
	Multipart multipart = new MimeMultipart(); 
	filePath=path+fileName;
	if (fileName!=null) {
		//File temp = new File(file.getOriginalFilename());
		//filePath = temp.getAbsolutePath() + "\\" + file.getOriginalFilename();
		//filePath = temp.getAbsolutePath();
		//添加附件
		
        File usFile = new File(filePath);
        // 添加附件的内容
        BodyPart attachmentBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(usFile);
        attachmentBodyPart.setDataHandler(new DataHandler(source));
        //MimeUtility.encodeWord可以避免文件名乱码
        attachmentBodyPart.setFileName(MimeUtility.encodeWord(usFile.getName()));
        multipart.addBodyPart(attachmentBodyPart);     
	}
	 // 添加邮件正文
    BodyPart contentPart = new MimeBodyPart();
    contentPart.setContent(body, "text/html;charset=UTF-8");
    multipart.addBodyPart(contentPart); 
	message.setFrom(new InternetAddress(from));
	message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
	message.setSentDate(new Date());
	message.setSubject(subject);
	//message.setText(body);
    message.setContent(multipart);
	//保存并且生成邮件对象
	message.saveChanges();
	//建立发送邮件的对象
	Transport.send(message);
	return "OK";
	/*
	//或是使用下面的方法
	transport.connect();
	transport.sendMessage(message, message.getRecipients(RecipientType.TO));
	transport.close();
	return "OK";
	*/				
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值