javamail发送html格式邮件,qq邮箱图片显示问题 本帖最后由 chenlei6101 于 2013-01-29 15:02:45 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package qq;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Serializable;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;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.mail.internet.MimeUtility;/** * @see 该类用来发送qq邮件 * @version 1.0 * */public class EmailTool implements Serializable { public static void main(String[] args) { try { /**只要你的电脑能上网,发件人账号密码地址都正确设置,这个邮件就绝对能发出去*/ String email = "[email protected]";// 收件人地址 String title = "找回密码";// 邮件标题 String url = "http://www.baidu.com"; String img = "http://img1.kaixin001.com.cn/i/sy_tp1_1.gif"; String templetPath = "D:\\test\\email\\findPass.txt"; String []args1 = new String[]{ "洪秀全", "hongxiuquan", email, url, url, url, img };// 邮件模板的参数设置 System.out.println(bean.sendEmail(email, title, templetPath, args1, templetPath));// 发送邮件 } catch (Exception e) { e.printStackTrace(); } } private static final long serialVersionUID = 1L; private static EmailTool bean = new EmailTool(); /** * @see 以单例模式获得javabean * @return Email * */ public static EmailTool getBean(){ return bean; } /** * @see 用QQ邮箱发邮件 * @param toEmail 收件人地址 * @param title 邮件标题 * @param templetPath 模板路径(物理路径) * @param args 模板中需要替换的值 * @param affixPath 附件的路径(物理路径,可以为null) * @return boolean * */ public Boolean sendEmail(String toEmail, String title, String templetPath, String []args, String affixPath) { Boolean result = false; try { Properties properties = new Properties(); Session session = Session.getInstance(properties, null); properties.put("mail.smtp.host", emailServerIP);// 设置服务器的IP或域名 properties.put("mail.smtp.auth", "true");// 允许smtp校验 Transport transport = session.getTransport("smtp"); transport.connect(emailServerIP, fromEmailAccount, fromEmailPassword);// 设置发件人的用户名和密码 Message message = new MimeMessage(session); message.setSubject(title);// 设置邮件主题 Address address[] = { new InternetAddress(fromEmail) };// 改变发件人地址 message.addFrom(address); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));// 设置收件人地址 message.setSentDate(new Date());// 设置发送时间 /**设置mail正文 ---begin*/ String content = readTemplet(templetPath);// 读取邮件模板的内容 for (int i = 0; i < args.length; i++) { content = content.replace("{" + i + "}", args[i]);// 替换模板中的占位符 } MimeMultipart multipart = new MimeMultipart(); MimeBodyPart contentPart = new MimeBodyPart(); contentPart.setDataHandler(new DataHandler(content, "text/html;charset=gbk"));// 设置正文内容 multipart.addBodyPart(contentPart);// 设置正文 if (null != affixPath && !"".equals(affixPath)) { File file = new File(affixPath); if (file.exists() && !file.isDirectory() && file.length() <= affixFileSize) {// 附件必须在10M以下 MimeBodyPart affixPart = new MimeBodyPart(); affixPart.setDataHandler(new DataHandler(new FileDataSource(affixPath)));// 读取附件 affixPart.setFileName(MimeUtility.encodeText(file.getName()));//设置附件标题 multipart.addBodyPart(affixPart);// 设置附件 } } message.setContent(multipart); /**设置mail正文---end*/ message.saveChanges();// 保存发送信息 transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));// 发送邮件 transport.close(); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } // 读模板文件(换行符为\n) private String readTemplet(String templetPath) { if (!new File(templetPath).exists()) { return ""; } try { InputStream input = new FileInputStream(templetPath); InputStreamReader read = new InputStreamReader(input, "UTF-8"); BufferedReader reader = new BufferedReader(read); String line; String result = ""; while ((line = reader.readLine()) != null) { result += line + "\n"; } reader.close(); read.close(); input.close(); return result.substring(result.indexOf("<html>")); } catch (Exception e) { e.printStackTrace(); return ""; } } /**发件人的账号密码地址必须用你自己的,而且要开通smtp服务(打开你的qq邮箱点几下就行了)*/ private String fromEmailAccount = "2457873910";// 发件人账号(qq号码) private String fromEmailPassword = "登录密码";// 发件人密码(qq密码) private String fromEmail = "[email protected]";// 发件人地址(qq邮箱) private Long affixFileSize = 1048576L * 10l;// 允许发送的最大附件大小(字节) private String emailServerIP = "smtp.qq.com";// 服务器的IP或域名}<html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk" /><title>找回密码</title></head><body>亲爱的用户 {0}:<br/> 您好!我们是XXX系统的工作人员!<br/> 感谢您对连锁门店管理系统的信赖和支持!<br/> 您在连锁门店管理系统注册的用户名是:{1}<br/> 您的邮箱地址是:{2}<br/> 请<a href="{3}">点击</a>或复制这个网址去重新设置您的密码(24小时之内有效):<br/> <a href="{4}">{5}</a><br/> 最后祝你生活愉快! <img src="{6}" border="0"/><br/></body></html>用这个试试,我也是这样发邮件的,就用qq服务器,图片可以正常显示 在jsp中怎么设置全局变量 java程序报错 如何通过HTML提取网页中的图片和其相关的文字? 今天面试问到了一个问题!你觉得JAVA的缺陷是什么?大伙一起谈谈 一个关于报表的问题 在线等 求教关于(button)的用法 mysql数据库里的中文信息取到jsp页面显示为‘??’,怎么办? 编译javabean的时候出现getConnection错误,怎么回事?(内详) 初级JSP问题,情况紧急,望诸位大侠帮忙解燃眉之急!! 两个非常简单的问题: java 如何将字符串转json方法 请教一个日志输出的问题
package qq;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
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.mail.internet.MimeUtility;/**
* @see 该类用来发送qq邮件
* @version 1.0
* */
public class EmailTool implements Serializable {
public static void main(String[] args) {
try {
/**只要你的电脑能上网,发件人账号密码地址都正确设置,这个邮件就绝对能发出去*/
String email = "[email protected]";// 收件人地址
String title = "找回密码";// 邮件标题
String url = "http://www.baidu.com";
String img = "http://img1.kaixin001.com.cn/i/sy_tp1_1.gif";
String templetPath = "D:\\test\\email\\findPass.txt";
String []args1 = new String[]{ "洪秀全", "hongxiuquan", email, url, url, url, img };// 邮件模板的参数设置
System.out.println(bean.sendEmail(email, title, templetPath, args1, templetPath));// 发送邮件
} catch (Exception e) {
e.printStackTrace();
}
} private static final long serialVersionUID = 1L;
private static EmailTool bean = new EmailTool();
/**
* @see 以单例模式获得javabean
* @return Email
* */
public static EmailTool getBean(){
return bean;
} /**
* @see 用QQ邮箱发邮件
* @param toEmail 收件人地址
* @param title 邮件标题
* @param templetPath 模板路径(物理路径)
* @param args 模板中需要替换的值
* @param affixPath 附件的路径(物理路径,可以为null)
* @return boolean
* */
public Boolean sendEmail(String toEmail, String title, String templetPath,
String []args, String affixPath) {
Boolean result = false;
try {
Properties properties = new Properties();
Session session = Session.getInstance(properties, null);
properties.put("mail.smtp.host", emailServerIP);// 设置服务器的IP或域名
properties.put("mail.smtp.auth", "true");// 允许smtp校验
Transport transport = session.getTransport("smtp");
transport.connect(emailServerIP, fromEmailAccount, fromEmailPassword);// 设置发件人的用户名和密码
Message message = new MimeMessage(session);
message.setSubject(title);// 设置邮件主题
Address address[] = { new InternetAddress(fromEmail) };// 改变发件人地址
message.addFrom(address);
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));// 设置收件人地址
message.setSentDate(new Date());// 设置发送时间
/**设置mail正文 ---begin*/
String content = readTemplet(templetPath);// 读取邮件模板的内容
for (int i = 0; i < args.length; i++) {
content = content.replace("{" + i + "}", args[i]);// 替换模板中的占位符
}
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setDataHandler(new DataHandler(content, "text/html;charset=gbk"));// 设置正文内容
multipart.addBodyPart(contentPart);// 设置正文
if (null != affixPath && !"".equals(affixPath)) {
File file = new File(affixPath);
if (file.exists() && !file.isDirectory() && file.length() <= affixFileSize) {// 附件必须在10M以下
MimeBodyPart affixPart = new MimeBodyPart();
affixPart.setDataHandler(new DataHandler(new FileDataSource(affixPath)));// 读取附件
affixPart.setFileName(MimeUtility.encodeText(file.getName()));//设置附件标题
multipart.addBodyPart(affixPart);// 设置附件
}
}
message.setContent(multipart);
/**设置mail正文---end*/
message.saveChanges();// 保存发送信息
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));// 发送邮件
transport.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 读模板文件(换行符为\n)
private String readTemplet(String templetPath) {
if (!new File(templetPath).exists()) {
return "";
}
try {
InputStream input = new FileInputStream(templetPath);
InputStreamReader read = new InputStreamReader(input, "UTF-8");
BufferedReader reader = new BufferedReader(read);
String line;
String result = "";
while ((line = reader.readLine()) != null) {
result += line + "\n";
}
reader.close();
read.close();
input.close();
return result.substring(result.indexOf("<html>"));
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**发件人的账号密码地址必须用你自己的,而且要开通smtp服务(打开你的qq邮箱点几下就行了)*/
private String fromEmailAccount = "2457873910";// 发件人账号(qq号码)
private String fromEmailPassword = "登录密码";// 发件人密码(qq密码)
private String fromEmail = "[email protected]";// 发件人地址(qq邮箱)
private Long affixFileSize = 1048576L * 10l;// 允许发送的最大附件大小(字节)
private String emailServerIP = "smtp.qq.com";// 服务器的IP或域名}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>找回密码</title>
</head>
<body>
亲爱的用户 {0}:<br/>
您好!我们是XXX系统的工作人员!<br/>
感谢您对连锁门店管理系统的信赖和支持!<br/>
您在连锁门店管理系统注册的用户名是:{1}<br/>
您的邮箱地址是:{2}<br/>
请<a href="{3}">点击</a>或复制这个网址去重新设置您的密码(24小时之内有效):<br/>
<a href="{4}">{5}</a><br/>
最后祝你生活愉快!
<img src="{6}" border="0"/><br/>
</body>
</html>
用这个试试,我也是这样发邮件的,就用qq服务器,图片可以正常显示