文章介绍了发送一封邮件的基本步骤,以及如何使用邮件抄送功能、发送附件功能以及如何将图片信息作为邮件内容发送。
目录
发送一封简单的邮件
1.建立SMTP服务器连接信息并创建一个会话
String userName="tangjinhui@163.com";//用户名
String password="KULKBPXQDWXYJLOR";//授权码
Properties props = new Properties();
props.put("mail.smtp.host","smtp.163.com");//SMTP主机名
props.put("mail.smtp.port","25");//主机端口号
props.put("mail.smtp.auth","true");//是否需要用户认证
props.put("mail.smtp.starttls.enable","true");//启用TLS加密
//创建会话
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//返回用户名和密码的授权对象
return new PasswordAuthentication(userName, password);
}
});
return session;
2.创建邮件对象并设置邮件内容
MimeMessage message = new MimeMessage(session);
message.setSubject("你好!");//标题
message.setText("这是一封测试邮件");//内容
message.setFrom(new InternetAddress("tangjinhui@163.com"));//发件人地址
message.setRecipients(Message.RecipientType.TO, String.valueOf(new InternetAddress("tangjinhui@qq.com")));//收件人地址
ransport.send(message);//发送
对于上述代码需要注意授权码的获取,以网易163邮箱为例,授权码获取步骤如下
发送后即可查看授权码,授权码仅显示一次,及时复制
发送具有抄送功能的邮件
抄送:将邮件发送给某人的同时,发送给别人,类似群发
message.setRecipients(Message.RecipientType.TO, String.valueOf(new InternetAddress("tangjinhui@qq.com")));//收件人
//抄送地址存放在数组中
message.setRecipients(Message.RecipientType.CC,new InternetAddress []{new InternetAddress("Rice2002@163.com"),new InternetAddress("24434313@qq.com")});
Transport.send(message);
发送带附件的邮件
对于附件,需要创建对象,将正文内容和附件内容一起封装,再作为邮件的正文内容发送在javamail中使用的是BodyPart类的子类MimeBodyPart类
//定义正文对象
BodyPart textpart = new MimeBodyPart();
//定义正文内容,若内容为中文,可设置字符集utf-8
textpart.setContent("hhhhh","text/html;charset=utf-8");
//定义附件对象
BodyPart filePart = new MimeBodyPart();
filePart.setFileName("附件照片");//设置附件标题
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
/*参数1:要上传的文件
*参数2:表明要上传的文件类型为二进制文件
*/
Files.readAllBytes(Paths.get("D:\\JavaNotebook\\JAVA\\PracticeContent\\pic.jpg")),
"application/octet-stream")));
//封装
final MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(textpart);//添加正文
multipart.addBodyPart(filePart);//添加附件
message.setContent(multipart);//将封装后的对象设置为邮件对象的正文
Transport.send(message);
将图片作为正文的一部分发送
此时的图片需要将图片和正文本拼接在一起发送
在定义邮件附件时,需要定义该附件的Content-ID,这是为了在正文拼接图片路径时,确认图片
//邮件附件
BodyPart imagePart = new MimeBodyPart();
imagePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
Files.readAllBytes(Paths.get("D:\\JavaNotebook\\JAVA\\PracticeContent\\
pic.jpg")),"application/octet-stream")));
imagePart.setHeader("Content-ID","pic");
//邮件正文
BodyPart textPart = new MimeBodyPart();
StringBuilder contentText = new StringBuilder();
contentText.append("<h1>名称</h1>");//标题
contentText.append("这是一封测试图片的邮件");//正文内容
contentText.append("<img src=\"cid:pic\"/>");//
textPart.setContent(contentText.toString(),"text/html;charset=utf-8");