Java使用QQ邮箱给其他邮箱发邮件

Wesley13
• 阅读 673

Java使用QQ邮箱给其他邮箱发邮件

Java使用QQ邮箱给其他邮箱发邮件 个人微信小程序可以扫码体验

  • 引入了2个jar包

        <!-- mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.4</version>
        </dependency>
    
  • 获取QQ邮箱的授权码

 Java使用QQ邮箱给其他邮箱发邮件

开启。验证一下。就会出现授权码。

  • QQSendMailService

    package com.bdxc.plat.service.weixin;

    import java.util.Properties;

    import javax.mail.Address; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;

    import com.sun.mail.util.MailSSLSocketFactory; /**

    • 发送邮件的工具类QQ
    • @author 宗潇帅
    • @Title SendEmailService
    • @时间 2017-1-5下午2:14:13

    / public class QQSendEmailService { /* * 目前发送到163 qq个人邮箱可以,企业邮箱有问题 * @param subject 邮件主题 * @param text 邮件内容纯文本 * @param mails 邮件地址多个用逗号隔开 * @throws Exception */ public static void send_email(String subject,String text,String mails) throws Exception{ //用于读取配置文件 Properties props=new Properties(); //开启Debug调试 props.setProperty("mail.debug", "true"); //发送服务器需要身份验证 props.setProperty("mail.smtp.auth", "true"); //发送邮件服务器的主机名 props.setProperty("mail.smtp.host", "smtp.qq.com"); //端口号 props.setProperty("mail.smtp.port", "465"); //发送邮件协议 props.setProperty("mail.transport.protocol", "smtp"); //开启ssl加密(并不是所有的邮箱服务器都需要,但是qq邮箱服务器是必须的) MailSSLSocketFactory msf= new MailSSLSocketFactory(); msf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory",msf); //获取Session会话实例(javamail Session与HttpSession的区别是Javamail的Session只是配置信息的集合) Session session=Session.getInstance(props,new javax.mail.Authenticator(){ protected PasswordAuthentication getPasswordAuthentication(){ //用户名密码验证(取得的授权吗) return new PasswordAuthentication ("123456@qq.com","自己的授权码"); } });

        //抽象类MimeMessage为实现类 消息载体封装了邮件的所有消息
        Message message=new MimeMessage(session);
        //设置邮件主题
        message.setSubject(subject);
        //封装需要发送电子邮件的信息
        message.setText(text);
        //设置发件人地址
        message.setFrom(new InternetAddress("123456@qq.com"));
        //此类的功能是发送邮件 又会话获得实例
        Transport transport=session.getTransport();
        //开启连接
        transport.connect();
        //设置收件人地址邮件信息
        String mailAddress[] = mails.split(",");
        for (int i = 0; i < mailAddress.length; i++) {
            transport.sendMessage(message,new Address[]{new InternetAddress(mailAddress[i])});
            //邮件发送后关闭信息
            transport.close();
        }
    
    }
    

    }

  •  发送的测试内容截图

Java使用QQ邮箱给其他邮箱发邮件

OK。就是这样的简单。返回错误的时候注意看端口号有写没。

props.setProperty("mail.smtp.port", "465");

带图片发送邮件的代码

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


import com.sun.mail.util.MailSSLSocketFactory;
public class QQSendEmailUtil {
    //private static final String FROM_EMAIL="发送邮件的邮箱地址";
    //可以参考 https://my.oschina.net/xshuai/blog/819153 
    //private static final String EMAIL_AUTHCODE="发送邮件的邮箱地址的授权码";

    public static void main(String[] args) throws Exception{
        send_email_media("测试带图片的内容","邮件内容有图片哦","F:\\testimg\\xs.jpg","ai@ai.com");
    }
    /**
     * 目前发送到163 qq个人邮箱可以,企业邮箱有问题
     * @param subject 邮件主题
     * @param text 邮件文本内容
     * @param filePath 邮件图片本地路径
     * @param mails 邮件地址多个用逗号隔开
     * @throws Exception
     */
    public static void send_email_media(String subject,String text,String filePath,String mails) throws Exception{
        //用于读取配置文件
        Properties props=new Properties();
        //开启Debug调试
        props.setProperty("mail.debug", "true");
        //发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        //发送邮件服务器的主机名
        props.setProperty("mail.smtp.host", "smtp.qq.com");
        //端口号
        props.setProperty("mail.smtp.port", "465");
        //发送邮件协议
        props.setProperty("mail.transport.protocol", "smtp");
        //开启ssl加密(并不是所有的邮箱服务器都需要,但是qq邮箱服务器是必须的)
        MailSSLSocketFactory msf= new MailSSLSocketFactory();
        msf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory",msf);
        //获取Session会话实例(javamail Session与HttpSession的区别是Javamail的Session只是配置信息的集合)
        Session session=Session.getInstance(props,new javax.mail.Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication(){
                //用户名密码验证(取得的授权吗)
                return new PasswordAuthentication (FROM_EMAIL,EMAIL_AUTHCODE);
            }
        });

