java mail 发送邮件解析

上代码:
以下是按代码顺序写的,直接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(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用 JavaMail 解析邮件并获取最近时间的指定邮件的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class MailParser { public static void main(String[] args) throws Exception { // 邮件服务器配置 String host = "your.mail.server.com"; String username = "your.email@address.com"; String password = "your.email.password"; // 创建会话 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); // 获取收件箱 Folder inbox = session.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); // 获取最近时间的指定日期的邮件 Calendar cal = Calendar.getInstance(); cal.set(2021, Calendar.JANUARY, 1); // 指定日期为2021年1月1日 Date searchDate = cal.getTime(); SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GE, searchDate); Message[] messages = inbox.search(newerThan); // 解析邮件 for (int i = messages.length - 1; i >= 0; i--) { // 倒序遍历,获取最近一封符合条件的邮件 MimeMessage message = (MimeMessage) messages[i]; String subject = message.getSubject(); Address[] from = message.getFrom(); Date sentDate = message.getSentDate(); System.out.println("Subject: " + subject); System.out.println("From: " + Arrays.toString(from)); System.out.println("Sent Date: " + sentDate); System.out.println(); } // 关闭收件箱和会话 inbox.close(false); session.close(); } } ``` 其中,`host`、`username` 和 `password` 分别代表你的邮件服务器地址、邮箱地址和密码,需要替换为自己的信息。`cal.set(2021, Calendar.JANUARY, 1)` 指定了要查找的日期,这里设置为 2021 年 1 月 1 日,你可以根据自己的需求修改。 `new ReceivedDateTerm(ComparisonTerm.GE, searchDate)` 创建了一个搜索条件,表示接收日期在指定日期之后(`GE` 表示大于等于)。`inbox.search(newerThan)` 执行搜索,返回符合条件的邮件列表。由于邮件列表是按照日期从旧到新排序的,因此我们需要倒序遍历,获取最近一封符合条件的邮件。 在解析邮件时,你可以获取邮件主题、发件人、发送日期等信息,根据需求进行处理即可。最后别忘了关闭收件箱和会话。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值