Java 封装邮件工具类以及阿里云邮件发送失败解决方法

本文详细介绍了一种在Java中发送邮件的方法,包括下载所需jar包、配置Maven依赖、实现邮件发送工具类,以及在阿里云服务器上解封25端口的步骤,确保邮件发送功能的正常运行。

1.下载所需要的jar

下载activation.jar  mail.jar

链接:https://pan.baidu.com/s/1WcnyPbH7fyhOlP-SdJwssg  密码:yo2i

maven 依赖

<!-- email -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-email</artifactId>
  <version>1.4</version>
</dependency>

 

2.工具类

package com.syiaas.util;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class EmailUtil {

     public static void main(String[] args) {

        // 收件人电子邮箱
        String[] to = {"xxxx@qq.com","xxxx@xxx.com"};
        // 发件人电子邮箱
        String from = "xxxxx@qq.com";

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.qq.com";  //QQ 邮件服务器

        String username = "xxxxx@qq.com";//发件人邮件用户名、授权码

        String password = "xxxxxxx";

        String subject = "整点数据"; 

        StringBuilder sb = new StringBuilder();
        sb.append("<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">");
//        表头
        sb.append("<tr>\n" +
                "                <th>9:00</th>\n" +
                "                <th>10:00</th>\n" +
                "                <th>11:00</th>\n" +
                "                <th>12:00</th>\n" +
                "                <th>13:00</th>\n" +
                "                <th>14:00</th>\n" +
                "                <th>15:00</th>\n" +
                "                <th>16:00</th>\n" +
                "                <th>17:00</th>\n" +
                "            </tr>");
// 内容
        sb.append("<tr>\n" +
                "                <td>90</td>\n" +
                "                <td>100</td>\n" +
                "                <td>110</td>\n" +
                "                <td>120</td>\n" +
                "                <td>130</td>\n" +
                "                <td>140</td>\n" +
                "                <td>150</td>\n" +
                "                <td>160</td>\n" +
                "                <td>170</td>\n" +
                "            </tr>");

        sb.append("</table>");

        sendHTMLMessage(username,password,to,from,host,subject,sb.toString());


        //支持文本发送
        //String text = "This is actual message";
        //sendTextMessage(username,password,to,from,host,subject,text);

        //支持附件发送
//        List<String> paths = new ArrayList<>();
//        paths.add("/jxl_test.xlsx");
//        paths.add("/merge.xls");
//        sendAttachmentMessage(username,password,to,from,host,subject,text,paths);
        

    }
/**
    * @Description:   支持发送文本内容
    * @Param: [username, password, to, from, host, subject, text]
     * [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体]
    * @return: void
    * @Author:
    * @Date: 2019/3/27
    */
   public static void sendTextMessage(final String username,final String password,String[] to,String from,String host,String subject,String text){

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");


        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(username, password);
            }
        });

        try{

            MimeMessage message = new MimeMessage(session);

            message.setFrom(new InternetAddress(from));

            InternetAddress[] sendTo = new InternetAddress[to.length];
            for (int i = 0; i < sendTo.length; i++) {

                sendTo[i] = new InternetAddress(to[i]);
            }
            message.setRecipients(MimeMessage.RecipientType.TO,
                    sendTo);

            message.setSubject(subject);
            message.setText(text);

            Transport.send(message);
            System.out.println("Sent message successfully");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }

    }

    /**
     * @Description:   支持发送附件
     * @Param: [username, password, to, from, host, subject, text, paths]
     * [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体,附件的路径]
     * @return: void
     * @Author:
     * @Date: 2019/3/27
     */
    public static void sendAttachmentMessage(final String username, final String password, String[] to, String from, String host, String subject, String text, List<String> paths){

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");


        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(username, password);
            }
        });

        try{

            MimeMessage message = new MimeMessage(session);

            message.setFrom(new InternetAddress(from));

            InternetAddress[] sendTo = new InternetAddress[to.length];
            for (int i = 0; i < sendTo.length; i++) {

                sendTo[i] = new InternetAddress(to[i]);
            }
            message.setRecipients(MimeMessage.RecipientType.TO,
                    sendTo);

            message.setSubject(subject);
            message.setText(text);

            // 设置正文
            BodyPart bp = new MimeBodyPart();
            String mailBody = "请查收";
            Multipart mp = new MimeMultipart();
            bp.setContent(mailBody, "text/html;charset=utf-8");
            mp.addBodyPart(bp);

            // 设置附件
            if (paths != null && paths.size() > 0) {
                for(int i = 0 ; i < paths.size() ; i++) {
                    bp = new MimeBodyPart();
                    FileDataSource fds = new FileDataSource(paths.get(i));
                    bp.setDataHandler(new DataHandler(fds));
                    bp.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B"));
                    mp.addBodyPart(bp);
                }
            }
            message.setContent(mp);
            message.saveChanges();

            Transport.send(message);
            System.out.println("Sent message successfully");
        }catch (Exception e) {
            e.printStackTrace();
        }

    }


}
/**
 * @Description:   支持发送HTML内容
 * @Param: [username, password, to, from, host, subject, text]
 * [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体]
 * @return: void
 * @Author:
 * @Date: 2019/3/27
 */
