java mail 发送邮件解析

本文详细介绍了如何使用Java Mail API发送邮件,包括设置Session、MimeMessage的封装以及Text和MIME类型邮件体的创建。邮件内容涉及纯文本正文、HTML正文、内置图片和附件的添加。文章通过代码示例展示了不同类型的邮件正文结构和构建过程。
摘要由CSDN通过智能技术生成

上代码:
以下是按代码顺序写的,直接copy修改就可以用,算是简单完整的发邮件代码,主要是为了说明怎么使用。


先新建一个属性配置,是用来生成邮件Session的:

        props = new Properties();
        //协议,这里使用smtp
        props.put("mail.transport.protocol", "smtp");
        //邮件服务器主机地址,可以是ip地址,也可以是比如smtp.qq.com
        props.put("mail.smtp.host", "172.168.1.1");
        //端口号
        props.put("mail.smtp.port", "25");
        //这个一般都为true
        props.put("mail.smtp.auth", "true");
        //邮件是否使用使用ssl安全连接,使用ssl需要使用对应的端口号
        props.put("mail.smtp.ssl.enable", "true");
        //是够开启debug模式,开启在控制台会有发邮件过程的信息打印出来
        props.put("mail.debug", "true");

获取session:

        //第一个参数是上面的配置内容,第二个是验证参数,这里为空表示先不验证登录邮件服务器
        Session session = Session.getDefaultInstance(props, null);

建议创建Session的时候直接验证登录,这样在后面就不用验证直接发送就可以了,验证方法是写个类继承Authenticator,如下:

//直接抄这个就行
public class MyAuthenticator extends Authenticator {
   

    private String username;
    private String password;
    //带用户名和密码参数的构造方法
    public MyAuthenticator(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    /**
     * 重写父类方法,这个必须要有的
     */
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {

        return new PasswordAuthentication(username, password);
    }
}

然后new MyAuthenticator(用户名,密码),作为上面第二个参数,这样获取到的session是通过验证的,如下:

        //新建一个验证类实例
        Authenticator auth = new MyAuthenticator(用户名,密码);
        //然后直接获取有用户名和密码验证的session
        Session session = Session.getInstance(props, auth);
        //还有一种写法是getDefaultInstance,应用开启后只加载缓存中已有的properties,所以想要改变发送账号什么的不要使用这个方法
        Session session = Session.getDefaultInstance(props, null);

获取到session之后,直接获取到MimeMessage,MimeMessage是用来包装所有邮件内容的,如下:

    MimeMessage message = new MimeMessage(session);

接下来是封装MimeMessage 的内容,分为Text和MIME类型的邮件体,不过这两种邮件体有公共部分,如下:

 //设置发件人,一般服务器会限制要求和验证登录的账号一致,防止伪造发送
 message.setFrom(new InternetAddress("944****66@qq.com"));
 //设置邮件主题
 message.setSubject("一封邮件的主题");
//设置发送时间,真的可以自己自定义个发送的时间的哦
message.setSentDate(new Date());
//设置回复的地址,表示你收到邮件后回复这个邮件的目标地址,可以设置多个地址,但有些服务器失效
message.setReplyTo(Address[] addresses);
//设置是否需要回执,默认是不需要,只要设置了就表示需要,noteTo是回执发送的地址(一般是发件人)
message.setHeader("Disposition-Notification-To", noteTo);
//设置优先级(1:紧急 3:普通 5:低),紧急的邮件在接收方看到会有叹号标志的
message.setHeader("X-Priority", "1");
/*
 * message.setHeader(String,String)方法是根据参数设置东西的,自己了解
 */

message.setRecipients也是不管Text还是MIME类型都有的,两者设置方法是一样的,由于这个方法解析内容多,所以画个横线

 //设置收件人,抄送人,密送人,重载的方法主要有下面两种,区别只在于第二个参数邮件地址使用Address[]还是String 类型表示
 message.setRecipients(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值