2021-07-16 11:18

JavaMail发送邮件之二:普通项目发送邮件示例

王姐姐

JavaEE

(684)

(0)

收藏

1.1. 添加依赖

 <dependency>
   <groupId>javax.activation</groupId>
   <artifactId>activation</artifactId>
   <version>1.1.1</version>
 </dependency>
<dependency>
   <groupId>com.sun.mail</groupId>
   <artifactId>javax.mail</artifactId>
   <version>1.6.2</version>
 </dependency>

如果不是maven项目,则直接导入javax.mail.jar和activation.jar两个jar文件即可。

1.2. 示例代码

package com.wanmait.mavendemo.util;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

public class MailUtil0 {

    //subject主题 content内容,to 邮件的接收方
    public static void sendMail(String to,String subject,String content) {
        // 发件人的 邮箱 和 密码
        // 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(称为“授权码”),
        //对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
        String account = "你的邮箱1025205118@qq.com";
        String password = "这里是你的授权码";

        // 发件人邮箱的 SMTP 服务器地址, 不同邮件服务器地址不同
        // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        String emailSMTPHost = "smtp.qq.com";


        // 1.创建连接对象,链接到邮箱服务器
        Properties props = new Properties();// 参数配置
        props.setProperty("mail.transport.protocol", "smtp");// 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", emailSMTPHost);// 发件人的邮箱的 SMTP
        // 服务器地址
        props.setProperty("mail.smtp.auth", "true");// 需要请求认证

        // 2.根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(account, password);
            }
        });

        try {
            // 3.创建邮件对象
            Message message = new MimeMessage(session);
            // 3.1设置发件人
            message.setFrom(new InternetAddress(account));
            // 3.2设置收件人
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
            //设置抄送
            //message.setRecipients(MimeMessage.RecipientType.CC,new Address[]{new InternetAddress("itworker2006@126.com")});
            message.setRecipient(MimeMessage.RecipientType.CC,new InternetAddress("qingsoft@126.com"));
            //设置密送
            //message.setRecipient(MimeMessage.RecipientType.BCC,new InternetAddress("6476003@qq.com"));
            // 3.3设置邮件的主题
            message.setSubject(subject);
            // 3.4设置邮件的正文
            //不带附件直接设置内容
           message.setContent(content, "text/html;charset=UTF-8");
            // 4.发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }


    //subject主题 content内容,to 邮件的接收方,attachements附件
    public static void sendMail(String to,String subject,String content,List<File> attachments) {
        // 发件人的 邮箱 和 密码
        // 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(称为“授权码”),
        //对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
        String account = "自己的qq邮箱";
        String password = "申请的授权码";

        // 发件人邮箱的 SMTP 服务器地址, 不同邮件服务器地址不同
        // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        String emailSMTPHost = "smtp.qq.com";


        // 1.创建连接对象,链接到邮箱服务器
        Properties props = new Properties();// 参数配置
        props.setProperty("mail.transport.protocol", "smtp");// 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", emailSMTPHost);// 发件人的邮箱的 SMTP
        // 服务器地址
        props.setProperty("mail.smtp.auth", "true");// 需要请求认证

        // 2.根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(account, password);
            }
        });

        try {
            // 3.创建邮件对象
            Message message = new MimeMessage(session);
            // 3.1设置发件人
            message.setFrom(new InternetAddress(account));
            // 3.2设置收件人
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
            //设置抄送
            //message.setRecipients(MimeMessage.RecipientType.CC,new Address[]{new InternetAddress("qingsoft@126.com")});
            message.setRecipient(MimeMessage.RecipientType.CC,new InternetAddress("62999860@qq.com"));
            //设置密送
            //message.setRecipient(MimeMessage.RecipientType.BCC,new InternetAddress("6476003@qq.com"));
            // 3.3设置邮件的主题
            message.setSubject(subject);
            // 3.4设置邮件的正文

            //不带附件直接设置内容
            // message.setContent(content, "text/html;charset=UTF-8");
            //添加附件,需要特殊处理
            listFile(content,attachments,message);
            // 4.发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void listFile(String content, List<File> attachments, Message message) throws MessagingException, IOException {

        Multipart multipart = new MimeMultipart();
        //邮件正文
        BodyPart contentPart = new MimeBodyPart();
        contentPart.setContent(content, "text/html;charset=utf-8");
        multipart.addBodyPart(contentPart);
        //邮件附件
        if (attachments != null) {
            for (File attachment : attachments) {
                BodyPart attachmentPart = new MimeBodyPart();
                DataSource source = new FileDataSource(attachment);
                attachmentPart.setDataHandler(new DataHandler(source));
                //避免中文乱码的处理
                attachmentPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
                multipart.addBodyPart(attachmentPart);
            }
        }
        message.setContent(multipart);
        //保存邮件
        message.saveChanges();

    }

    public static void main(String[] args) {
        MailUtil0 mailUtil = new MailUtil0();
        String subject="来自万码学堂的邮件";
        String code="23df";
        String content ="<h1>来自万码云课的激活邮件,您的验证码是:</h1><h3><a href='http://www.wanmait.com/JavaMail/active?code="
                + code + "'>http://www.wanmait.com/JavaMail/active?code=" +code + "</h3>";
        //mailUtil.sendMail("wangrf@qingsoft.net", subject,content);
        mailUtil.sendMail("sunm@qingsoft.net", subject,content,Arrays.asList(new File("d:\\log.txt")));
    }
}

图小白107444001 (6).png

0条评论

点击登录参与评论