package OSChina;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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;
/**
*
*
* Description:use the javamail to send email!Must use sun's mail.jar,no apache
* jar.
*
*
* @author
*/
public class SendMail {
public static void main(String[] args) {
SendMail sendMail = new SendMail("3332211@qq.com",
"xxxxx@126.com", "smtp.126.com", "username",
"password", "测试Java Mail", "您好,Javamail!我测试!");
// 增加附件
sendMail.addAttachment("D:/english.txt");
// sendMail.addAttachment("D://IOTest.java");
if (sendMail.send()) {
System.out.println("Successful!");
}
}
private String to; // 接收人
private String from; // 发送人
private String smtpServer; // smtp地址.
private String userName;
private String password;
private String subject;
private String content;
// 记录所有附件文件的集合,发送邮件的附件
List attachments = new ArrayList();
public SendMail(String to, String from, String smtpServer, String userName,
String password, String subject,
String content) {
this.to = to;
this.from = from;
this.smtpServer = smtpServer;
this.userName = userName;
this.password = password;
this.subject = subject;
this.content = content;
}
// 将字符串转换为中文,否则标题会发生乱码现象,QQ邮箱为UTF-8.用GBK.GB2312都会乱码.
public String translateChinese(String strText) {
try {
// MimeUtility.encodeText(String text, String charset, String
// encoding) throws java.io.UnsupportedEncodingException
// text 头值 . charset 字符集。如果此参数为 null,则使用平台的默认字符集。
// encoding 要使用的编码。当前支持的值为 "B" 和 "Q"。如果此参数为 null,则在大部分字符使用 ASCII
// 字符集编码时使用 "Q" 编码;其他情况使用 "B" 编码。
strText = MimeUtility.encodeText(new String(strText.getBytes(),
"UTF-8"), "UTF-8", "B");
} catch (Exception e) {
e.printStackTrace();
}
return strText;
}
// 增加附件
public void addAttachment(String fname) {
attachments.add(fname);
}
public boolean send() {
// 创建邮件Session所需的Properties对象.API建议使用set而不是put(putall).
Properties props = new Properties();
props.setProperty("mail.smtp.host", smtpServer);
props.setProperty("mail.smtp.auth", "true");
// 创建Session对象,代表JavaMail中的一次邮件会话.
// Authenticator==>Java mail的身份验证,如QQ邮箱是需要验证的.所以需要用户名,密码.
// PasswordAuthentication==>系统的密码验证.内部类获取,或者干脆写个静态类也可以.
Session session = Session.getDefaultInstance(props,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
);
try {
// 构造MimeMessage并设置相关属性值,MimeMessage就是实际的电子邮件对象.
MimeMessage msg = new MimeMessage(session);
// 设置发件人
msg.setFrom(new InternetAddress(from));
// 设置收件人,为数组,可输入多个地址.
InternetAddress[] addresses = { new InternetAddress(to) };
// Message.RecipientType==>TO(主要接收人),CC(抄送),BCC(密件抄送)
msg.setRecipients(Message.RecipientType.TO, addresses);
// 设置邮件主题,如果不是UTF-8就要转换下.
// subject=translateChinese(subject);
msg.setSubject(subject);
// =====================正文部分===========
// 构造Multipart容器
Multipart mp = new MimeMultipart();
// =====================正文文字部分===========
// 向Multipart添加正文
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setText(content);
// 将BodyPart添加到MultiPart容器中
mp.addBodyPart(mbpContent);
// =====================正文附件部分===========
// 向MulitPart添加附件,遍历附件列表,将所有文件添加到邮件消息里
for (String efile : attachments) {
MimeBodyPart mbpFile = new MimeBodyPart();
// 以文件名创建FileDataSource对象
FileDataSource fds = new FileDataSource(efile);
// 处理附件
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(fds.getName());
// 将BodyPart添加到Multipart容器中
mp.addBodyPart(mbpFile);
}
attachments.clear();
// 向MimeMessage添加Multipart
msg.setContent(mp);
msg.setSentDate(new Date());
// 发送邮件,使用如下方法!
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getSmtpServer() {
return smtpServer;
}
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}