Javaweb学习笔记之 发送邮件

package com.demo.mail;

import org.junit.Test;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.MimeMultipart;
import java.io.File;
import java.util.Date;
import java.util.Properties;

/**
 * 发送邮件:
 */
public class SendMailDemo {

    /**
     * 发送普通邮件(普通文本内容)
     */
    @Test
    public void test1() throws Exception {
        // 1、设置邮件参数
        Properties prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");	    // 指定邮件协议
        prop.put("mail.smtp.host", "smtp.qq.com");	        // QQ邮箱主机
        prop.put("mail.smtp.port", 465);					// 端口
        prop.put("mail.smtp.auth", "true");				    // 用户密码认证(需要验证发件人用户名和授权码)
        prop.put("mail.debug", "true");					    // 调试模式(输出日志信息)
        prop.put("mail.smtp.ssl.enable", "true");           // QQ 邮箱的 SSL 加密

        // 2、创建一个邮件的会话
        Session session = Session.getDefaultInstance(prop);

        // 3、创建邮件体对象(创建了一个空邮件)
        MimeMessage message = new MimeMessage(session);

        // 4、设置邮件体参数:标题、发送时间、发件人、收件人、邮件内容
        message.setSubject("我的第一封邮件");    // 设置邮件标题
        message.setSentDate(new Date());        // 设置发送时间
        message.setFrom(new InternetAddress("1058108962@qq.com"));    // 发件人
        message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{ new InternetAddress("3320222873@qq.com") }); // 收件人

        // 设置邮件内容。注意:setText() 和 setContent() 只有一个有效,后设置的会覆盖先设置的。
        message.setText("邮件正文");            // 发送普通文本内容
        message.setContent("<a href='https://www.baidu.com'>百度</a><hr/>文本内容", "text/html;charset=UTF-8"); // 发送超链接

        // 保存邮件(邮件体参数设置结束,可以不写)
        message.saveChanges();

        // 5、验证发件人用户名和授权码(注意:授权码不是邮箱密码)
        Transport transport = session.getTransport();
        transport.connect("1058108962@qq.com", "djiznulrlqqibfid");

        // 6、发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    /**
     * 发送多功能邮件(带图片资源 和 文本内容)
     */
    @Test
    public void test2() throws Exception {
        // 1、设置邮件参数
        Properties prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");	    // 指定邮件协议
        prop.put("mail.smtp.host", "smtp.qq.com");	        // QQ邮箱主机
        prop.put("mail.smtp.port", 465);					// 端口
        prop.put("mail.smtp.auth", "true");				    // 用户密码认证(需要验证发件人用户名和授权码)
        prop.put("mail.debug", "true");					    // 调试模式(输出日志信息)
        prop.put("mail.smtp.ssl.enable", "true");           // QQ 邮箱的 SSL 加密

        // 2、创建一个邮件的会话
        Session session = Session.getDefaultInstance(prop);

        // 3、创建邮件体对象(创建了一个空邮件)
        MimeMessage message = new MimeMessage(session);

        // 4、设置邮件体参数:标题、发送时间、发件人、收件人、邮件内容
        message.setSubject("带图片的邮件");      // 设置邮件标题
        message.setSentDate(new Date());        // 设置发送时间
        message.setFrom(new InternetAddress("1058108962@qq.com"));    // 发件人
        message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{ new InternetAddress("3320222873@qq.com") }); // 收件人

        /**
         * 设置邮件内容:多功能用户邮件(related)
         * RFC822:电子邮件的标准格式,用来发送普通的文本内容。
         * MIME 协议:英文全称为 Multipurpose Internet Mail Extensions,即 多用途互联网邮件扩展协议;是目前互联网电子邮件
         *  普通遵循的邮件技术规范。在 MIME 出现之前,互联网电子邮件主要遵循由 RFC822 所指定的标准,电子邮件一般只用来传递
         *  基本的 ASCII 码文本信息;MIME 在 RFC822 的基础上对电子邮件规范做了大量的扩展,引入了新的格式规范和编码方式;
         *  在 MIME 的支持下,图像、声音、动画等二进制文件都可以方便的通过电子邮件来进行传递,极大地丰富了电子邮件的功能。
         */
        // 构建一个多功能邮件块对象
        MimeMultipart related = new MimeMultipart("related");

        // 构建多功能邮件块内容:左侧图片资源 + 右侧文本内容
        MimeBodyPart resource = new MimeBodyPart(); // 图片资源
        MimeBodyPart content = new MimeBodyPart();  // 文本内容

        // 设置图片资源的具体内容:把图片资源作为数据源,设置到数据的句柄当中
        String filePath = "D://photos//11.jpg";
        DataSource dataSource = new FileDataSource(new File(filePath));
        DataHandler handler = new DataHandler(dataSource);
        resource.setDataHandler(handler);
        resource.setContentID("photo");     // 设置资源名称,给外键引用

