实现了直接放入文本文件即可,这样可以自己在文件编辑文字。代码如下:
public static void sendFile(String to,String subject,File content) throws Exception { // 创建Session实例对象 Session session = Session.getDefaultInstance(props); //创建发送信息的对象,并加入配置文件 MimeMessage message = new MimeMessage(session); //设置发件人 message.setFrom(new InternetAddress("jxndyy2014@163.com")); //设置主题 message.setSubject(subject); // 设置收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to)); // 设置发送时间 message.setSentDate(new Date()); //传入一个HTML文件,指定MIME类型为text/html类型,并指定字符编码为utf-8 FileInputStream inputStream = new FileInputStream(content); byte[] by = new byte[24]; int temp = 0; String setContent = ""; while((temp = inputStream.read(by)) != -1) { setContent += new String(by,0,temp); } message.setContent(setContent,"text/html;charset=utf-8"); // 保存并生成最终的邮件内容 message.saveChanges(); // 发送邮件 // 获得Transport实例对象 Transport transport = session.getTransport(); // 打开连接 transport.connect("jxndyy2014@163.com", "blue208115501"); // 将message对象传递给transport对象,将邮件发送出去 transport.sendMessage(message, message.getAllRecipients()); // 关闭连接 transport.close(); }
-----------------------------------------------------------------
今天自己封装了email发送,做了一个对外的接口,目前支持text/html类型,打算明天支持直接文字类型以及html文件类型,先上传目前的封装代码。(2016/8/29)。
我在写这段代码的时候出现了正文乱码现象,调整了一个小时也没有找出问题,换成英文可以正常发送,但是里面包含中文就是乱码并且时而发送邮件失败。但是调整一个小时后自己突然好了,无论我改什么编码类型都能正常解码,我对照了原来自己的代码也是一摸一样,我对此百思不得其解,目前也没有发现问题。
我是maven管理项目,所以在pom.xml文件导入两个jar包依赖
commons-email commons-email 1.1 javax.activation activation 1.1.1
建立一个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("jxndyy2014@163.com")); //设置主题 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("jxndyy2014@163.com", "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("jxndyy2015@163.com","测试","这是您的验证码:123123"); }}