javamail技术
//【注意】把*给为自己所需的;测试前提是接受者的邮箱可以接受smtp邮件。
package com.ly.javamail;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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 java.io.*;
//这是一个javamail,用于发送邮件的程序
public class sendMail {
private MimeMessage mimeMsg; //MIME邮件对象
private Session session; //邮件会话对象
private Properties props; //系统属性
private boolean needAuth = false; //smtp是否需要认证
private String username = ""; //smtp认证用户名和密码
private String password = "";
private Multipart mp; //Multipart对象,邮件内容,标题、附件等内容均添加到其中后在生成Multipart对象
public sendMail(String smtp) {
setSmtpHost(smtp);
createMimeMessage();
}
/**
*
* @param hostName
*/
private void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.smtp.host = "+hostName);
if(props == null){
props = System.getProperties(); //获得系统属性对象
}
props.put("mail.smtp.host", hostName); //设置SMTP主机
}
/**
*
* @return boolean
*/
private boolean createMimeMessage() {
try{
System.out.println("准备获取邮件会话对象");
session = Session.getDefaultInstance(props, null); //获取邮件会话对象
}catch(Exception e){
System.out.println("获取邮件会话对象错误!" + e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try{
mimeMsg = new MimeMessage(session); //创建MIME邮件对象
mp = new MimeMultipart(); //mp 一个multipart对象
return true;
}catch(Exception e){
System.out.println("创建MIME邮件对象失败!" + e);
return false;
}
}
/**
*
* @param need boolean
*/
public void setNeedAuth(boolean need){
System.out.println("设置smtp身份认证:mail.smtp.auth =" + need);
if(props == null){
props = System.getProperties();
}
if(need){
props.put("mail.smtp.auth", "true");
}else{
props.put("mail.smtp.auth", "false");
}
}
/**
*
* @param name String
* @param pass String
*/
public void setNamePass(String name,String pass){
System.out.println("程序得到用户名和密码");
username = name;
password = pass;
}
/**
*
* @param mailSubject String
* @return boolean
*/
public boolean setSubject(String mailSubject){
System.out.println("设置邮件主题!");
try{
mimeMsg.setSubject(mailSubject);
return true;
}catch(Exception e){
System.out.println("创建邮件主题失败!" + e);
return false;
}
}
/**
*
* @param mailBody String
* @return boolean
*/
public boolean setBody(String mailBody){
System.out.println("设置邮件主体!");
try{
BodyPart bp = new MimeBodyPart();
bp.setContent("<meta http-equiv=Content-Type content=text/html;charset=gbk>"
+ mailBody,"text/html;charset=gbk");
mp.addBodyPart(bp);
return true;
}catch(Exception e){
System.out.println("创建邮件正文发送失败!" + e);
return false;
}
}
/**
*
* @param fileName String
* @return boolean
*/
public boolean addFileAffix(String fileName){
System.out.println("增加邮件附件:" + fileName);
try{
BodyPart bp = new MimeBodyPart();
FileDataSource files = new FileDataSource(fileName);
bp.setDataHandler(new DataHandler(files));
bp.setFileName(files.getName());
mp.addBodyPart(bp);
return true;
}catch(Exception e){
System.err.println("添加邮件:" + fileName +" 发生错误!"+ e);
return false;
}
}
public boolean setFrom(String from){
System.out.println("设置发件人!");
try{
mimeMsg.setFrom(new InternetAddress(from)); //设置发件人
return true;
}catch(Exception e){
return false;
}
}
/**
*
* @param to String
* @return boolean
*/
public boolean setTo(String to){
System.out.println("设置收件人!");
if(to == null){
return false;
}
try{
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); //设置收件人
return true;
}catch(Exception e){
return false;
}
}
/**
*
* @param copyto String
* @return boolean
*/
public boolean setCopyTo(String copyto){
System.out.println("发送附件到");
if(copyto == null){
return false;
}
try{
mimeMsg.setRecipients(Message.RecipientType.CC, (Address[])InternetAddress.parse(copyto));
return true;
}catch(Exception e){
return false;
}
}
public boolean sendout(){
try{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件...");
Session mailSession = Session.getInstance(props,null);
Transport transport = mailSession.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"), username,password);
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
System.out.println("邮件发送成功!");
transport.close();
return true;
}catch(Exception e){
System.out.println("邮件发送失败!" + e);
return false;
}
}
public static void main(String[] args) {
//发送的邮件内容
String mailbody =
"<meta http-equiv=Content-Type content=text/html;charset=gbk/>" +
"<div align=center><h1 color=red>我是刘燕,我在测试javamail</h1></div>";
//指明让那个smtp转发(qq)
sendMail themail = new sendMail("smtp.qq.com");
//校验身份
themail.setNeedAuth(true);
//邮件标题
//if(themail.setSubject("测试案例") == false) return;
//将要发送的内容放入邮件体
if(themail.setBody(mailbody) == false) return;
//发送到哪里
if(themail.setTo("****@qq.com") == false) return;
//谁发送的
if(themail.setFrom("****@qq.com") == false) return;
//添加附件
//if(themail.addFileAffix("e:\\***") == false) return;
//将qq上的邮箱用户名和密码放入邮件体
themail.setNamePass("****", "***");
//发送
if(themail.sendout() == false) return;
}
}