美文网首页
JAVA 使用Javax.mail向公司内部Outlook邮箱发

JAVA 使用Javax.mail向公司内部Outlook邮箱发

作者: 前端后台都不精 | 来源:发表于2020-11-23 09:36 被阅读0次

参考:

1、用Java发送邮件 带有图片和附件

2、java代码如何发送一封带图片的邮件

3、Javamail官方论坛-没啥人

package com.cy.sendmail.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

/**
 * @author z
 * @title: SendEmailUtil
 * @projectName sendmail
 * @description: 向outlook发送邮件工具
 * @date 2020/11/17 13:43
 */
@Component
public class SendEmailUtil {

    private Properties props;

    private Session session;

    private MimeMessage message;

    @Autowired
    private DateFormatUtil dateFormatUtil;

    @Value("${Email.fromEmail}")
    private String fromEmail;

    @Value("${Email.server}")
    private String emailServer;

    @Value("${Email.fromEmailPwd}")
    private String fromEmailPwd;

    /**
     * 邮件内容部分,html
     * @return
     */
    public void emailText(Date pwdLastSet, int days) {
        try{
            Multipart mimeMultipart = new MimeMultipart();
            // 主题
            message.setSubject("自动发送:提醒测试","utf-8");

            // 内容
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("您好:<br>&nbsp;&nbsp;" +
                    "测试邮件内容","text/html;charset=UTF-8");

            mimeMultipart.addBodyPart(text);

            // 放到Message中
            message.setContent(mimeMultipart);
            message.saveChanges();

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送邮件
     */
    public void send(String toEmail,Date pwdLastSet, int days){
        try{
            props = new Properties();
            //发件人
            String from = props.getProperty("fromEmail", this.fromEmail);
            //收件人
            String to = props.getProperty("toEmail", toEmail);
            props.put("mail.transport.protocol", "smtp"); // 设置协议
            props.put("mail.smtp.host", emailServer); // 服务器地址
            props.put("mail.smtp.port", "587"); // 端口号,默认25,TLS加密587,SSL加密465
            props.put("mail.smtp.auth", "true");
            //当前smtp host设为可信任
            props.put("mail.smtp.ssl.trust", "mail.chaoyue.com.cn");
            props.put("mail.smtp.ssl", "true");// 设置是否使用ssl安全连接
            props.put("mail.smtp.starttls.enable", "true"); // 设置是否使用tsl安全连接
//            props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
            // 用户验证并返回Session
            Authenticator authenticator = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //发件人邮箱前缀,邮箱登录账户名
                    String userId = props.getProperty("userId", fromEmail.substring(0, fromEmail.indexOf("@")));
                    //发件人邮箱密码(qq、163等邮箱用的是授权码,outlook是密码)
                    String password = props.getProperty("password", fromEmailPwd);
                    return new PasswordAuthentication(userId, password);
                }
            };
            session = Session.getInstance(props, authenticator);
            // 创建MimeMessage消息对象,消息头配置了收发邮箱的地址,消息体包含了邮件标题和邮件内容
            message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from)); // 发送人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// 接收者类型:TO代表直接发送,CC代表抄送,BCC代表秘密抄送
            // 生成文件内容,两个参数是我需要在邮件中显示的内容
            emailText(pwdLastSet, days);
            // 发送
            Transport.send(message);
            System.out.println("-------------" + toEmail + "--邮件发送成功!");
        }catch (Exception e) {
            e.printStackTrace();
           System.out.println("*************"+ toEmail +"邮件发送失败!");
        }
    }

}

存在的问题

①2020.11.23 发送5封邮件后即报该错误:Connection closed by remote host。似乎由于发送过于频繁被邮件服务器锁定,与服务器配置有关,待研究
报错.png
202012.01 Javax.mail打印详细的Debug信息,打开之前代码中这一行的注释:
// props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
能看到报错:
421 4.4.2 Message submission rate for this client has exceeded the configured limit
邮件服务器限制了每分钟最大发送数量,需要修改服务器配置参数MessageRateLimit:
参考:
(1)、Exchange – 421 4.4.2 Message submission rate for this client has exceeded the configured limit
(2)、Exchange user send mail error 421 4.4.2 Message submission rate for this client has exceeded the configured limit

相关文章

网友评论

      本文标题:JAVA 使用Javax.mail向公司内部Outlook邮箱发

      本文链接:https://www.haomeiwen.com/subject/grjmiktx.html