JavaMail核心API和主要的编程步骤(3)

复杂邮件的编写

1.复杂邮件的含义指的是:邮件的内容比之前的复杂。有单纯的文本。到现在的html内容,图片,附件。
与简单代码的区别主要在一个地方:

//简单邮件,设置邮件的内容
message.setText("Hello Javamail!");

复杂邮件复杂的多
2.设置复杂邮件内容的步骤包括
(1)创建若干个MimeBodyPart对象,并给每一个MimeBodyPart。添加内容

MimeBodyPart bodyPart1= new MimeBodypart();
MimeBodyPart bodyPart2= new MimeBodypart();

(2)包裹资源对象

MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart1);
multipart.addBodyPart(bodyPart2);

(3)把包裹的对象放到邮件体里

message.setContent(multipart);

3.三种不同的情况下。如何给每一个BodyPart添加内容。

  • html内容:
    bodyPart.setText(“html内容”,“utf-8”,“html”)
  • 附件:
    把附件放到src目录
    String file = 类名.class.getResource(“/文件名”).getFile;”//代表的是类加载的根目录,即src下面
URLDecoder.decode(file,"utf-8");//对file全路径进行url编码
//如果路径没有英文则不需要
  bodyPart.attachFile(file);

注意:在一开始要加上这样一System.setProperty(“mail.mime.encodefilename”, “true”);// 如果附件的名称,这样附件中文件的名称就会显示原来文件的名称

  • 第一种

 bodyPart.setText("<img src='网址'/>","utf-8","html");
  • 第二种:
 bodyPart.setText("<img src='附件的id'/>","utf-8","html");

以下代码是设置一个图片附件:

MimeBodyPart bodyPart2 = new MimeBodyPart();
        String file = Test2.class.getResource("/mail.jpg").getFile();// url编码智慧对中文和空格编码,全英文则不会
        file = URLDecoder.decode(file, "utf-8");
        bodyPart2.attachFile(file);

最后如下:

bodyPart2.setDisposition(MimeBodyPart.INLINE);//MimeBodyPart.ATTACHMENT附件的取值。意思是把附件的内容放到文中
bodyPart2.setContentID("mail01");//设置附件的id

代码如下:
`//编写复杂的邮件
package a_mailDemo;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Properties;

import javax.activation.URLDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.PasswordAuthentication;

public class Test2 {
public static void main(String[] args) throws AddressException, MessagingException, IOException {
Properties props = new Properties();
props.setProperty(“mail.smtp.host”, “smtp.sina.com”);// 发送端smtp服务器地址
props.setProperty(“mail.smtp.auth”, “true”);// 指定连接时需要验证用户信息(强制要求)
System.setProperty(“mail.mime.encodefilename”, “true”);// 如果附件的名称,含有中文
// 对文件的名称进行编码设置
// 1 创建Session对象
Session session = Session.getDefaultInstance(props, new Authenticator() {// 类体
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// session连接服务器,就会把用户名和密码发送给服务器
// 用户名不带@xxx
return new PasswordAuthentication(“lzbsdust”, “213025bao”);// 身份验证
}
});// 每次调用都是同一个session对象
// 2 创建和编写邮件
Message message = new MimeMessage(session);// 创建出邮件对象
// 编写邮件
message.setFrom(new InternetAddress(“lzbsdust@sina.com”));// 设置发件人
message.setRecipient(RecipientType.TO, new InternetAddress(“lzbsdust@sina.com”)); // 设置收件人类型,地址
// 设置标题
message.setSubject(“测试邮件你是我的大苹果”);
// 设置邮件的内容
imageMessage(message);
// 3 发送邮件
Transport.send(message);
System.out.println(“发送完成”);
// send内部做了三件事
// 1 .发送邮件的时候,使用session保存的连接参数,连接服务器
// 2. 把邮件发送给需要接受的人,接受的人
// 3. 关闭连接等一列的操作
}

/**
 * 编写复杂邮件的步骤是固定的
 */
/**
 * 把邮件体内容设置为html格式的文本
 * 
 * @param messgae
 * @throws MessagingException
 */
public static void htmlMessage(Message messgae) throws MessagingException {
    // 创建资源对象
    MimeBodyPart bodyPart = new MimeBodyPart();
    bodyPart.setText("<h1>hello javaMail!</h1></br>你好,JavaMail", "utf-8", "html");// 把异常抛出去,显示的效果和客户端有关系
    // 包裹资源对象
    MimeMultipart multipart = new MimeMultipart();
    multipart.addBodyPart(bodyPart);// 不管bodyPart的个数有多少,都需要适用multipart来包裹
    // 把包裹后的资源对象,放到邮件体里面
    messgae.setContent(multipart);
}

/**
 * 把邮件体的内容设置为包含附件的内容
 * 
 * @param message
 * @throws IOException
 * @throws MessagingException
 */
public static void attachmentMessage(Message message) throws IOException, MessagingException {
    //创建附件资源对象
    MimeBodyPart bodyPart = new MimeBodyPart();
    String file = Test.class.getResource("/如鹏.rar").getFile();// “/”代表的是src,类加载的根目录
    // Test2.class.getResource("/如鹏.rar")得到的是一个url对象。调用getFile()方法返回的是绝对路径
    // 注意:getResource对文件路径中的“中文”“空格”进行了url编码。需要对其进行解码
    file = URLDecoder.decode(file, "utf-8");// 对文件绝对路径的字符串,进行编码
    bodyPart.attachFile(file);

    //包裹资源对象
    MimeMultipart multipart = new MimeMultipart();
    multipart.addBodyPart(bodyPart);
    message.setContent(multipart);
}
/**
 * 把邮件体的内容设置为可以显示图片的内容第一种方式
 * 
 * @param message
 * @throws MessagingException
 */
public static void imgMessage(Message message) throws MessagingException {
    //创建资源对象
    MimeBodyPart bodyPart = new MimeBodyPart();
    bodyPart.setText(
            "<h1>hello JavaMail</h1><br/>你好,JavaMail !<br/><img src='https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png'/>",
            "utf-8", "html");//src=的取值为网络上的图片的地址

    //包裹资源对象
    MimeMultipart multipart = new MimeMultipart();
    multipart.addBodyPart(bodyPart);
    message.setContent(multipart);
}

/**
 * 
 * @param message
 * @throws MessagingException
 * @throws IOException
 */
public static void imageMessage(Message message) throws MessagingException, IOException {
    //创建资源对象
    MimeBodyPart bodyPart = new MimeBodyPart();
    bodyPart.setText("<h1>hello JavaMail</h1><br/>你好,JavaMail !<br/><img src='cid:mail01'/>", "utf-8", "html");

    // 创建图片附件资源
    MimeBodyPart bodyPart2 = new MimeBodyPart();
    String file = Test2.class.getResource("/mail.jpg").getFile();// url编码智慧对中文和空格编码,全英文则不会
    file = URLDecoder.decode(file, "utf-8");
    bodyPart2.attachFile(file);
    bodyPart2.setDisposition(MimeBodyPart.INLINE);//MimeBodyPart.ATTACHMENT附件的取值
    bodyPart2.setContentID("mail01");

    //包裹资源对象
    MimeMultipart multipart = new MimeMultipart();
    multipart.addBodyPart(bodyPart);
    multipart.addBodyPart(bodyPart2);
    message.setContent(multipart);
}

}
`

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值