不知道该叫原创还是叫转贴.有参考别人代码,也有自己的创新.如有版权问题请及时通知我.
1. 一个单例的发送类
package sendmail;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
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 javax.mail.internet.MimeUtility;
/**
* <p> Title: MailSender</p>
* <p> Description:</p>
* <p>Created: 2011-4-14 下午08:49:13</p>
*
* @author ShengYan
* @version
*/
public class MailSender {
static {
getProperties();
}
private MailSender() {
}
static class SingletonHolder {
static MailSender instance = new MailSender();
}
public static MailSender getInstance() {
return SingletonHolder.instance;
}
private static String HOST;
private static String USERNAME;
private static String PASSWORD;
private static String FROM;
private static String TO;
private static String MAIL_HOST="smtp.mobiscloud.com";
private static String MAIL_USERNAME="support@mobiscloud.com";
private static String MAIL_PASSWORD="1123456";
private static String MAIL_FROM="support@mobiscloud.com";
private static String MAIL_TO="sheng.yan@mobiscloud.com";
public static final String EMAIL_SUBJECT = "subject";
public static final String EMAIL_TEXT = "text";
public static final String EMAIL_ATTACHMENT = "attachment";
public static void main(String[] args) {
MailSender sender = MailSender.getInstance();
Map<String, String> map = new HashMap<String, String>();
map.put(EMAIL_SUBJECT, "标题 is xxx");
map.put(EMAIL_TEXT, "内容 is ccc");
map.put(EMAIL_ATTACHMENT,
"C:/Users/yansheng/Pictures/binding_expression.png");
sender.sendEmail(map);
}
private static void getProperties() {
String path = MailSender.class.getResource(MailSender.class.getSimpleName() + ".properties").getPath();
path = path.substring(1);
System.out.println("-------------mailsender path: " + path);
Properties prop = new Properties();
FileReader reader = null;
try {
reader = new FileReader(path);
prop.load(reader);
} catch (IOException e) {
e.printStackTrace();
}
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (0 != prop.size()) {
HOST = prop.getProperty("MAIL_HOST");
USERNAME = prop.getProperty("MAIL_USERNAME");
PASSWORD = prop.getProperty("MAIL_PASSWORD");
FROM = prop.getProperty("MAIL_FROM");
TO = prop.getProperty("MAIL_TO");
} else {
HOST = MAIL_HOST;
USERNAME = MAIL_USERNAME;
PASSWORD = MAIL_PASSWORD;
FROM = MAIL_FROM;
TO = MAIL_TO;
}
}
public boolean sendEmail(Map<String, String> data) {
// 创建Properties 对象
Properties props = System.getProperties();
props.put("mail.smtp.host", HOST); // 全局变量
props.put("mail.smtp.auth", "true");
// 创建邮件会话
//不带auth
// Session session = Session.getDefaultInstance(props);
Session session = Session.getDefaultInstance(props,
new Authenticator() { // 验账账户
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
try {
// 定义邮件信息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(FROM));
message.addRecipients(Message.RecipientType.TO, TO);
// 添加邮件发送时间(不知道体现在哪儿)
message.setSentDate(new Date());
// 要编码,否则中文会出乱码,貌似这个方法是对数据进行了
// ("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=")形势的包装
message.setSubject(MimeUtility.encodeText(data.get(EMAIL_SUBJECT),
"gbk", "B"));
MimeMultipart mmp = new MimeMultipart();
MimeBodyPart mbp_text = new MimeBodyPart();
// "text/plain"是文本型,没有样式,
// "text/html"是html样式,可以解析html标签
mbp_text.setContent(data.get(EMAIL_TEXT), "text/html;charset=gbk");
mmp.addBodyPart(mbp_text); // 加入邮件正文
// 处理附件,可以添加多个附件
if (data.get(EMAIL_ATTACHMENT) != null) {
String[] files = data.get(EMAIL_ATTACHMENT).split(",");
if (files.length != 0) {
for (String file : files) {
MimeBodyPart mbp_file = new MimeBodyPart();
FileDataSource fds = new FileDataSource(file);
mbp_file.setDataHandler(new DataHandler(fds));
mbp_file.setFileName(MimeUtility.encodeText(
fds.getName(), "gbk", "B"));
mmp.addBodyPart(mbp_file);
}
}
}
message.setContent(mmp);
// message.setText(data.get(Constants.EMAIL_TEXT));
// 发送消息
// session.getTransport("smtp").send(message); //也可以这样创建Transport对象
Transport.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
2.一个properties文件
#POST 服务器MAIL_HOST=g.gmail.com
#发件登录用户MAIL_USERNAME=support@google.com
#发件登录密码MAIL_PASSWORD=1123456
#发件人MAIL_FROM=support@google.co
m#收件人MAIL_TO=recevie@google.com
参考资料:http://coolshell.cn/articles/4261.html