标签:
/**
* 发送Mail
* @param revicer 接收人mail
* @param content 发送内容
* @throws AddressException
* @throws MessagingException
*/
public void sendMail(String revicer,String content,String subject) throws AddressException, MessagingException{
String host = SysUtils.getText("email.host");// "mail.sinoss.net";
String from = SysUtils.getText("email.from");;// "xmsb2009@sinoss.net";
String username = SysUtils.getText("email.username");;// "xmsb2009@sinoss.net";
String password = SysUtils.getText("email.password");;// "sinoss4340";
// Get system properties
Properties props = new Properties();
// Setup mail server
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true"); //这样才能通过验证
// Get session
javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
// watch the mail commands go by to the mail server
session.setDebug(false);
// Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(revicer));
message.setSubject(subject);
message.setContent(content, "text/html;charset=GBK");
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
JavaMail是Sun发布的用来处理E-mail的API,它可以方便地执行一些常用的邮件传输。虽然JavaMail是Sun的API之一,但它没有被加在标准的Java开发工具包(JDK)中,这就意味着使用之前必须另外下载JavaMail文件(http://www.sun.com),除此之外,要使用JavaMail,还需要有Sun的JavaBeans Activation Framework(JAF)支持,因此需要下载一个叫activation.jar的文件,将他们同时放在应用的lib目录下或其他Classpath包含的目录。
发送邮件过程中主要使用到的几个类:
1. Javax.mail.Session类
Session定义了一个基本的邮件会话,任何工作都是基于这个Session的。Session对象需要一个java.util.Properties对象得到类似邮件服务器、用户名、密码这样的信息。Session的构造函数是私有的,可以通过getDefaultInstance()方法取得一个单一的可以被共享的默认Session,如:
Properties props = new Properties();
……
Session session = Session.getDefaultInstance(props, null) ;
或者,可以通过getInstance()方法来创建一个惟一的Session,如:
Properties props = new Properties();
……
Session session = Session.getInstance(props, null) ;
2. Javax.mail.Message类
创建了Session对象后,就要创建Message来发送Session。Message是一个抽象类,在大部分应用中可以使用它的子类Javax.mail.internet.MimeMessage。
创建Message的方法如下:
MimeMessage message = new MimeMessage(session) ;
设置内容(content)的基本机制是使用setContent()方法:message.setContent(“Email Content.” , “text/plain”)。
如果能够明确地使用MimeMessage来创建Message,并且只是使用普通的文本(plain text),那么也可以使用setText(“Email Content.”)。
如果要创建其他类型的Message,如HTML类型的Message,那么还是使用前者message.setContent(“Email Content.” , “text/html”)。
设置主题(subject),使用setSubject()方法:message.setSubject(“Subject”)。
3. Javax.mail.Address类
Address是一个抽象类,可以使用它的子类javax.mail.internet.InternetAddress。
创建一个Address语句如下:
Address address = new InternetAddress(“test@company.com”);
如果希望在出现邮件地址的地方显示一个名称,那么只需要再多传递一个参数。
Address address = new InternetAddress(“test@company.com”, “Kylen”);
除此,需要为Message的from以及to字段创建address对象。为了识别发送者,使用setFrom()和setReplyTo()方法。
message.setFrdom(address) ;
如果需要显示多个from地址,可以使用addFrom()方法:
Address address[] = {……};
message.addFrom(address) ;
为了辨识Message的收件人,需要使用setRecipient()方法。
message.addRecipient(type, address) ;
Message.RecipientType 有几个预先定义好的类型:
Message.RecipientType.To 收件人
Message.RecipientType.CC 抄送
Message.RecipientType.BCC 暗送
同时发给多个人:
Address toAddress = new InternetAddress(“manager@company.com”);
Address[] ccAddress = {new InternetAddress(“colleague1@company.com”),
new InternetAddress(“colleague2@company.com”)} ;
message.addRecipient(Message.RecipientType.To , toAddress) ;
message.addRecipient(Message.RecipientType.CC , ccAddress) ;
4. Javax.mail.Transport类
最后,需要使用一个Transport类来完成邮件发送,可以通过两种方法发送邮件。Transport是一个抽象类,可以调用它的静态的send()方法来发送:
Transport.send(message) ;
或者,可以从Session中为所使用的协议取得一个指定的实例:
Transport transport = session.getTransport(“smtp”) ;
transport.sendMessage(message , message.getAllRecipients()) ;
transport.close() ;
经过以上的介绍,要用JavaMail发送一封普通的邮件就变得相当容易了。本实例编写了一个专门用于邮件处理的类MailUtil.java,其源代码如下:
package ch2.util.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailUtil {
static int port = 25; //smtp端口
static String server = "smtp.163.com"; //smtp服务器地址
static String from = "Webmaster<kylen@163.com>"; //发送者
static String user = "kylen@163.com"; //发送者地址
static String password = "1141940938"; //密码
public static void sendEmail(String email, String subject, String body) {
try {
Properties props = new Properties();
props.put("mail.smtp.host", server);
props.put("mail.smtp.port", String.valueOf(port));
props.put("mail.smtp.auth", "true");
Transport transport = null;
Session session = Session.getDefaultInstance(props, null);
transport = session.getTransport("smtp");
transport.connect(server, user, password);
MimeMessage msg = new MimeMessage(session);
msg.setSentDate(new Date());
InternetAddress fromAddress = new InternetAddress(from);
msg.setFrom(fromAddress);
InternetAddress[] toAddress = new InternetAddress[1];
toAddress[0] = new InternetAddress(email);
msg.setRecipients(Message.RecipientType.TO, toAddress);
msg.setSubject(subject, "UTF-8");
msg.setText(body, "UTF-8");
msg.saveChanges();
transport.sendMessage(msg, msg.getAllRecipients());
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
package com.svse;
import java.io.File; /* *建立 附件类,只有文件,即附件才文件名 */publicclass AttachBean { private String cid; private File file; private String fileName; public String getCid() { return cid; } publicvoid setCid(String cid) { this.cid = cid; } public File getFile() { return file; } publicvoid setFile(File file) { this.file = file; } public String getFileName() { return fileName; } publicvoid setFileName(String fileName) { this.fileName = fileName; } public AttachBean() { } public AttachBean(File file, String fileName) { super(); this.file = file; this.fileName = fileName; } }
package com.svse;
import java.util.ArrayList;
import java.util.List;
/**
* 表示邮件类,你需要设置:账户名和密码、收件人、抄送(可选)、暗送(可选)、主题、内容,以及附件(可选)
*
* 在创建了Mail对象之后
* 可以调用它的setSubject()、setContent(),设置主题和正文
* 也可以调用setFrom()和 addToAddress(),设置发件人,和添加收件人。
* 也可以调用addAttch()添加附件
* 创建AttachBean:new AttachBean(new File("..."), "fileName");
*/publicclass Mail {
private String from;//发件人private StringBuilder toAddress = new StringBuilder();//收件人private StringBuilder ccAddress = new StringBuilder();//抄送private StringBuilder bccAddress = new StringBuilder();//暗送private String subject;//主题private String content;//正文
// 附件列表private List<AttachBean> attachList = new ArrayList<AttachBean>();
public Mail() {}
public Mail(String from, String to) {
this(from, to, null, null);
}
public Mail(String from, String to, String subject, String content) {
this.from = from;
this.toAddress.append(to);
this.subject = subject;
this.content = content;
}
/**
* 返回发件人
* @return*/publicvoid setFrom(String from) {
this.from = from;
}
/**
* 返回发件人
* @return*/public String getFrom() {
return from;
}
/**
* 返回主题
*/public String getSubject() {
return subject;
}
/**
* 设置主题
*/publicvoid setSubject(String subject) {
this.subject = subject;
}
/**
* 获取主题内容
*/public String getContent() {
return content;
}
/**
* 设置主题内容
* @param content
*/publicvoid setContent(String content) {
this.content = content;
}
/**
* 获取收件人
* @return*/public String getToAddress() {
return toAddress.toString();
}
/**
* 获取抄送
* @return*/public String getCcAddress() {
return ccAddress.toString();
}
/**
* 获取暗送
* @return*/public String getBccAddress() {
return bccAddress.toString();
}
/**
* 添加收件人,可以是多个收件人
* @param to
*/publicvoid addToAddress(String to) {
if(this.toAddress.length() > 0) {
this.toAddress.append(",");
}
this.toAddress.append(to);
}
/**
* 添加抄送人,可以是多个抄送人
* @param cc
*/publicvoid addCcAddress(String cc) {
if(this.ccAddress.length() > 0) {
this.ccAddress.append(",");
}
this.ccAddress.append(cc);
}
/**
* 添加暗送人,可以是多个暗送人
* @param bcc
*/publicvoid addBccAddress(String bcc) {
if(this.bccAddress.length() > 0) {
this.bccAddress.append(",");
}
this.bccAddress.append(bcc);
}
/**
* 添加附件,可以添加多个附件
* @param attachBean
*/publicvoid addAttach(AttachBean attachBean) {
this.attachList.add(attachBean);
}
/**
* 获取所有附件
* @return*/public List<AttachBean> getAttachs() {
returnthis.attachList;
}
}
package com.svse;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
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;
import javax.mail.internet.MimeMessage.RecipientType;
/**
* 建立邮件工具类 发送邮件
* @author 00
*
*/publicclass MailUtils {
publicstatic Session createSession(String host, final String username, final String password) {
Properties prop = new Properties();
prop.setProperty("mail.host", host);// 指定主机
prop.setProperty("mail.smtp.auth", "true");// 指定验证为true
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
returnnew PasswordAuthentication(username, password);
}
};
// 获取session对象return Session.getInstance(prop, auth);
}
/**
* 发送指定的邮件
*
* @param mail
*/publicstaticvoid send(Session session, final Mail mail) throws MessagingException,
IOException {
MimeMessage msg = new MimeMessage(session);// 创建邮件对象
msg.setFrom(new InternetAddress(mail.getFrom()));// 设置发件人
msg.addRecipients(RecipientType.TO, mail.getToAddress());// 设置收件人
// 设置抄送
String cc = mail.getCcAddress();
if (!cc.isEmpty()) {
msg.addRecipients(RecipientType.CC, cc);
}
// 设置暗送
String bcc = mail.getBccAddress();
if (!bcc.isEmpty()) {
msg.addRecipients(RecipientType.BCC, bcc);
}
msg.setSubject(mail.getSubject());// 设置主题
MimeMultipart parts = new MimeMultipart();// 创建部件集对象
MimeBodyPart part = new MimeBodyPart();// 创建一个部件
part.setContent(mail.getContent(), "text/html;charset=utf-8");// 设置邮件文本内容
parts.addBodyPart(part);// 把部件添加到部件集中///////////////////////////////////////////
// 添加附件
List<AttachBean> attachBeanList = mail.getAttachs();// 获取所有附件if (attachBeanList != null) {
for (AttachBean attach : attachBeanList) {
MimeBodyPart attachPart = new MimeBodyPart();// 创建一个部件
attachPart.attachFile(attach.getFile());// 设置附件文件 attachPart.setFileName(MimeUtility.encodeText(attach
.getFileName()));// 设置附件文件名
String cid = attach.getCid();
if(cid != null) {
attachPart.setContentID(cid);
}
parts.addBodyPart(attachPart);
}
}
msg.setContent(parts);// 给邮件设置内容
Transport.send(msg);// 发邮件 }
}
package com.wenjie;
import java.io.IOException;
import javax.mail.MessagingException;
import javax.mail.Session;
import cn.itcast.mail.Mail;
import cn.itcast.mail.MailUtils;
publicclass MailTest {
publicstaticvoid main(String args[]){
String host = "smtp.163.com";//网易163邮件传输协议 腾讯 qq的是smtp.qq.com/**
* 这里需要注意一下 如果你想用qq邮箱作为发件人邮箱的话 记得把邮箱传输协议host值改为smtp.qq.com
* 另外 username登陆名还是 一样 直接写QQ号,不用加后缀
*/
String username = "用户名>不加后缀";//发件人邮箱的用户名 这里不要加后缀@163.com/** 注意事项
* 如果是用的QQ邮箱的话 这里的password不能写QQ邮箱的登陆密码 你要去登录到QQ邮箱 点 设置>账户 下面会有一个"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务"
* 选项,把"POP3/SMTP服务" 开启来 这时候 如果你之前没开启过 那么会提示你 设置独立密码 设置完成后 password的值就写你刚才设置的独立密码即可 ,否则会验证失败
* 如果你用的是163或者126的话 就直接写登陆密码即可
*/
String password = "密码"; //发件人邮箱的登陆密码/**
* 这里发件人 要写全名
*/
String from = "邮箱全名";//发件人的邮箱 全名 加后缀/**
* 收件人 同样要写全名
*/
String to = "收件人的邮箱";//收件人的邮箱/**
* 主题自定义
*/
String subject = "邮件测试";//邮件主题/**
* 自定义
*/
String content = "http://http://www.cnblogs.com/wenjie123";//邮件的内容/**
* 调用写好的邮件帮助类 MailUtils 直接调用createSession 根据以上(host, username, password三个参数)创建出session
*/
Session session = MailUtils.createSession(host, username, password);
/**
* 创建邮件对象from, to,subject,content 这三个参数
*/
Mail mail = new Mail(from, to,subject,content);
try {
/**
* 最后一步 调用MailUtils的send方法 将session和创建好的邮件对象传进去 发送就ok了
*/
MailUtils.send(session, mail);
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
标签:
原文地址:http://www.cnblogs.com/Lichuntao/p/5188711.html