ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaMail实现邮件发送

2021-09-23 12:00:12  阅读:221  来源: 互联网

标签:map String helper smtp 发送 JavaMail mail 邮件


一、邮件服务器与传输协议
要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

SMTP协议

通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

POP3协议

通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

二、Java发送邮件在这里插入图片描述
代码:
① .yml配置文件

  spring:
	 mail:
	   host: smtp.163.com
	   password: TZPVAGGRPGOGYSJS
	   username: c2483173886@163.com
	   port:
	   default-encoding: UTF-8
	   protocol: smtp
	   properties:
	     mail.smtp.auth: true
	     mail.smtp.starttls.enable: true
	     mail.smtp.starttls.required: true
	     mail.smtp.socketFactory.port: 465
	     mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
	     mail.smtp.socketFactory.fallback: false

② .SenEmailController

/**
 * @Author: ycw
 * @Description: TODO
 * @DateTime: 2021/9/13 15:53
 **/
@RestController
@Slf4j
@CrossOrigin(allowCredentials = "true")
@RequestMapping("/senMail")
public class SenEmailController {

@Autowired
private UploadDownloadUtils uploadAndDownload;
@Autowired
private ISendEmailService iSendEmailService;

    @ApiOperation(value = "邮件")
    @RecordLog(value = "发邮件",operateType = 2)
    @PostMapping
    public R senMail(@RequestParam("email") String email,
                     @RequestParam("subject") String subject,
                     @RequestParam("text") String text,
                     @RequestParam("file") MultipartFile file){
        Map<String, Object> map = uploadAndDownload.fileUploads(file);
        if(CollectionUtils.isEmpty(map)){
            throw new ExException(2001,"附件上传失败!");
        }
        Boolean senResult = false;
        senResult = iSendEmailService.sendAttachmentMail(email,subject,text,map);
        if (senResult){
            return R.ok();
        }
        return R.error();
    }
}

③ .ISendEmailService

/**
 * @Author: ycw
 * @Description: TODO
 * @DateTime: 2021/9/13 13:16
 **/
public interface ISendEmailService {
    //简单邮件
    boolean sendEmail();
    //定时发送带附件邮件
    Boolean sendAttachmentMail(Map<String,Object> map);
    //发送带附件的复杂的邮件
    boolean sendAttachmentMail(String email, String subject ,String text, Map<String,Object> map);
}

④ .ISendEmailService

/**
 * @Author: ycw
 * @Description: TODO
 * @DateTime: 2021/9/13 13:17
 **/
@Service
@Slf4j
public class ISendEmailServiceImpl implements ISendEmailService {
    @Value("${file.save-file-path}")
    private String saveFilePath;

    @Value("${spring.mail.username}")
    private String fromEmail;

    @Autowired
    private JavaMailSender mailSender;
    //注入spring发送邮件的对象
    @Autowired
    private JavaMailSender javaMailSender;

    @Override
    public boolean sendEmail() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        //目标邮箱
        simpleMailMessage.setTo("c2483173886@163.com");
        simpleMailMessage.setFrom(fromEmail);
        //主题
        simpleMailMessage.setSubject("测试");
        simpleMailMessage.setText("utf-8");
        try {
            javaMailSender.send(simpleMailMessage);        //执行发送
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    @Override
    public Boolean sendAttachmentMail(Map<String, Object> map) {
        if (!CollectionUtils.isEmpty(map)){
            for (Map.Entry entryMap : map.entrySet()) {
                try {
                    //邮件对象
                    MimeMessage mimeMessage = mailSender.createMimeMessage();
                    //解决中文名乱码
                    System.setProperty("mail.mime.splitlongparameters", "false");
                    //邮件处理对象
                    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");

                    //发件人
                    helper.setFrom(fromEmail);

                    //收件人
                    helper.setTo((String) entryMap.getKey());

                    //主题
                    helper.setSubject("hello!");

                    //文本内容
                    helper.setText("当月经营指导书和报表!", false);

                    //设置文件资源
                    helper.addAttachment((String) entryMap.getValue(), new File(saveFilePath+entryMap.getValue()));
                    //发送
                    mailSender.send(mimeMessage);

                    log.info("单附件邮件发送成功!");
                } catch (MessagingException e) {
                    log.error("单附件邮件发送失败:{}", e);
                    continue;
                }
            }
            return true;
        }
        return false;
    }

    @Override
    public boolean  sendAttachmentMail(String email, String subject ,String text, Map<String,Object> map){
        String saveFilePath = "saveFilePath";
        String fileName = "fileName";
        try {
            //邮件对象
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            //解决中文名乱码
            System.setProperty("mail.mime.splitlongparameters", "false");
            //邮件处理对象
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"utf-8");

            //发件人
            helper.setFrom(fromEmail);

            //收件人
            helper.setTo(email);

            //主题
            helper.setSubject(subject);

            //文本内容
            helper.setText(text,false);

            //设置文件资源
            helper.addAttachment((String) map.get(fileName), new File((String) map.get(saveFilePath)));
            System.out.println(fileName);
            //发送
            mailSender.send(mimeMessage);
            log.info("【单附件邮件发送成功】收件人:{} 主题:{} 文本内容:{} 文件路径:{}",email,text,text);
        } catch (MessagingException e) {
            log.error("单附件邮件发送失败:{}",e);
            return false;
        }
        return true;
    }
}

标签:map,String,helper,smtp,发送,JavaMail,mail,邮件
来源: https://blog.csdn.net/weixin_45476233/article/details/120431850

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有