`
菜鸟级JAVA
  • 浏览: 96728 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

用java代码发送邮件(优化版)

阅读更多
调用代码如下:
if(!StringUtil.isNullOrEmpty(address)){
            SendEmailUtil.sendEmail(globalProperties.getEmailSubject() , noticeMsg.toString() , address , globalProperties.getEmailIsSend(), globalProperties.getEmailAccount()
                    , globalProperties.getEmailPassword() , globalProperties.getEmailFromAddress() , globalProperties.getEmailHost() , globalProperties.getEmailPort());
        }else{
            this.logger.debug("重置密码时,邮件无法发送,原因为:账户邮箱地址为空");
        }


代码如下:
package com.banger.ubip.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;


/**
 * @Author luozx
 * @Date 2016/12/26 10:20.
 */
public class SendEmailUtil extends Authenticator implements Runnable{
    private static final boolean validate = true;
    private String subject;
    private String account;
    private String password;
    private String fromAddress;
    private String msg;
    private String address;
    private Properties pro = new Properties();
    private static Session sendMailSession = null;
    private String emailIsSend;//邮件是否发送的开关 true为发送邮件

    protected Logger logger = LoggerFactory.getLogger(getClass());

    //邮件发送的线程池
    private static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));

    public static void sendEmail(String subject , String msg , String address , String emailIsSend ,
                                 String account, String password, String fromAddress, String host, String port) {
        SendEmailUtil set = new SendEmailUtil(subject , msg , address , emailIsSend ,account, password, fromAddress, host, port);
        executor.execute(set);
    }
    public SendEmailUtil(String subject , String msg , String address , String emailIsSend ,
                     String account, String password, String fromAddress, String host, String port) {
        super();
        this.subject = subject;
        this.account = account;
        this.password = password;
        this.fromAddress = fromAddress;
        this.msg = msg;
        this.address = address;
        this.emailIsSend = emailIsSend;
        pro.put("mail.smtp.host",host);
        pro.put("mail.smtp.port",port);
        pro.put("mail.smtp.auth", validate ? "true" : "false");
    }

    @Override
    public void run() {
        if(!StringUtil.isNullOrEmpty(emailIsSend) && "true".equals(emailIsSend)){
            InternetAddress[] ia = parseAddress(address);
            sendTextMail(ia,subject,msg);
            logger.info("邮件发送完成,接收者为:[{}]",address);
        }
    }

    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(account, password);
    }

    /**
     * 以文本格式发送邮件
     *
     * @param ToAddress
     * @param Subject
     * @param Content
     *            待发送的邮件的信息
     */
    public boolean sendTextMail(InternetAddress[] ToAddress, String Subject,
                                String Content) {
        // 判断是否需要身份认证
        try {
            // 根据邮件会话属性和密码验证器构造一个发送邮件的session
            // Session sendMailSession = Session.getDefaultInstance(pro, this);
            if (sendMailSession == null) {
                sendMailSession = Session.getDefaultInstance(pro, this);
            }
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(fromAddress);
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中
            if (ToAddress.length == 1) {
                mailMessage.setRecipients(Message.RecipientType.TO, ToAddress);
            } else {
                mailMessage.setRecipients(Message.RecipientType.BCC, ToAddress);
            }
            // 设置邮件消息的主题
            mailMessage.setSubject(MimeUtility.encodeText(Subject,MimeUtility.mimeCharset("utf-8"), null));
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // 设置邮件消息的主要内容
           // mailMessage.setText(Content);
            mailMessage.setContent(Content, "text/html;charset=utf-8");
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (Exception ex) {
            logger.error("邮件发送异常,[{}]",ex);
        }
        return false;
    }

    /**
     * 以HTML格式发送邮件
     *
     * @param ToAddress
     * @param Subject
     * @param Content
     *            待发送的邮件信息
     */
    public boolean sendHtmlMail(InternetAddress[] ToAddress, String Subject,
                                String Content) {
        try {
            // 根据邮件会话属性和密码验证器构造一个发送邮件的session
            // Session sendMailSession = Session.getDefaultInstance(pro, this);
            if (sendMailSession == null) {
                sendMailSession = Session.getDefaultInstance(pro, this);
            }
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(fromAddress);
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中
            // Message.RecipientType.TO属性表示接收者的类型为TO
            if (ToAddress.length == 1) {
                mailMessage.setRecipients(Message.RecipientType.TO, ToAddress);
            } else {
                mailMessage.setRecipients(Message.RecipientType.BCC, ToAddress);
            }
            // 设置邮件消息的主题
            mailMessage.setSubject(Subject);
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(Content, "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            logger.error("邮件发送异常,[{}]",ex);
        }
        return false;
    }

    public InternetAddress[] parseAddress(String addr) {
        StringTokenizer token = new StringTokenizer(addr, ",");
        InternetAddress[] addrArr = new InternetAddress[token.countTokens()];
        int i = 0;
        while (token.hasMoreTokens()) {
            try {
                addrArr[i] = new InternetAddress(token.nextToken().toString());
            } catch (AddressException e1) {
                return null;
            }
            i++;
        }
        return addrArr;
    }

    public static void main(String[] args) {
        String subject = "系统通知邮件";
        String noticeMsg = "这是一封神奇的邮件";
        String address = "7184638022@qq.com";
        String emailIsSend = "true";
        String accountTemp = "123123@qq.com";
        String passwordTemp = "123456";
        String fromAddressTemp = "123123@qq.com";
        String hostTemp = "smtp.exmail.qq.com";
        String portTemp = "25";
        SendEmailUtil set = new SendEmailUtil(subject , noticeMsg , address , emailIsSend , accountTemp , passwordTemp , fromAddressTemp , hostTemp,portTemp);
        set.run();
    }

}

分享到:
评论

相关推荐

    java短信验证码、邮件发送

    1. **邮件发送原理**:JavaMail API是Java用于发送邮件的标准库,它支持SMTP、POP3和IMAP协议。 2. **JavaMail API使用**: - 添加JavaMail依赖,如Maven中的`javax.mail:javax.mail-api`和`...

    Java发送邮件的实例(三种方式)实现代码

    本教程将详细介绍三种在Java中发送邮件的方法,每种方法都有其适用场景和特点。 ### 1. JavaMail API JavaMail API是Java平台上的标准邮件接口,提供了发送和接收电子邮件的能力。首先,你需要在项目中引入`javax....

    java Exchange收发邮件加附件

    以下是一个简单的发送邮件带附件的Java代码示例: ```java ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ExchangeCredentials credentials = new WebCredentials(...

    使用 java mail 发送邮件

    下面我们将详细讲解如何使用JavaMail API 在Android环境中发送邮件。 **JavaMail API 简介** JavaMail API 提供了一系列接口和类,用于实现邮件服务的各种功能,如创建、发送、读取邮件等。核心接口包括`Session`...

    关于java的群发邮件

    最后,使用Transport.send方法发送邮件。记得在完成邮件发送后关闭连接和资源。 ```java Transport transport = session.getTransport(); transport.connect(); transport.sendMessage(message, message....

    javamail发送邮件和java解析pdf

    4. 使用`Transport`类发送邮件,`Transport.send(Message)`方法将实际发送邮件。 关于PDF解析,PDF(Portable Document Format)是一种用于表示文档的格式,包括文本格式和图像。在Java中解析PDF,通常会用到Apache...

    java邮件收发系统

    在Java邮件收发系统中,Swing可以用来设计和实现类似于Outlook的用户界面,包括邮件列表、撰写窗口、收件箱、草稿箱、已发送邮件等视图。 为了实现邮件的发送,开发者需要配置JavaMail Session,提供SMTP服务器的...

    飞翔263邮件发送系统站长专用版 v1.0

    2. 邮件模板管理:为了方便批量发送邮件,系统通常会提供邮件模板功能。管理员可以创建、编辑和保存各种类型的邮件模板,如新闻通知、活动公告等,这样在实际发送时只需填充个性化内容即可。 3. 发送策略设置:根据...

    JAVA开发邮件客户端

    在JAVA中,我们可以使用`JavaMail API`来实现SMTP协议的功能,创建邮件对象,设置发件人、收件人、主题、正文等信息,并通过SMTP服务器发送邮件。 2. **POP3协议**:Post Office Protocol版本3,是一种用于下载邮件...

    java写的邮件收发系统

    5. **发送邮件**:使用Transport.send(Message)方法将邮件发送出去。 6. **处理收件箱**:如果你的应用需要读取或管理邮件,可以列出Folder中的Message,使用Message对象的方法获取邮件内容。 在实际开发中,你可能...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    自己开发的JAVA Web Email邮件系统

    JavaMail API是实现这一功能的Java库,它封装了SMTP交互,使得发送邮件变得更加方便。 3. **POP3/IMAP协议**:为了接收邮件,系统需要支持POP3(邮局协议版本3)或IMAP(因特网消息访问协议)。这些协议允许用户从...

    commons email 发送html邮件完整优化实例

    3. **多线程发送**:如果需要批量发送邮件,可以使用多线程来并发处理,提高效率。但需要注意,邮件服务器通常会对同一时间的连接数有限制,避免过于频繁的并发请求。 4. **邮件队列**:对于大量邮件,可以先将邮件...

    基于java语言,springboot框架实现邮件发送.zip

    要使用Spring Boot发送邮件,首先需要在项目中添加相关的依赖。在`pom.xml`或`build.gradle`文件中,引入`spring-boot-starter-mail`依赖: Maven: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;...

    Android 使用javamail发送邮件

    在这个案例中,"LouisJavaMail-master"是一个项目仓库,包含了使用JavaMail在Android上发送邮件的示例代码。 首先,我们来理解JavaMail的基本原理。JavaMail API主要依赖于 javax.mail 和 javax.mail.internet 这两...

    java邮件项目

    3. **SMTP(简单邮件传输协议)**:SMTP是用于发送邮件的标准网络协议。JavaMail API通过实现SMTP客户端,允许开发者向邮件服务器发送邮件。在配置SMTP服务器地址、端口、用户名和密码后,程序可以成功发送邮件。 4...

    javaax.mail.jar(官网java邮件发送jar;version:1.6)

    这篇博客文章是学习JavaMail API使用的一个很好的资源,通过阅读可以了解到如何配置邮件服务器信息,创建和发送邮件,以及处理附件等复杂操作。 JavaMail API的主要组件包括: 1. Session:它是整个邮件系统的核心...

    java邮件发送excal文件读取包含jar

    10. **发送邮件**:使用`Transport.send()`方法发送邮件。 关于“jar”文件的提及,可能是指在项目中引用了第三方库或者自定义的jar包,这些jar包可能包含了处理Excel文件(如Apache POI或JExcelApi)所需的类。...

    1号店项目JAVA代码和素材

    【1号店项目JAVA代码和素材】是一个针对电商领域的编程实践项目,主要使用Java语言进行开发,涵盖了前端界面设计、后端服务实现以及数据库管理等多个关键环节。此项目旨在帮助学习者深入理解Java编程在实际业务场景...

    Android邮件发送器

    发送邮件过程中可能会遇到网络问题、服务器认证失败等问题,因此需要适当地捕获和处理`MessagingException`等异常。 9. **用户界面**: 创建一个用户友好的界面,让用户输入收件人、主题、正文,以及选择附件。...

Global site tag (gtag.js) - Google Analytics