163邮箱发送

易邮邮件服务器 + Foxmail 实现本地邮件互通

易邮邮件服务器

百度网盘:链接:https://pan.baidu.com/s/1w08dr37Fu2TBnaOq1Xx7fw
提取码:yuge

Foxmail 自己下载

修改服务器配置

1.点击工具->服务器设置

图片设置什么的推荐使用这位大佬的:https://www.cnblogs.com/xuyou551/p/8126279.html

2.代码

依赖

<dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.5</version>
        </dependency>
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.internet.MimeMessage;
import java.util.Properties;


public class EmailUtil {

    public static void sendVerifyEmail(String email) {
        // 构造邮件内容
        StringBuilder content = new StringBuilder(100)
                .append("<html><head></head><body><h1>测试测试测试测试测试测试测试测试:你有毛病</h1></body></html>");
//        StringBuilder content = new StringBuilder(100)
//                .append("<html><head></head><body><h1>这是你的验证邮件,请点击<a href='")
//                .append("http://localhost:9090/").append("checkEmailBind.do?key=")
//                .append("555").append("'>").append("这里").append("</a>")
//                .append("测试测试测试测试测试测试测试测试</h1></body></html>");
        System.out.println(content);
        try {
            sendEmail(email, "绑定邮箱验证邮件", content.toString());
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    /**
     * 发送邮件
     *
     * @param email
     * @param subject
     * @param content
     */
    private static void sendEmail(String email, String subject, String content)
            throws Exception {
        JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();

        // 设置发送邮件的SMTP服务器地址
        senderImpl.setHost("localhost");

        // 创建一个邮件对象
        MimeMessage mailMessage = senderImpl.createMimeMessage();

        // 创建邮件对象的服务类
        MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,"UTF-8");

        messageHelper.setTo("****@****.com");// 设置发给谁  就是你在Foxmail上面新增的用户的接收地址  和下面那个写一样
        messageHelper.setFrom("****@****.com");// 发件人 就是你在Foxmail上面新增的用户的接收地址
        messageHelper.setSubject(subject);// 设置邮件标题
        messageHelper.setText(content, true);// 设置邮件内容

        senderImpl.setUsername("****@****.com"); // 根据自己的情况,设置username  易邮服务器上你自己加的用户
        senderImpl.setPassword("********");// 设置密码   易邮服务器上你自己加的用户的密码

        Properties prop = new Properties();
        prop.put("mail.smtp.auth", "true");// 设置发送邮件需要身份认证
        prop.put("mail.smtp.timeout", "25000");// 设置发送超时时间
        senderImpl.setJavaMailProperties(prop);

        senderImpl.send(mailMessage);
    }


}

实现网易163邮箱发送邮箱

1.注册个163邮箱

2.登录163邮箱 -> 设置 -> PoP3/SMTP/IMAP -> 点击开启 IMAP/SMTP服务 -> 按照他的指示就行 然后获取 授权码 AAAAAAAAAA

3.依赖 + 代码

<dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.0</version>
        </dependency>
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
 
/**
 * 发送邮件工具类
 * @author 
 * @date 2021
 */
public class MailUtils {
 
    /**
     * 发送邮件
     * @param isSingle 是否单发: true-单发 false-群发
     */
    public static void sendMail(Boolean isSingle) throws MessagingException {
        Session session = authenticationMail();
        MimeMessage message = getMimeMessage(isSingle, session, "asf5555544444@163.com",
                "asdfsdf@163.com,asdfasdf@163.com,sdfsdfsdfsdfs@qq.com");
        message = getContent(message, "标题1", "测试吧你", new Date());
 
        Transport transport = session.getTransport();
        // 这里是你的163邮箱账号和imap授权码
        transport.connect("asf5555544444@163.com", "sadfsdf");
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
 
    /**
     * 校验发送的邮件内容
     */
    private static MimeMessage getContent(MimeMessage message, String messageTitle, String messageContent, Date sendTime) throws MessagingException {
        if (null == messageTitle) {
            throw new MessagingException("邮件标题不能为空");
        }
        if (null == messageContent) {
            throw new MessagingException("邮件内容不能为空");
        }
        sendTime = sendTime == null ? new Date() : sendTime;
        message.setSubject(messageTitle, "UTF-8");
        message.setContent(messageContent, "text/html;charset=UTF-8");
        message.setSentDate(sendTime);
        return message;
    }
 
    /**
     * 验证认证信息
     */
    private static Session authenticationMail() throws MessagingException {
        Session session;
        try {
            Properties props = new Properties();
            //设置用户的认证方式
            props.setProperty("mail.smtp.auth", "true");
            //设置传输协议
            props.setProperty("mail.transport.protocol", "smtp");
            //设置发件人的SMTP服务器地址
            props.setProperty("mail.smtp.host", "smtp.163.com");
            session = Session.getInstance(props);
            session.setDebug(true);
        } catch (Exception e) {
            e.printStackTrace();
            throw new MessagingException("认证失败");
        }
        return session;
    }
 
    /**
     * @param isSingle 是否单发
     *                 <P>true-向指定的一个收件人发送邮件,比如:找回密码、登录验证
     *                 <P>false-向多个收件人群发邮件,比如:优惠活动推送
     *                 <P>群发时多个收件人之间用英文逗号','分割
     * @param senderAddress 发件人地址
     * @param recipientAddress 收件人地址
     */
    private static MimeMessage getMimeMessage(Boolean isSingle, Session session, String senderAddress, String recipientAddress) throws MessagingException {
        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress(senderAddress));
        } catch (MessagingException e) {
            throw new MessagingException("发件人地址错误");
        }
        /*
          设置收件人地址
          MimeMessage.RecipientType.TO:发送    MimeMessage.RecipientType.CC:抄送   MimeMessage.RecipientType.BCC:密送
         */
        if (isSingle) {
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress));
        } else {
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress));
        }
        return message;
    }
}

代码建议异步跑

CompletableFuture.runAsync(() -> {
            // 邮箱信息取配置表中邮箱信息
            try {
//                MailUtils.sendMail(true);
                MailUtils.sendMail(false);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        });
posted @ 2022-03-25 16:35  窃窃私语QAQ  阅读(166)  评论(0编辑  收藏  举报