        //抽象类MimeMessage为实现类 消息载体封装了邮件的所有消息
        Message message=new MimeMessage(session);
        //设置邮件主题
        message.setSubject(subject);

        //创建图片 节点
        MimeBodyPart image = new MimeBodyPart();
        //读取本地文件
        DataHandler dh = new DataHandler(new FileDataSource(filePath));
        //将图片数据添加到 节点
        image.setDataHandler(dh);
        //为 节点设置一个唯一编号 在文本节点 将引用该ID
        String timestamp = String.valueOf(System.currentTimeMillis());
        image.setContentID(timestamp);

        //创建文本 节点
        MimeBodyPart textNode = new MimeBodyPart();
        textNode.setContent(text+"<br/><a href='https://www.ydxiaoshuai.cn'><img src='cid:"+timestamp+"'/></a>", "text/html;charset=UTF-8");

        //设置 文本 图片 节点的关系  混合成一个节点
        MimeMultipart mm_text_image = new MimeMultipart();
        mm_text_image.addBodyPart(textNode);
        mm_text_image.addBodyPart(image);
        mm_text_image.setSubType("related");

        //封装需要发送电子邮件的信息
        message.setContent(mm_text_image);
        //设置发件人地址
        message.setFrom(new InternetAddress(FROM_EMAIL));
        //此类的功能是发送邮件 又会话获得实例
        Transport transport=session.getTransport();
        //开启连接
        transport.connect();
        //设置收件人地址邮件信息
        String mailAddress[] = mails.split(",");
        for (int i = 0; i < mailAddress.length; i++) {
            transport.sendMessage(message,new Address[]{new InternetAddress(mailAddress[i])});
            //邮件发送后关闭信息
            transport.close();
        }
    }
}

邮件收到的内容

Java使用QQ邮箱给其他邮箱发邮件

点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
svg图片转字符
1.进入 https://icomoon.io官网。2.点击按钮!(https://static.oschina.net/uploads/space/2017/1228/151443_BUtm_3040505.png)3.点击添加svg图片!(https://static.oschina.net/uploads/space/2017
Wesley13 Wesley13
3年前
CRM部署架构图
!(https://static.oschina.net/uploads/space/2017/0905/105311_jmrM_2745752.jpeg)!(https://static.oschina.net/uploads/space/2017/0905/105326_6WfL_2745752.png)系统部署在AWSVP
Easter79 Easter79
3年前
SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
!(http://static.oschina.net/uploads/space/2015/0114/114556_gCrL_1444646.png)!(https://static.oschina.net/uploads/space/2017/0420/171705_LtQe_1444646.jpg)个人小程序,可以微信扫一扫看看。
Stella981 Stella981
3年前
Nginx+Tomcat+Redis负载均衡Session共享实现超级简单(CentOS6.9系统 Java版本)
!(https://static.oschina.net/uploads/space/2017/0607/113909_b0x3_1444646.png)!(https://static.oschina.net/uploads/space/2017/0607/114011_VZA2_1444646.jpg)个人小程序,可以微信扫一扫看看。谢谢支
Stella981 Stella981
3年前
Highcharts AJAX JSON JQuery 实现动态数据交互显示图表 柱形图
!(http://static.oschina.net/uploads/space/2015/0114/113658_PHf4_1444646.png)!(https://static.oschina.net/uploads/space/2017/0420/171449_piOt_1444646.jpg)个人小程序,可以微信扫一扫看看。谢谢支持
Easter79 Easter79
3年前
SpringMVC+MongoDB+Maven整合(微信回调Oauth授权)
!(https://static.oschina.net/uploads/space/2017/0608/101116_IFgH_1444646.png)!(https://static.oschina.net/uploads/space/2017/0608/101131_5yQk_1444646.jpg)个人小程序。里面是基于百度大脑腾讯优图
Wesley13 Wesley13
3年前
7月_C++_3
!(https://static.oschina.net/uploads/space/2017/0731/100449_Mgyw_3244697.png)!(https://static.oschina.net/uploads/space/2017/0731/100659_FzL9_3244697.png)!(https://static
Stella981 Stella981
3年前
MapReduce
                                  分而治之!(https://static.oschina.net/uploads/space/2017/0417/104504_gz45_3253987.png)!(https://static.oschina.net/uploads/space/2017/0417/104
Wesley13 Wesley13
3年前
JDK1.8新特性之类工厂、迭代循环应用
1创建实体类Person!(https://static.oschina.net/uploads/space/2017/1220/095547_B682_2313055.png)2创建工厂接口PersonFactory!(https://static.oschina.net/uploads/space/2017/1220/095711