1、sendMail.java
import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MimetypesFileTypeMap;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.internet.AddressException;
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;
public class sendMail{
public static void main(String[] args) {
// TODO Auto-generated method stub
// 获取系统属性
Properties props = System.getProperties();
String smtpHost = "smtp.163.com";
// 源邮箱地址
String Sfrom = "
fxdlz@163.com";
// 目的邮箱地址
String Sto = "
lyq32@163.com";
// 源邮箱地址用户名和密码
String userName = "fxdlz";
String password = "123";
// 设置邮件服务器相关信息
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "25");
props.put("mail.transport.protocol", "smtp");
props.put("mail.store.protocol", "imap");
props.put("mail.stmp.class", "com.sun.mail.smtp.SMTPTrasport");
props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
// 必须通过一个Authenticator的子类SmtpAuth的对象auth来进行用户名和密码验证,SmtpAuth.java代码在最下面
SmtpAuth auth = new SmtpAuth();
auth.setUserinfo(userName, password);
// 得到一个会话
Session s = Session.getInstance(props, auth);
s.setPasswordAuthentication(new URLName(smtpHost), auth
.getPasswordAuthentication());
// 定义一个消息
MimeMessage message = new MimeMessage(s);
try {
InternetAddress from = new InternetAddress(Sfrom);
message.setFrom(from);
InternetAddress to = new InternetAddress(Sto);
message.addRecipient(Message.RecipientType.TO, to);
message.setSubject("JMail Test Application");
// 当需要发送附件时删除此段,若不发送附件,此句必须,否则出错
// message.setText("You JMail Application is successfull");
/*-----------------------发送附件--------------------------------*/
// 邮件消息内容的类型是 'Multipart'
// 邮件消息的MIME类型是 'multipart/mixed'
Multipart multipart = new MimeMultipart();
// 下面介绍邮件消息的文本部分
MimeBodyPart mbp1 = new MimeBodyPart();
String textPart = "Hello,I am Alec.";
// 为文本部分消息内容创建一个DataHandler对象
DataHandler data = new DataHandler(textPart, "text/plain");
// 设置文本MimeBodyPart的 DataHandler
mbp1.setDataHandler(data);
// 把文本的MimeBodyPart加入到Multipart容器中
multipart.addBodyPart(mbp1);
// 创建代表word附件的MimeBodyPart
MimeBodyPart mbp2 = new MimeBodyPart();
// 创建一个指向一个文件的DataHandler
FileDataSource fds = new FileDataSource(new File("D:\\lyq.txt")); //设置附件
// 确保附件被合适的MIME类型application/msword处理
MimetypesFileTypeMap ftm = new MimetypesFileTypeMap();
// MIME类型的语法是后面空格然后跟文件的扩展名
ftm.addMimeTypes("application/msword doc DOC");
fds.setFileTypeMap(ftm);
// 使用刚刚创建的FileDataSource实例化DataHandler
DataHandler fileData = new DataHandler(fds);
// 让这个MimeMultipart包含刚才的word文件
mbp2.setDataHandler(fileData);
// 为文件名指定字符集,否则虽然数据可以发到邮件中,但是无法识别出来
mbp2.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312",
null));
// 把包含了附件的MimeMultipart对象加到Multipart容器中
multipart.addBodyPart(mbp2);
// 最后,把MimeMessage的内容设置为Multipart对象
message.setContent(multipart);
/*-----------------------发送附件--------------------------------*/
// 发送消息
Transport.send(message);
System.out.println("Send Successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、SmtpAuth.java
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class SmtpAuth extends Authenticator {
private String user, password;
public void setUserinfo(String getuser, String getpassword) {
user = getuser;
password = getpassword;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
}
3、注意:必须先下载JavaMail 1.4,把mail.jar文件添加到典型安装路径下。如果不想发送附件,把发送附件代码部分删掉即可