public static void sendHTMLMessage(final String username,final String password,String[] to,String from,String host,String subject,String text){

    // 获取系统属性
    Properties properties = System.getProperties();

    // 设置邮件服务器
    properties.setProperty("mail.smtp.host", host);

    properties.put("mail.smtp.auth", "true");


    // 获取默认session对象
    Session session = Session.getDefaultInstance(properties,new Authenticator(){
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(username, password);
        }
    });

    try{

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress(from));

        InternetAddress[] sendTo = new InternetAddress[to.length];
        for (int i = 0; i < sendTo.length; i++) {

            sendTo[i] = new InternetAddress(to[i]);
        }
        message.setRecipients(MimeMessage.RecipientType.TO,
                sendTo);

        message.setSubject(subject);
        //发送 HTML 消息, 可以插入html标签
        message.setContent(text,"text/html;charset=utf8");

        Transport.send(message);
        System.out.println("Sent message successfully");
    }catch (MessagingException mex) {
        mex.printStackTrace();
    }

}

 

 

3.  针对阿里云服务器,发送邮件失败,如何25端口解封步骤?

    注意 登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 -生成授权码作为密码

   操作步骤

  1. 登录云盾安全管控平台管理控制台

    说明 您可以将鼠标移至在阿里云管理控制台右上角的账户图标,单击安全管控打开云盾安全管控平台管理控制台。

  2. 定位到业务申请 > 25端口解封页面,单击25端口解封申请。

    注意 在正式申请前,您需要确认同意并承诺,保证TCP 25端口仅用来连接第三方的SMTP服务器,从第三方的SMTP服务器外发邮件。如发现您使用申请的IP直接通过SMTP发送邮件,阿里云有权永久性封禁TCP 25端口,并不再提供解封服务。

  3. 选择IP类型,填写您要报备的IP及关联域名(仅能申请登录账号下所拥有的IP),单击确定。

     

 

 

 

 

        勾选已阅读并同意《25端口使用服务协议》,单击下一步 

        填写申请表单,详细说明您的TCP 25端口使用描述及使用情况

 

 

 

 

 

 

       

       单击确定,提交TCP 25端口解封申请

       说明 一般情况下,在您提交解封申请一个工作日后,阿里云会根据您提交的申请理由进行审核,并将审核结果以邮件的方式通知您

  •        

 

 

 

 

     若申请失败,根据提示进行修改

 

  •       

 

 

 

        可以设置如下参数解决
//设置80端口

 properties.put("mail.smtp.port", "80");
//修改发送方式
properties.put("mail.smtp.socketFactory", "javax.net.ssl.SSLSocketFactory");

 

 

转载于:https://my.oschina.net/shanesen/blog/3028726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值