发送邮件功能

Posted wwqqnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发送邮件功能相关的知识,希望对你有一定的参考价值。

基于ssl安全协议的邮件发送功能:

ssl:

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

SSL协议提供的服务主要有:

1、认证用户和服务器,确保数据发送到正确的客户机和服务器;

2、加密数据以防止数据中途被窃取;

3、维护数据的完整性,确保数据在传输过程中不被改变。

建议您在设置邮箱时使用SSL协议,这样会保障您邮箱更安全的使用。

使用方法:当您选择了使用SSL协议时,请您同时修改各收/发件服务器端口号。

技术分享图片

 

package net.common.utils.common;

import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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 org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sun.mail.util.MailSSLSocketFactory;

/**
*
* 类描述: 用于SSL邮件发送,QQ企业邮箱测试通过。
*
*/
public class SslMailUtil {

  private final Logger logger = LoggerFactory.getLogger(SslMailUtil.class);

  private String account; // 登录用户名
  private String pass; // 登录密码
  private String host; // 服务器地址(邮件服务器)
  private String port; // 端口
  private String protocol = "smtp"; // 协议
  private boolean isDebug = false;// 是否开启debug模式

  public SslMailUtil(String account, String pass, String host, String port) {
    super();
    this.account = account;
    this.pass = pass;
    this.host = host;
    this.port = port;
  }

  class MyAuthenricator extends Authenticator {
    String u = null;
    String p = null;

    public MyAuthenricator(String u, String p) {
      this.u = u;
      this.p = p;
    }

    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(u, p);
    }
  }

  /**
   * 发送邮件
   *
   * @param to
   *          收件人
   * @param subject
   *          主题
   * @param content
   *          内容
   */
  public void send(String to, String subject, String content) throws Exception {
    this.send(null, to, subject, content, null);
  }

  /**
   * 发送邮件
   *
   * @param to
   *          收件人
   * @param subject
   *          主题
   * @param content
   *          内容
   * @param attachment
   *          附件
   */
  public void send(String to, String subject, String content, List<File> attachment) throws Exception {
    this.send(null, to, subject, content, attachment);
  }

  /**
   * 发送邮件
   *
   * @param alias
   *          发件人别名
   * @param to
   *          收件人
   * @param subject
   *          主题
   * @param content
   *          内容
   * @param attachment
   *          附件
   */
  public void send(String alias, String to, String subject, String content, List<File> attachment) throws Exception {
    Properties properties = this.getProperties();
    // 使用SSL,企业邮箱必需, 开启安全协议
    try {
      // 邮件会话
      Session session = this.getSession(properties);
      // 设置邮件内容
      MimeMessage mimeMessage = this.getMimeMessage(session, alias, to, subject, content, attachment);
      // 发送邮件
      Transport.send(mimeMessage);
    } catch (Exception e) {
      logger.error(e.toString());
      throw e;
    }
  }

  private Properties getProperties() {
    Properties properties = new Properties();
    // 协议
    properties.setProperty("mail.transport.protocol", protocol);
    // 服务器
    properties.setProperty("mail.smtp.host", this.host);
    // 端口
    properties.setProperty("mail.smtp.port", this.port);
    // 使用smtp身份验证
    properties.setProperty("mail.smtp.auth", "true");
    properties.put("mail.smtp.ssl.enable", "true");
    return properties;
  }

  private Session getSession(Properties properties) throws Exception {
    MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
    mailSSLSocketFactory.setTrustAllHosts(true);
    properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory);
    Session session = Session.getDefaultInstance(properties, new MyAuthenricator(this.account, this.pass));
    session.setDebug(this.isDebug);
    return session;
  }

  private MimeMessage getMimeMessage(Session session, String alias, String to, String subject, String content,
      List<File> attachment) throws Exception {
    MimeMessage mimeMessage = new MimeMessage(session);
    // 如果没有设置别名,则默认为发件人的邮箱账号
    if (StringUtils.isBlank(alias)) {
      alias = this.account;
    }
    //发件人账号以及别名
    mimeMessage.setFrom(new InternetAddress(this.account, alias));
    // 收件人
    mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    // 主题
    mimeMessage.setSubject(subject);
    // 时间
    mimeMessage.setSentDate(new Date());
    // 容器类,可以包含多个MimeBodyPart对象
    Multipart multipart = new MimeMultipart();
    // MimeBodyPart可以包装文本,图片,附件
    MimeBodyPart mimeBodyPart = new MimeBodyPart();
    // html正文,可以添加多个附件
    mimeBodyPart.setContent(content, "text/html; charset=UTF-8");
    multipart.addBodyPart(mimeBodyPart);
    if (attachment != null && !attachment.isEmpty()) {
      for (File file : attachment) {
        // 添加图片&附件


if (file.exists() && file.isFile()) {
  mimeBodyPart = new MimeBodyPart();
  mimeBodyPart.attachFile(file);
  multipart.addBodyPart(mimeBodyPart);
}
      }
    }
    // 设置邮件内容
    mimeMessage.setContent(multipart);
    // 仅仅发送文本
    // mimeMessage.setText(content);
    mimeMessage.saveChanges();
    return mimeMessage;
  }

  /**
   * 获得:是否开启debug模式
   *
   * @return the isDebug
   */
  public final boolean isDebug() {
    return isDebug;
  }





























































































































































以上是关于发送邮件功能的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用 redis 消息队列功能实现简单的邮件发送系统

EXCEL VBA 自动发送邮件功能异常

Python django实现简单的邮件系统发送邮件功能

Python django实现简单的邮件系统发送邮件功能

为啥我不能使用本地主机的邮件功能发送邮件? [复制]

c# 邮件发送功能