        // 设置文本具体内容:在 <img> 标签中引用 上面定义的图片资源
        content.setContent("<img src='cid:photo' /> 哈哈哈", "text/html;charset=UTF-8");

        // 将 多功能邮件块内容 添加到 多功能邮件块对象中
        related.addBodyPart(resource);
        related.addBodyPart(content);

        // 把构建好的 多功能邮件块对象 添加到邮件中
        message.setContent(related);

        // 保存邮件(邮件体参数设置结束,可以不写)
        message.saveChanges();

        // 5、验证发件人用户名和授权码(注意:授权码不是邮箱密码)
        Transport transport = session.getTransport();
        transport.connect("1058108962@qq.com", "djiznulrlqqibfid");

        // 6、发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    /**
     * 发送 既带图片资源和文本内容,也带附件 的邮件
     */
    @Test
    public void test3() throws Exception {
        // 1、设置邮件参数
        Properties prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");	    // 指定邮件协议
        prop.put("mail.smtp.host", "smtp.qq.com");	        // QQ邮箱主机
        prop.put("mail.smtp.port", 465);					// 端口
        prop.put("mail.smtp.auth", "true");				    // 用户密码认证(需要验证发件人用户名和授权码)
        prop.put("mail.debug", "true");					    // 调试模式(输出日志信息)
        prop.put("mail.smtp.ssl.enable", "true");           // QQ 邮箱的 SSL 加密

        // 2、创建一个邮件的会话
        Session session = Session.getDefaultInstance(prop);

        // 3、创建邮件体对象(创建了一个空邮件)
        MimeMessage message = new MimeMessage(session);

        // 4、设置邮件体参数:标题、发送时间、发件人、收件人、邮件内容
        message.setSubject("带图片的邮件");      // 设置邮件标题
        message.setSentDate(new Date());        // 设置发送时间
        message.setFrom(new InternetAddress("1058108962@qq.com"));    // 发件人
        message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{ new InternetAddress("3320222873@qq.com") }); // 收件人

        /**
         * 设置邮件内容:带 多功能邮件块(图片资源+文本内容) 和 附件 的邮件(mixed)
         */
        // 构建一个总的邮件块对象
        MimeMultipart mixed = new MimeMultipart("mixed");
        // 构建总邮件块内容:多功能邮件块 + 附件
        MimeBodyPart relatedBody = new MimeBodyPart();      // 多功能邮件块
        MimeBodyPart attachmentBody = new MimeBodyPart();   // 附件

        /******************* 多功能邮件块 *********************/
        // 构建一个 多功能邮件块对象
        MimeMultipart related = new MimeMultipart("related");

        // 构建多功能邮件块内容:左侧图片资源 + 右侧文本内容
        MimeBodyPart resource = new MimeBodyPart(); // 图片资源
        MimeBodyPart content = new MimeBodyPart();  // 文本内容

        // 设置图片资源的具体内容:把图片资源作为数据源,设置到数据的句柄当中
        String filePath = "D://photos//11.jpg";
        DataSource dataSource = new FileDataSource(new File(filePath));
        DataHandler handler = new DataHandler(dataSource);
        resource.setDataHandler(handler);
        resource.setContentID("photo");     // 设置资源名称,给外键引用

        // 设置文本具体内容:在 <img> 标签中引用 上面定义的图片资源
        content.setContent("<img src='cid:photo' /> 哈哈哈", "text/html;charset=UTF-8");

        // 将 多功能邮件块内容 添加到 多功能邮件块对象中
        related.addBodyPart(resource);
        related.addBodyPart(content);

        // 将 多功能邮件块对象 添加到 总邮件块内容中
        relatedBody.setContent(related);

        /******************* 附件 *********************/
        // 将附件资源添加到 总邮件块内容 中
        String attaPath = "D://test.zip";
        DataSource source = new FileDataSource(new File(attaPath));
        DataHandler dataHandler = new DataHandler(source);
        attachmentBody.setDataHandler(dataHandler);
        attachmentBody.setFileName("test.zip"); // 设置附件名称

        /*********************************************/

        // 将 总邮件块内容 添加到 总邮件块中
        mixed.addBodyPart(relatedBody);
        mixed.addBodyPart(attachmentBody);

        // 把 总邮件块 添加到 邮件中
        message.setContent(mixed);

        // 保存邮件(邮件体参数设置结束,可以不写)
        message.saveChanges();

        // 5、验证发件人用户名和授权码(注意:授权码不是邮箱密码)
        Transport transport = session.getTransport();
        transport.connect("1058108962@qq.com", "djiznulrlqqibfid");

        // 6、发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
}

使用 QQ 邮箱发送邮件 需要开启 POP3/SMTP 服务,然后获取授权码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值