java email发送

Posted 一朵羊毛飞上天

tags:

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

今天自己封装了email发送,做了一个对外的接口,目前支持text/html类型,打算明天支持直接文字类型以及html文件类型,先上传目前的封装代码。(2016/8/29)。

 

我在写这段代码的时候出现了正文乱码现象,调整了一个小时也没有找出问题,换成英文可以正常发送,但是里面包含中文就是乱码并且时而发送邮件失败。但是调整一个小时后自己突然好了,无论我改什么编码类型都能正常解码,我对照了原来自己的代码也是一摸一样,我对此百思不得其解,目前也没有发现问题。

我是maven管理项目,所以在pom.xml文件导入两个jar包依赖

<!--发送Email-->
    <dependency>
      <groupId>commons-email</groupId>
      <artifactId>commons-email</artifactId>
      <version>1.1</version>
    </dependency>
      <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>activation</artifactId>
          <version>1.1.1</version>
      </dependency>

 建立一个SendMail类封装数据

package com.yuyang.Common;

import org.apache.commons.mail.MultiPartEmail;

import javax.mail.Message;
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 javax.swing.plaf.PanelUI;
import java.util.Date;
import java.util.Properties;


/**
 * Created by yangyu on 16/8/29.
 */
public class SendMail {

   private static Properties props = null;//初始化链接邮件会话信息
    // 邮件发送协议
    private final static String PROTOCOL = "smtp";
    // SMTP邮件服务器
    private final static String HOST = "smtp.163.com";
    // SMTP邮件服务器默认端口
    private final static String PORT = "25";
    // 是否要求身份认证
    private final static String IS_AUTH = "true";
    // 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
    private final static String IS_ENABLED_DEBUG_MOD = "true";

    static {
        props = new Properties();
        props.setProperty("mail.transport.protocol", PROTOCOL);
        props.setProperty("mail.smtp.host", HOST);
        props.setProperty("mail.smtp.port", PORT);
        props.setProperty("mail.smtp.auth", IS_AUTH);
        props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
    }

    /**
     *
     * 发送简单的HTML邮件
     * */
     public static void sendTextEmail(String to,String subject,String content) throws Exception{
         // 创建Session实例对象
         Session session = Session.getDefaultInstance(props);

         //创建发送信息的对象,并加入配置文件
         MimeMessage message = new MimeMessage(session);

         //设置发件人
         message.setFrom(new InternetAddress("[email protected]"));

         //设置主题
         message.setSubject(subject);

         // 设置收件人
         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));

         // 设置发送时间
         message.setSentDate(new Date());

         //设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为utf-8


         message.setContent(content,"text/html;charset=utf-8");

         // 保存并生成最终的邮件内容
         message.saveChanges();

         // 发送邮件
         // 获得Transport实例对象
         Transport transport = session.getTransport();
         // 打开连接
         transport.connect("[email protected]", "blue208115501");
         // 将message对象传递给transport对象,将邮件发送出去
         transport.sendMessage(message, message.getAllRecipients());
         // 关闭连接
         transport.close();

     }

}

最后我用junit4进行测试

import com.yuyang.Common.SendMail;
import org.junit.Test;

/**
 * Created by yangyu on 16/8/29.
 */
public class SendMailTest {

    @Test
    public void testSendMail() throws Exception {
        SendMail.sendTextEmail("[email protected]","测试","<span style=‘color:red;‘>这是您的验证码:123123</span>");
    }
}

 

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

在mail_admins()中发送EmailMultiAlternatives

Java Android - 将数据从活动发送到片段

JAVA 使用qq邮箱发送邮件

用python实现自动发邮件的功能

Java发送Email

我应该如何使用 Outlook 发送代码片段?