把图片放在邮件正文,不是附件
时间: 2024-03-17 07:46:08 浏览: 22
要将图片嵌入到邮件正文中,可以使用 HTML 标记。以下是一个示例代码,可以帮助你实现此功能:
```
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class SendMailWithImageInBody {
public static void main(String[] args) {
String to = "recipient@domain.com"; // 收件人的电子邮件地址
String from = "sender@domain.com"; // 发件人的电子邮件地址
String host = "smtp.domain.com"; // 邮件服务器主机名
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认的 Session 对象
Session session = Session.getDefaultInstance(properties);
try {
// 创建一个默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// 设置 From: 头部头字段
message.setFrom(new InternetAddress(from));
// 设置 To: 头部头字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 设置主题
message.setSubject("包含图片的测试邮件");
// 创建 HTML 消息部分
String html = "<html><body><h1>这是一封测试邮件,其中包含一张图片。</h1>" +
"<img src=\"cid:image\"></body></html>";
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(html, "text/html");
// 创建图片消息部分
MimeBodyPart imagePart = new MimeBodyPart();
String filename = "path/to/image.png"; // 图片的路径
DataSource source = new FileDataSource(filename);
imagePart.setDataHandler(new DataHandler(source));
imagePart.setHeader("Content-ID", "<image>");
// 创建多部分消息
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(imagePart);
// 将多部分消息设置为邮件内容
message.setContent(multipart);
// 发送消息
Transport.send(message);
System.out.println("邮件已经发送。");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
```
需要注意的是,HTML 消息部分应该包含一个 `img` 标签,其中的 `src` 属性应该设置为 `"cid:image"`,表示这个图片消息部分的 Content-ID。在图片消息部分中,应该设置一个同样的 Content-ID,这样这个图片消息部分就能够被引用到。最后,将 HTML 消息部分和图片消息部分添加到多部分消息中,将多部分消息设置为邮件内容,然后发送邮件即可。