使用 Java Mail 发送邮件

本文介绍如何使用JavaMail API发送包含HTML文本、内嵌图片及附件的邮件,通过具体示例展示了设置邮件参数、创建邮件会话、设置邮件内容等关键步骤。

本文介绍使用 Java Mail 进行邮件发送。 邮件内容为HTML文本,包括嵌入的图片。以及邮件附件的使用。 由于使用的API位于 javax.mail.* 包下,需要在 pom.xml 引入下面的库:

<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>javax.mail</artifactId>
	<version>1.5.6</version>
</dependency>

下面是具体的邮件发送示例:

import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
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 javax.mail.internet.MimeUtility;

public class Test {

    // 发送者
    private static final String FROM = "***@163.com";
    // 邮箱密码或授权码
    private static final String PWD = "******";
    // 接收者
    private static final String TO = "***@163.com";
    // 抄送者
    private static final String CC = "***@qq.com";

    public static void main(String[] args) throws Exception {
        // 设置参数
        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.port", 465);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.debug", "true");

        // 根据参数创建邮件会话
        Session session = Session.getInstance(props);
        // 根据会话创建邮件对象
        Message message = new MimeMessage(session);
        // 设置发送者
        message.setFrom(new InternetAddress(FROM));
        // 设置接收者
        message.setRecipient(RecipientType.TO, new InternetAddress(TO));
        // 设置抄送者
        message.setRecipients(RecipientType.CC, new InternetAddress[] { new InternetAddress(CC) });
        // 设置标题
        message.setSubject("这是邮件标题");

        // 图片部分
        MimeBodyPart imgPart = new MimeBodyPart();
        File imgFile = new File("C:\\Users\\***\\Desktop\\***.png");
        imgPart.setDataHandler(new DataHandler(new FileDataSource(imgFile)));
        imgPart.setContentID("img0");

        // 文本部分(HTML)
        MimeBodyPart htmlPart = new MimeBodyPart();
        String content = "<p>这是一封测试邮件,邮件正文为HTML内容。</p><p><img src=\"cid:img0\" /></p>";
        htmlPart.setContent(content, "text/html; charset=utf-8");

        // 组合图片部分与文本部分,并设置为“关联”关系
        MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(htmlPart);
        multipart.addBodyPart(imgPart);
        multipart.setSubType("related"); // 关联

        // 将图片部分与文本部分封装为一个部分
        MimeBodyPart bodyPart = new MimeBodyPart();
        bodyPart.setContent(multipart);

        // 附件部分
        MimeBodyPart attachmentPart = new MimeBodyPart();
        File docFile = new File("C:\\Users\\***\\Desktop\\***.docx");
        attachmentPart.setDataHandler(new DataHandler(new FileDataSource(docFile)));
        // 附件名称
        attachmentPart.setFileName(MimeUtility.encodeText("测试附件.docx"));

        // 组合所有部分,并设置为“混合”关系
        MimeMultipart allParts = new MimeMultipart();
        allParts.addBodyPart(bodyPart);
        allParts.addBodyPart(attachmentPart);
        allParts.setSubType("mixed"); // 混合

        // 将内容设置到邮件对象
        message.setContent(allParts);

        // 获得邮件传输对象
        Transport transport = session.getTransport();
        // 用指定的帐号、密码进行连接
        transport.connect(FROM, PWD);
        // 发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        // 关闭传输对象
        transport.close();
    }

}

下面是邮件内容的原始代码:

Received: from 192.168.1.2 (unknown [123.*.*.*])
	by smtp3 (Coremail) with SMTP id DdGowAC3ru8uyH5cH7NMAA--.176S2;
	Wed, 06 Mar 2019 03:04:22 +0800 (CST)
From: ***@163.com
To: ***@163.com
Cc: ***@qq.com
Message-ID: <1899073220.2.1551812665139@[192.168.1.2]>
Subject: =?UTF-8?B?6L+Z5piv6YKu5Lu25qCH6aKY?=
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_1_122883338.1551812657192"
Date: Wed, 6 Mar 2019 03:04:22 +0800 (CST)
此处省略其他邮件头...

------=_Part_1_122883338.1551812657192
Content-Type: multipart/related; 
	boundary="----=_Part_0_1072408673.1551812657187"

------=_Part_0_1072408673.1551812657187
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

此处省略HTML正文的BASE64编码...
------=_Part_0_1072408673.1551812657187
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-ID: img0

此处省略图片的BASE64编码...
------=_Part_0_1072408673.1551812657187--

------=_Part_1_122883338.1551812657192
Content-Type: application/octet-stream; 
	name="=?UTF-8?Q?=E6=B5=8B=E8=AF=95=E9=99=84=E4=BB=B6.docx?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; 
	filename="=?UTF-8?Q?=E6=B5=8B=E8=AF=95=E9=99=84=E4=BB=B6.docx?="

此处省略附件的BASE64编码...
------=_Part_1_122883338.1551812657192--

转载于:https://my.oschina.net/zhengqianghappy/blog/3018445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值