JavaMail官网:http://www.oracle.com/technetwork/java/javamail/index.html
以下是一个简单的发送邮件例子:
package com.mail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; 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; public class Test { //注意免费的邮箱不能外部程序发送邮件 private static String smtpHost = "smtp.163.com"; private static String sender = "[email protected]"; private static String senderName = "xjd"; private static String senderPassword = "保密"; private static String receiver = "[email protected]"; private static String filePath = "D:/test.txt";//用于测试附件的文件 public static void main(String[] args) throws MessagingException { Properties props = System.getProperties(); //设置代理,没试过,大体有以下几种设置方式 // props.put("http.proxyHost", "10.1.2.188"); // props.put("http.proxyPort", "80"); // props.put("proxySet", "true"); // props.put("socksProxySet", "true"); // props.put("socksProxyHost", "10.1.2.188"); // props.put("socksProxyPort", "80"); //设置系统属性(发送服务器): mail.smtp.host props.put("mail.smtp.host", smtpHost); //设置系统属性(身份认证): mail.smtp.auth props.put("mail.smtp.auth", "true"); //准备邮件会话对象session Session session = Session.getDefaultInstance(props); //创建Message对象用于管理要发送的消息 Message msg = new MimeMessage(session); //设置发件人 msg.setFrom(new InternetAddress(sender)); //设置收件人 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiver)); //设置主题 msg.setSubject("This is subject"); //创建一个消息对象 MimeMultipart multiMsg = new MimeMultipart();//支持HTML形式的Msg类型 //创建这个消息的body对象 BodyPart body = new MimeBodyPart(); body.setContent( "<meta http-equiv='Content-Type' content='text/html; charset=gb2312'/>" + "<h3>This is mail body</h3>", "text/html; charset=gb2312");//把页面内容设置进去 multiMsg.addBodyPart(body);//把body对象加入到消息对象中 //再创建一个消息对象用于添加附件 BodyPart bodyFile = new MimeBodyPart(); FileDataSource fileSource = new FileDataSource(filePath); bodyFile.setDataHandler(new DataHandler(fileSource)); bodyFile.setFileName(fileSource.getName()); multiMsg.addBodyPart(bodyFile);//把附件对象加入到消息对象中 msg.setContent(multiMsg);//把消息对象放到消息中 msg.saveChanges(); //开始发送邮件 //构建smtp类型的发送器对象 Transport transport = session.getTransport("smtp"); //连接 transport.connect(props.getProperty("mail.smtp.host"), senderName, senderPassword); //发送 transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); transport.close(); System.out.println("Complete!"); } }
邮件发送HTML正文中文乱码解决办法:
对于HTML内容加入方式加入,加入时指定编码格式即可
BodyPart bp = new BodyPart(); //第一种方式,直接加入HTML格式的字符串 bp.setContent(htmlString, "text/html; charset=utf-8"); //第二种方式,加入HTML文件 bp.setDataHandler(new DataHandler(new FileDataSource(htmlFile))); //加入编码方式解决乱码 bp.setHeader("Content-Type", "text/html; charset=utf-8"); //加入传输编码,在网上搜到一些种方法,但我测试的时侯不用也能解决乱码,保险起见吧 bp.setHeader("Content-Transfer-Encoding", "Base64");
邮件发送时间的设置,因为大部分人的邮件排序都是以时间排序的,有的人(特别是发广告)想把邮件的发送时间设置在以后,从而可以让邮件一直排在前面,然而这种时间设置对于一些专业邮箱是会被拒收的,如163就是这样。
邮件发送含图片(或其它如JS,CSS文件等)的HTML的处理办法。
一般有两种办法:
1. 把这些要链接到的文件放到服务器上,链接处填上url。
本文章仅供以后参考。