java发送邮件

一 邮件协议

收发邮件具有与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("zhangpba2022@163.com"));
    //设置收件人
    msg.setRecipients(Message.RecipientType.TO, "zhangpba@qq.com");

    // 设置主题(标题)
    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("zhangpba2022@163.com"));
    // 设置收件人
    msg.setRecipients(Message.RecipientType.TO, "zhangpba@qq.com");
    // 设置主题(标题)
    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);
}
 
posted @ 2022-11-27 01:53  zhangpba  阅读(113)  评论(0编辑  收藏  举报