首页 > 编程语言 >java发送邮件

java发送邮件

时间:2022-11-27 02:00:12浏览次数:41  
标签:java props 发送 邮箱 msg new com 邮件

一 邮件协议

收发邮件具有与HTTP协议相同的邮件传输协议. SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议 POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议 IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议  

二 开通邮件的SMTP协议

首先要开启邮箱的协议,看你是选择哪种邮箱,这里我列举了163邮箱和QQ邮箱两种常见的

2.1 开启163邮箱

0   0   注意:激活码一定要记住!!!

 

 

2.2 开启QQ邮箱协议

0   0  

三 编写Java代码

3.1 引入javax.mail依赖 

<!--JavaMail基本包 2022-11-21-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
<!--邮件发送的扩展包-->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

 

注意:下面的代码,163邮件和QQ邮件进行切换的话,只需要修改服务器的主机、激活码、发送人就可以。 服务器的主机是:   QQ邮箱:smtp.qq.com   163邮箱:smtp.163.com(POP3服务器: pop.163.com;SMTP服务器: smtp.163.com;IMAP服务器: imap.163.com)   邮件发送的代码编辑逻辑分为三部分:1 获取Session;2 创建MimeMessage;3 发送邮件

3.2 文本邮件代码示例

/**
 * 文本邮件
 */
public static void sendTextEmail() throws MessagingException {
    /*
     * 1.得到Session
     */
    Properties props = new Properties();
    // 设置服务器主机名
    props.setProperty("mail.host", "smtp.163.com");
    // 是否需要认证
    props.setProperty("mail.smtp.auth", "true");

    Authenticator auth = new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            // 这是你自己的邮箱域名和激活码
            return new PasswordAuthentication("zhangpba2022", "XXXXXXXXXXXXXX");
        }
    };

    Session session = Session.getInstance(props, auth);

    /*
     * 2.创建MImeMessage
     */
    MimeMessage msg = new MimeMessage(session);
    //设置发件人
    msg.setFrom(new InternetAddress("[email protected]"));
    //设置收件人
    msg.setRecipients(Message.RecipientType.TO, "[email protected]");

    // 设置主题(标题)
    msg.setSubject("这是一封myself学习Mail时的测试邮件");
    // 设置正文
    msg.setContent("这封邮件没有实质意义,就是测试用的", "text/html;charset=utf-8");

    /*
     * 3.发送
     */
    Transport.send(msg);
}

3.3 带附件的邮件

/**
 * 带附件的邮件
 *
 * @throws MessagingException
 */
public static void sendFileEmail() throws MessagingException, IOException {
    /*
     * 1.得到Session
     */
    Properties props = new Properties();
    props.setProperty("mail.host", "smtp.163.com");
    props.setProperty("mail.smtp.auth", "true");

    Authenticator auth = new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            // 这是你自己的邮箱域名和激活码
            return new PasswordAuthentication("zhangpba2022", "XXXXXXXXXXXXX");
        }
    };

    Session session = Session.getInstance(props, auth);

    /*
     * 2.创建MImeMessage
     */

    MimeMessage msg = new MimeMessage(session);
    // 设置发件人
    msg.setFrom(new InternetAddress("[email protected]"));
    // 设置收件人
    msg.setRecipients(Message.RecipientType.TO, "[email protected]");
    // 设置主题(标题)
    msg.setSubject("这是一封myself学习Mail时的测试邮件-有附件");

    /*
     *当发送包含附件的邮件时,邮件体就为多部件形式
     * 1.创建一个多部件邮件内容!MimeMultipart
     * MimeMultipart是一个集合,用来装载多部件
     * 2.我们需要创建两个主体部件,一个是文本内容,另一个是附件
     *     主体叫MimeBodyPart
     * 3.把MimeMultiPart设置给MimeMessage的内容
     *
     */
    // 创建多部件主体
    MimeMultipart list = new MimeMultipart();
    // 创建MimeBodyPart
    MimeBodyPart part1 = new MimeBodyPart();
    // 设置主体部件内容
    part1.setContent("<h1>请查收图片!</h1> 这是一封包含附件的垃圾邮件", "text/html;charset=utf-8");
    // 把主体部件添加到集合中
    list.addBodyPart(part1);

    //创建MimeBodyPart
    MimeBodyPart part2 = new MimeBodyPart();
    part2.attachFile(new File("/Users/pengbozhang/ideaworkspace/study-everthing/src/main/java/com/study/emial/不同邮件服务器发送邮件.png"));
    //处理中文乱码问题--显示文件名称
    part2.setFileName(MimeUtility.encodeText("不同邮件服务器发送邮件.png"));
    list.addBodyPart(part2);

    // 把它设置给邮件作为邮件内容
    msg.setContent(list);

    /*
     * 3.发送
     */
    Transport.send(msg);
}
 

标签:java,props,发送,邮箱,msg,new,com,邮件
From: https://www.cnblogs.com/zhangpb/p/16928863.html

相关文章

  • Java中YYYY-MM-dd在跨年时出现的bug
    先看一张图:Bug的产生原因:日期格式化时候,把yyyy-MM-dd写成了YYYY-MM-dd Bug分析:当时间是2019-08-31时,publicclassDateTest{publicstaticvoidmain(Strin......
  • java中乐观锁CAS的实现探究——AtomicInteger
    CASCAS——compareandswap,比较并交换。是一种乐观锁的实现方式。更新操作时,在每次更新之前,都先比较一下被更新的目标T,值是不是等于读取到的旧值O,如果相等,则认为在读取......
  • JAVA网络编程TCP实现聊天功能,附在IDEA中同时运行2个或以上相同的java程序
    在IDEA中同时运行2个或以上相同的java程序在日常编写测试代码时,有时候会需要在idea上同时运行两个及以上相同的java程序,如:想运行两个CLIENTLOGIN测试聊天室效果。1.点击E......
  • java9
    Java9新特性Java9发布于2017年9月22日,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。接下来我们会详细介绍Java9的新特性。Java9新特性模块系......
  • 基于java+swing的图书管理系统
    功能展示登录管理员-主界面管理员-增加书籍管理员-更新和删除书籍管理员-查找书籍管理员-查找所有书籍管理员-添加用户管理员-更新和删除用户管理员-查找......
  • Javascript(笔记53) - promise - 3 几个关键问题
    如何改变Promise的状态?1)resolve(value):如果当前是pending 就会变为resolved(或fulfilled); 2)reject(reason):如果当前是pending 就会变为rejected; 3) 抛出异常:如......
  • java中abstract详解
     Abstract(抽象)可以修饰类、方法 如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 Abstract可以将子类的共性最大限度的抽取出来,放......
  • Java基础——继承(Extends)
    使用extends(继承)有什么好处?使用继承可以实现代码的重用,通过继承,子类可以继承父类的成员变量及成员方法,同时子类也可以定义自己的成员变量和成员方法。届时,子类将具有父类......
  • java——@ApiOperation注解
    @RequestMapping(value="/add",method=RequestMethod.POST)@ApiOperation(value="添加用户")publicsynchronizedBaseResponse<Long>addUser(@RequestBody......
  • javascript 执行上下文
    <script>//执行上下文,顺序执行到此出会产生一个全局的执行上下文(ECG),并把全局ECG放到ECS(执行上下文栈)中//VO:GO(globanobject)对浏览器而言,window即......